DCN - Protocollo di controllo della trasmissione

Il Transmission Control Protocol (TCP) è uno dei protocolli più importanti della suite Internet Protocols. È il protocollo più utilizzato per la trasmissione di dati in reti di comunicazione come Internet.

Caratteristiche

  • TCP è un protocollo affidabile. Cioè, il destinatario invia sempre un riconoscimento positivo o negativo sul pacchetto di dati al mittente, in modo che il mittente abbia sempre un chiaro indizio sul fatto che il pacchetto di dati abbia raggiunto la destinazione o debba inviarlo di nuovo.

  • TCP garantisce che i dati raggiungano la destinazione prevista nello stesso ordine in cui sono stati inviati.

  • TCP è orientato alla connessione. TCP richiede che venga stabilita la connessione tra due punti remoti prima di inviare i dati effettivi.

  • TCP fornisce il controllo degli errori e il meccanismo di ripristino.

  • TCP fornisce comunicazioni end-to-end.

  • TCP fornisce il controllo del flusso e la qualità del servizio.

  • TCP opera in modalità punto a punto client / server.

  • TCP fornisce un server full duplex, cioè può svolgere ruoli sia di destinatario che di mittente.

Intestazione

La lunghezza dell'intestazione TCP è di minimo 20 byte e massimo 60 byte.

  • Source Port (16-bits)  - Identifica la porta di origine del processo di applicazione sul dispositivo di invio.

  • Destination Port (16-bits) - Identifica la porta di destinazione del processo di applicazione sul dispositivo ricevente.

  • Sequence Number (32-bits) - Numero di sequenza di byte di dati di un segmento in una sessione.

  • Acknowledgement Number (32-bits)  - Quando è impostato il flag ACK, questo numero contiene il numero di sequenza successivo del byte di dati previsto e funziona come riconoscimento dei dati ricevuti in precedenza.

  • Data Offset (4-bits)  - Questo campo implica sia la dimensione dell'intestazione TCP (parole a 32 bit) sia l'offset dei dati nel pacchetto corrente nell'intero segmento TCP.

  • Reserved (3-bits)  - Riservato per uso futuro e tutti sono impostati a zero per impostazione predefinita.

  • Flags (1-bit each)

    • NS - Il bit Nonce Sum viene utilizzato dal processo di segnalazione della notifica di congestione esplicita.

    • CWR - Quando un host riceve un pacchetto con il bit ECE impostato, imposta Congestion Windows Reduced per riconoscere che ECE ha ricevuto.

    • ECE -Ha due significati:

      • Se il bit SYN è chiaro a 0, ECE significa che il pacchetto IP ha il bit CE (esperienza di congestione) impostato.

      • Se il bit SYN è impostato su 1, ECE significa che il dispositivo è compatibile con ECT.

    • URG - Indica che il campo Puntatore urgente contiene dati significativi e deve essere elaborato.

    • ACK- Indica che il campo di riconoscimento ha un significato. Se ACK è azzerato, indica che il pacchetto non contiene alcun riconoscimento.

    • PSH - Quando è impostato, è una richiesta alla stazione ricevente di PUSH dati (non appena arrivano) all'applicazione ricevente senza buffering.

    • RST - Reset flag ha le seguenti caratteristiche:

      • Viene utilizzato per rifiutare una connessione in entrata.

      • Viene utilizzato per rifiutare un segmento.

      • Viene utilizzato per riavviare una connessione.

    • SYN - Questo flag viene utilizzato per impostare una connessione tra host.

    • FIN- Questo flag viene utilizzato per rilasciare una connessione e in seguito non vengono più scambiati dati. Poiché i pacchetti con flag SYN e FIN hanno numeri di sequenza, vengono elaborati nell'ordine corretto.

  • Windows Size  - Questo campo viene utilizzato per il controllo del flusso tra due stazioni e indica la quantità di buffer (in byte) che il ricevitore ha allocato per un segmento, ovvero quanti dati si aspetta il ricevitore.

  • Checksum - Questo campo contiene il checksum di intestazione, dati e pseudo intestazioni.

  • Urgent Pointer  - Punta al byte di dati urgenti se il flag URG è impostato a 1.

  • Options  - Facilita le opzioni aggiuntive che non sono coperte dalla normale intestazione. Il campo opzione è sempre descritto in parole a 32 bit. Se questo campo contiene dati inferiori a 32 bit, il riempimento viene utilizzato per coprire i bit rimanenti per raggiungere il limite di 32 bit.

Indirizzamento

La comunicazione TCP tra due host remoti avviene tramite i numeri di porta (TSAP). I numeri delle porte possono variare da 0 a 65535, suddivisi in:

  • Porte di sistema (0-1023)
  • Porte utente (1024 - 49151)
  • Porte private / dinamiche (49152-65535)

Gestione della connessione

La comunicazione TCP funziona nel modello Server / Client. Il client avvia la connessione e il server la accetta o la rifiuta. L'handshaking a tre vie viene utilizzato per la gestione della connessione.

Istituzione

Il client avvia la connessione e invia il segmento con un numero di sequenza. Il server lo riconosce indietro con il proprio numero di sequenza e ACK del segmento del client che è uno in più rispetto al numero di sequenza del client. Il client dopo aver ricevuto un ACK del suo segmento invia un riconoscimento della risposta del server.

pubblicazione

Sia il server che il client possono inviare il segmento TCP con il flag FIN impostato su 1. Quando l'estremità ricevente risponde con ACKnowledging FIN, quella direzione della comunicazione TCP viene chiusa e la connessione viene rilasciata.

