Passa al contenuto principale

RFC 9293 - Transmission Control Protocol (Protocollo di Controllo della Trasmissione)

  • Stato: Internet Standard
  • Pubblicato: August 2022
  • Stream: IETF
  • Aggiorna: RFC1011, RFC1122, RFC5961
  • Sostituisce: RFC793, RFC879, RFC2873, RFC6093, RFC6429, RFC6528, RFC6691
  • Errata: Nessun errata

Sommario (Abstract)​

Questo documento specifica il Transmission Control Protocol (TCP, Protocollo di Controllo della Trasmissione). TCP è un importante protocollo del livello di trasporto nello stack di protocolli Internet, e si è continuamente evoluto nel corso di decenni di utilizzo e crescita di Internet. In questo periodo, sono state apportate numerose modifiche a TCP come specificato in RFC 793, sebbene queste siano state documentate solo in modo frammentario. Questo documento raccoglie e riunisce tali modifiche con la specifica del protocollo da RFC 793.

Questo documento rende obsoleto RFC 793, così come i RFC 879, 2873, 6093, 6429, 6528 e 6691 che hanno aggiornato parti di RFC 793. Aggiorna i RFC 1011 e 1122, e dovrebbe essere considerato come una sostituzione per le porzioni di quei documenti che trattano i requisiti TCP. Aggiorna anche RFC 5961 aggiungendo una piccola chiarificazione nella gestione del reset nello stato SYN-RECEIVED. I bit di controllo dell'header TCP da RFC 793 sono stati anche aggiornati sulla base di RFC 3168.


Indice (Table of Contents)​

Appendici (Appendices)​


Risorse Correlate​


Riferimento Rapido​

Cos'è TCP?​

TCP (Transmission Control Protocol, Protocollo di Controllo della Trasmissione) è un protocollo centrale del livello di trasporto nello stack di protocolli Internet, che fornisce:

  • Orientato alla Connessione - Stabilisce la connessione prima della comunicazione
  • Trasmissione Affidabile - Garantisce che i dati arrivino correttamente
  • Consegna Ordinata - Riceve i dati nell'ordine inviato
  • Controllo di Flusso - Previene il sovraccarico del ricevitore
  • Controllo della Congestione - Evita la congestione della rete

Funzionalità Principali​

  • ✅ Handshake a Tre Vie - Stabilimento della connessione
  • ✅ Meccanismo dei Numeri di Sequenza - Garantisce ordine e affidabilità
  • ✅ Riconoscimento - Conferma dell'arrivo dei dati
  • ✅ Ritrasmissione su Timeout - Gestisce la perdita di pacchetti
  • ✅ Finestra Scorrevole - Controllo di flusso
  • ✅ Controllo della Congestione - Stabilità della rete

TCP vs UDP​

CaratteristicaTCPUDP
ConnessioneOrientato alla connessioneSenza connessione
AffidabilitàAffidabileNon affidabile
OrdinamentoGarantitoNon garantito
VelocitàPiù lentoPiù veloce
OverheadMaggioreMinore
Casi d'usoHTTP, SMTP, FTP, SSHDNS, Streaming video, Gaming

Importanza di RFC 9293​

RFC 9293 vs RFC 793:

  • RFC 793 (1981) - Specifica TCP originale
  • RFC 9293 (2022) - Standard più recente, consolida 40 anni di evoluzione
  • Rende obsoleto RFC 793 e diversi aggiornamenti
  • Chiarisce i requisiti di implementazione TCP moderni
  • Aggiorna le best practice di sicurezza e prestazioni

Miglioramenti Principali:

  • Consolida tutte le estensioni e gli errata di TCP
  • Chiarisce le opzioni obbligatorie
  • Aggiorna i requisiti di controllo della congestione
  • Migliora le considerazioni sulla sicurezza
  • Riflette l'ambiente di rete moderno

Porte TCP Comuni​

  • HTTP: 80
  • HTTPS: 443
  • SMTP: 25
  • FTP: 20, 21
  • SSH: 22
  • Telnet: 23
  • POP3: 110
  • IMAP: 143

RFC Correlati:

  • RFC 768 - UDP (User Datagram Protocol)
  • RFC 791 - IP (Internet Protocol)
  • RFC 5681 - Controllo della Congestione TCP
  • RFC 7323 - Estensioni TCP (Scaling della finestra, Timestamp)
  • RFC 7413 - TCP Fast Open
  • RFC 8200 - Specifica IPv6

Appendice B. Riepilogo dei Requisiti TCP​

Questa appendice riassume tutti i requisiti di implementazione contrassegnati con parole chiave RFC 2119 (MUST, SHOULD, MAY, ecc.) in RFC 9293.

Requisiti di Protocollo di Base​

Requisiti MUST (Obbligatorio)​

  1. Formato dell'Header

    • Le implementazioni TCP DEVONO seguire il formato dell'header definito in RFC 9293
    • I bit riservati DEVONO essere impostati a zero
    • Il campo checksum DEVE sempre essere calcolato e inviato
  2. Elaborazione delle Opzioni

    • DEVE supportare l'opzione Maximum Segment Size (MSS) (Kind 2)
    • DEVE ignorare le opzioni non riconosciute
    • DEVE supportare End of Option List (EOL, Kind 0) e No-Operation (NOP, Kind 1)
  3. Numeri di Sequenza

    • L'Initial Sequence Number (ISN) DEVE essere scelto in modo imprevedibile
    • I numeri di sequenza DEVONO tracciare ogni byte di dati
  4. Gestione della Connessione

    • DEVE usare l'handshake a tre vie per stabilire le connessioni
    • DEVE seguire le transizioni di stato appropriate
    • DEVE implementare lo stato TIME-WAIT
  5. Trasmissione Dati

    • DEVE consegnare i dati ricevuti in ordine
    • DEVE validare i checksum dei segmenti
    • DEVE rispettare la dimensione della finestra
  6. Gestione degli Errori

    • DEVE scartare i segmenti con checksum non validi
    • DEVE inviare RST per stati non validi

