Discutiamo ora del TCP6.51, che offre ai processi applicativi un servizio di trasporto a circuito virtuale, attaccato ad una porta6.52 di un nodo remoto individuato dall'indirizzo IP. Il suo compito è quello di ricevere dai processi applicativi dei dati, suddividerli in pacchetti, ed inviarli al suo pari che svolge il processo inverso.
La struttura di un pacchetto TCP è mostrata in figura, e comprende una intestazione composta da 6 gruppi (o più) di 4 byte per un minimo di 192 bit, a cui segue un numero variabile di gruppi di 4 byte di Dati, provenienti dagli strati applicativi superiori.
Offset (4 bit) codifica il numero di parole da 4 byte dell'intestazione, mentre nei 6 bit Riservati non è mai stato scritto nulla. I 6 bit del campo Controllo hanno ognuno un nome ed un significato preciso, qualora posti ad uno. Il primo (URG) indica che il campo urgent pointer contiene un valore significativo; ACK indica che si sta usando il Numero di Riscontro; PSH indica un pacchetto urgente che non può rispettare la coda in ricezione; RST segnala un malfunzionamento e impone il reset della connessione; SYN è pari ad uno solo per il primo pacchetto inviato per richiedere di creare una connessione; FIN indica che la sorgente ha esaurito i dati da trasmettere.
I 16 bit di Finestra rappresentano il numero di byte che, a partire dal numero espresso dal Numero di Riscontro, il trasmittente è in grado di ricevere, ed il suo utilizzo sarà meglio illustrato tra breve nel contesto del controllo di flusso. Il Checksum serve al ricevente per verificare se si sia verificato un errore, il Puntatore Urgente contiene il numero di sequenza dell'ultimo byte di una sequenza di dati urgenti, e le Opzioni (di lunghezza variabile) sono presenti solo raramente, ed utilizzate a fini di controllo, ad esempio per variare la dimensione della finestra. Infine, il Riempimento conclude l'ultima parola da 32 bit.
Uno stesso pacchetto TCP può svolgere solo funzioni di segnalazione, o di sola trasmissione dati, od entrambe.
Il TCP offre un servizio di circuito virtuale, e quindi prima di inviare dati, deve effettuare un colloquio iniziale con il nodo remoto di destinazione. In particolare, il colloquio ha lo scopo di accertare la disponibilità del destinatario ad accettare la connessione, e permette alle due parti di scambiarsi i rispettivi numeri di sequenza descritti alla nota 53.
La chiusura può avvenire per diverse cause: o perchè è terminato il messaggio, segnalato dal bit FIN, o per situazioni anomale, che il TCP indica con il bit RST.
Allo scopo di realizzare un controllo di flusso, il TCP prevede l'uso dell'NR del ricevente per dosare il ritmo con cui trasmettere i propri pacchetti. La lunghezza di Finestra comunicata con il SYN del proprio pari, determina la quantità di memoria riservata per i buffer dedicati alla connessione, che viene gestita come una memoria a scorrimento o finestra scorrevole.
scopo di ricomporre l'ordine originario dei pacchetti consegnati disordinatamente dallo strato IP di rete. Non appena il ricevente completa un segmento contiguo al limite inferiore, sposta quest'ultimo in avanti di tanti bytes quanti ne è riuscito a leggere in modo contiguo, ed invia un riscontro con NR pari al più basso numero di byte che ancora non è pervenuto6.56.
Nel caso in cui sia settato il bit URG6.57, si stanno inviando dati urgenti fuori sequenza, e che non devono rispettare il protocollo a finestra, come ad esempio per recapitare un segnale di interrupt relativo ad una sessione Telnet per terminare una applicazione remota.
Trascorso un certo tempo (detto timeout) nell'attesa di un riscontro, il trasmittente ritiene che alcuni pacchetti sono andati persi, e li re-invia6.58. Il valore del timeout viene calcolato dinamicamente dal TCP in base alle sue misure di round-trip delay6.59, ossia del tempo che intercorre in media tra invio di un pacchetto e ricezione del suo riscontro. In questo modo il TCP si adatta alle condizione di carico della rete ed evita di ri-spedire pacchetti troppo presto o di effettuare attese inutili. In particolare, nel caso di rete congestionata aumenta la frequenza dei pacchetti persi, e valori di timeout troppo ridotti potrebbero peggiorare la situazione.
Il meccanismo a finestra scorrevole determina, istante per istante, il numero massimo di bytes che possono essere trasmessi verso il destinatario, e pertanto consente al nodo meno veloce di adeguare la velocità di tramissione alle proprie capacità. La dimensione della finestra può essere variata (su iniziativa del ricevente) nel corso della connessione, in accordo al valore presente nel campo Finestra dell'intestazione TCP. Ad esempio, una connessione può iniziare con un dimensione di finestra ridotta, e poi aumentarla nel caso in cui non si verifichino errori, la rete sopporti il traffico, ed i nodi abbiano memoria disponibile.
Il TCP può usare la sua misura di round-trip delay come un indicatore di congestione della rete, e lo scadere di un timeout come un segnale del peggioramento della congestione. In tal caso quindi, può essere ridotta la dimensione della finestra di trasmissione, caricando così di meno la rete.
Lo User Datagram Protocol è ancora un protocollo di trasporto, che opera senza connessione, e sostituisce il TCP per inviare pacchetti isolati, o serie di pacchetti la cui ritrasmissione (se perduti) sarebbe inutile. Ad esempio, è utilizzato nella trasmissione di dati in tempo reale, oppure per protocolli di interrogazione e controllo come il DNS.
In una prossima edizione saranno brevemente illustrate le funzioni di http, ftp, telnet, smtp, ping, traceroute, nntp.