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)
- 1. Scopo e Ambito (Purpose and Scope)
- 2. Introduzione (Introduction)
- 2.1 Linguaggio dei Requisiti
- 2.2 Concetti Chiave di TCP
- 3. Specifica Funzionale (Functional Specification)
- 3.1 Formato dell'Header
- 3.2 Definizioni di Opzioni Specifiche
- 3.3 Panoramica della Terminologia TCP
- 3.4 Numeri di Sequenza
- 3.5 Stabilire una Connessione
- 3.6 Chiudere una Connessione
- 3.7 Segmentazione
- 3.8 Comunicazione dei Dati
- 3.9 Interfacce
- 3.10 Elaborazione degli Eventi
- 4. Glossario (Glossary)
- 5. Modifiche da RFC 793 (Changes from RFC 793)
- 6. Considerazioni sulla Sicurezza (Security Considerations)
- 7. Considerazioni IANA (IANA Considerations)
- 8. Riferimenti (References)
- 8.1 Riferimenti Normativi
- 8.2 Riferimenti Informativi
Appendici (Appendices)
- Appendice A. Diagramma dello Stato di Connessione TCP
- Appendice B. Riepilogo dei Requisiti TCP
- Appendice C. Verifica TCP
Risorse Correlate
- Testo Ufficiale: RFC 9293
- Pagina Ufficiale: RFC 9293 DataTracker
- Errata: RFC Editor Errata
- STD 7: Questo documento fa parte dello Standard Internet 7
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
| Caratteristica | TCP | UDP |
|---|---|---|
| Connessione | Orientato alla connessione | Senza connessione |
| Affidabilità | Affidabile | Non affidabile |
| Ordinamento | Garantito | Non garantito |
| Velocità | Più lento | Più veloce |
| Overhead | Maggiore | Minore |
| Casi d'uso | HTTP, SMTP, FTP, SSH | DNS, 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)
-
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
-
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)
-
Numeri di Sequenza
- L'Initial Sequence Number (ISN) DEVE essere scelto in modo imprevedibile
- I numeri di sequenza DEVONO tracciare ogni byte di dati
-
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
-
Trasmissione Dati
- DEVE consegnare i dati ricevuti in ordine
- DEVE validare i checksum dei segmenti
- DEVE rispettare la dimensione della finestra
-
Gestione degli Errori
- DEVE scartare i segmenti con checksum non validi
- DEVE inviare RST per stati non validi
Requisiti SHOULD (Raccomandato)
-
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)
-
Controllo della Congestione
- Le implementazioni DOVREBBERO usare algoritmi di controllo della congestione appropriati
- DOVREBBE seguire gli algoritmi definiti in RFC 5681
-
Sicurezza
- Le implementazioni DOVREBBERO proteggersi da attacchi ISN prevedibili
- Le implementazioni DOVREBBERO mitigare gli attacchi blind in-window (RFC 5961)
Requisiti MAY (Opzionale)
-
Funzionalità Opzionali
- Le implementazioni POSSONO supportare il meccanismo del puntatore urgente
- Le implementazioni POSSONO supportare opzioni TCP aggiuntive
-
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.