Requisiti SHOULD (Raccomandato)​

  1. Prestazioni

    • Le implementazioni DOVREBBERO supportare l'opzione di Window Scaling (RFC 7323)
    • Le implementazioni DOVREBBERO supportare l'opzione Timestamp (RFC 7323)
    • Le implementazioni DOVREBBERO supportare SACK (Selective Acknowledgment, RFC 2018)
  2. Controllo della Congestione

    • Le implementazioni DOVREBBERO usare algoritmi di controllo della congestione appropriati
    • DOVREBBE seguire gli algoritmi definiti in RFC 5681
  3. Sicurezza

    • Le implementazioni DOVREBBERO proteggersi da attacchi ISN prevedibili
    • Le implementazioni DOVREBBERO mitigare gli attacchi blind in-window (RFC 5961)

Requisiti MAY (Opzionale)​

  1. Funzionalità Opzionali

    • Le implementazioni POSSONO supportare il meccanismo del puntatore urgente
    • Le implementazioni POSSONO supportare opzioni TCP aggiuntive
  2. Ottimizzazioni

    • Le implementazioni POSSONO implementare l'algoritmo di Nagle
    • Le implementazioni POSSONO usare il meccanismo di ACK ritardato

Requisiti Dettagliati per Categoria​

1. Elaborazione delle Opzioni​

Obbligatorio (MUST):

  • Kind 0 (EOL): Fine della Lista di Opzioni
  • Kind 1 (NOP): No-Operation
  • Kind 2 (MSS): Dimensione Massima del Segmento

Raccomandato (SHOULD):

  • Kind 3: Window Scaling (RFC 7323)
  • Kind 4,5: SACK Permesso e SACK (RFC 2018)
  • Kind 8: Timestamp (RFC 7323)

Opzionale (MAY):

  • Altre opzioni standardizzate

2. Numeri di Sequenza​

Obbligatorio (MUST):

  • L'ISN DEVE essere generato usando un generatore di numeri casuali crittograficamente sicuro
  • I numeri di sequenza DEVONO tracciare ogni byte di dati
  • DEVE rilevare e scartare i segmenti duplicati

Raccomandato (SHOULD):

  • DOVREBBE proteggersi da attacchi di numero di sequenza (RFC 6528)

3. Gestione della Connessione​

Obbligatorio (MUST):

  • DEVE implementare l'handshake a tre vie
  • DEVE seguire le transizioni di stato di connessione appropriate
  • DEVE mantenere lo stato TIME-WAIT per almeno 2MSL
  • DEVE gestire apertura e chiusura simultanee

Raccomandato (SHOULD):

  • DOVREBBE mitigare gli attacchi SYN flood con SYN cookies o meccanismo equivalente

4. Trasmissione Dati​

Obbligatorio (MUST):

  • DEVE consegnare i dati in ordine
  • DEVE rispettare i limiti di dimensione della finestra
  • DEVE validare i checksum
  • DEVE ritrasmettere i segmenti persi

Raccomandato (SHOULD):

  • DOVREBBE implementare meccanismi di timeout appropriati
  • DOVREBBE usare algoritmi di controllo della congestione

5. Gestione degli Errori​

Obbligatorio (MUST):

  • DEVE scartare i segmenti con checksum non validi
  • DEVE inviare RST per stati non validi
  • DEVE gestire correttamente gli ACK fuori intervallo

Raccomandato (SHOULD):

  • DOVREBBE mitigare gli attacchi di reset blind (RFC 5961)

Lista di Controllo dell'Implementazione​

Funzionalità Core​

  • Elaborazione completa dell'header TCP
  • Handshake a tre vie
  • Chiusura della connessione a quattro vie
  • Gestione dei numeri di sequenza
  • Calcolo e validazione del checksum
  • Controllo di flusso di base (meccanismo della finestra)
  • Meccanismo di ritrasmissione
  • Gestione dello stato TIME-WAIT

Opzioni Obbligatorie​

  • Opzione MSS (Dimensione Massima del Segmento)
  • EOL (Fine della Lista di Opzioni)
  • NOP (No-Operation)

Funzionalità Raccomandate​

  • Window Scaling (RFC 7323)
  • Opzione Timestamp (RFC 7323)
  • SACK (Selective Acknowledgment, RFC 2018)
  • Controllo della congestione appropriato (RFC 5681)
  • ECN (Explicit Congestion Notification, RFC 3168)

Funzionalità di Sicurezza​

  • Generazione sicura dell'ISN
  • Protezione SYN flood
  • Mitigazione attacco blind in-window (RFC 5961)
  • Validazione del numero di sequenza

Ottimizzazioni delle Prestazioni​

  • ACK ritardato
  • Algoritmo di Nagle
  • Ritrasmissione veloce e recupero veloce
  • Misurazione RTT appropriata

Definizioni dei Livelli di Requisito​

Come definito in RFC 2119:

  • MUST / REQUIRED / SHALL: Requisito assoluto
  • MUST NOT / SHALL NOT: Divieto assoluto
  • SHOULD / RECOMMENDED: Dovrebbe essere seguito salvo valida ragione
  • SHOULD NOT / NOT RECOMMENDED: Dovrebbe essere evitato salvo valida ragione
  • MAY / OPTIONAL: Elemento veramente opzionale

Nota: Per i dettagli completi dei requisiti e il contesto, fare riferimento al corpo di RFC 9293. Questa appendice fornisce un riepilogo pratico ma non sostituisce la specifica ufficiale.