Gestione della larghezza di banda

TCP utilizza il concetto di dimensione della finestra per soddisfare le esigenze di gestione della larghezza di banda. La dimensione della finestra indica al mittente all'estremità remota, il numero di segmenti di byte di dati che il ricevitore a questa estremità può ricevere. TCP utilizza la fase di avvio lento utilizzando la dimensione della finestra 1 e aumenta la dimensione della finestra in modo esponenziale dopo ogni comunicazione riuscita.

Ad esempio, il client utilizza la dimensione di Windows 2 e invia 2 byte di dati. Quando il riconoscimento di questo segmento ricevuto, la dimensione della finestra viene raddoppiata a 4 e successivamente inviato il segmento inviato sarà lungo 4 byte di dati. Quando viene ricevuto il riconoscimento del segmento di dati a 4 byte, il client imposta la dimensione delle finestre su 8 e così via.

Se una conferma viene persa, ovvero i dati persi nella rete di transito o hanno ricevuto NACK, la dimensione della finestra viene ridotta della metà e la fase di avvio lento ricomincia.

Controllo degli errori e controllo del flusso

TCP utilizza i numeri di porta per sapere quale processo applicativo ha bisogno per trasferire il segmento di dati. Oltre a ciò, utilizza i numeri di sequenza per sincronizzarsi con l'host remoto. Tutti i segmenti di dati vengono inviati e ricevuti con numeri di sequenza. Il mittente sa quale ultimo segmento di dati è stato ricevuto dal destinatario quando riceve un ACK. Il Ricevitore conosce l'ultimo segmento inviato dal Mittente facendo riferimento al numero di sequenza del pacchetto ricevuto di recente.

Se il numero di sequenza di un segmento ricevuto di recente non corrisponde al numero di sequenza che il destinatario si aspettava, viene scartato e NACK viene rispedito. Se due segmenti arrivano con lo stesso numero di sequenza, il valore del timestamp TCP viene confrontato per prendere una decisione.

Multiplexing

La tecnica per combinare due o più flussi di dati in una sessione si chiama multiplexing. Quando un client TCP inizializza una connessione con il server, fa sempre riferimento a un numero di porta ben definito che indica il processo dell'applicazione. Il client stesso utilizza un numero di porta generato in modo casuale da pool di numeri di porta privati.

Utilizzando TCP Multiplexing, un client può comunicare con un numero di processi applicativi diversi in una singola sessione. Ad esempio, un client richiede una pagina Web che a sua volta contiene diversi tipi di dati (HTTP, SMTP, FTP ecc.), Il timeout della sessione TCP viene aumentato e la sessione viene mantenuta aperta più a lungo in modo che l'overhead di handshake a tre vie possa essere evitato.

Ciò consente al sistema client di ricevere più connessioni su una singola connessione virtuale. Queste connessioni virtuali non sono adatte ai server se il timeout è troppo lungo.

Controllo della congestione

Quando una grande quantità di dati viene inviata al sistema che non è in grado di gestirla, si verifica una congestione. TCP controlla la congestione tramite il meccanismo di Windows. TCP imposta una dimensione della finestra che indica all'altra estremità la quantità di segmento di dati da inviare. TCP può utilizzare tre algoritmi per il controllo della congestione:

  • Aumento additivo, diminuzione moltiplicativa

  • Avvio lento

  • Timeout React

Gestione timer

TCP utilizza diversi tipi di timer per controllare e gestire varie attività:

Timer Keep-Alive:

  • Questo timer viene utilizzato per verificare l'integrità e la validità di una connessione.

  • Quando il tempo di keep-alive scade, l'host invia un sondaggio per verificare se la connessione esiste ancora.

Timer di ritrasmissione:

  • Questo timer mantiene la sessione stateful dei dati inviati.

  • Se il riconoscimento dei dati inviati non viene ricevuto entro il tempo di ritrasmissione, il segmento di dati viene inviato di nuovo.

Persist timer:

  • La sessione TCP può essere sospesa da entrambi gli host inviando Window Size 0.

  • Per riprendere la sessione, un host deve inviare Dimensioni finestra con un valore maggiore.

  • Se questo segmento non raggiunge mai l'altra estremità, entrambe le estremità potrebbero aspettarsi l'una per l'altra per un tempo infinito.

  • Quando il timer Persist scade, l'host invia nuovamente la dimensione della finestra per far sapere all'altro capo.

  • Persist Timer aiuta a evitare deadlock nella comunicazione.

Attesa a tempo:

  • Dopo aver rilasciato una connessione, uno degli host attende un tempo di attesa temporizzata per terminare completamente la connessione.

  • Questo per assicurarsi che l'altra estremità abbia ricevuto il riconoscimento della sua richiesta di terminazione della connessione.

  • Il timeout può essere un massimo di 240 secondi (4 minuti).

Crash Recovery

TCP è un protocollo molto affidabile. Fornisce il numero di sequenza a ciascuno dei byte inviati nel segmento. Fornisce il meccanismo di feedback, cioè quando un host riceve un pacchetto, è vincolato ad ACK quel pacchetto con il numero di sequenza successivo atteso (se non è l'ultimo segmento).

Quando un server TCP si blocca a metà della comunicazione e riavvia il processo, invia la trasmissione TPDU a tutti i suoi host. Gli host possono quindi inviare l'ultimo segmento di dati che non è mai stato non riconosciuto e proseguire.