PROGRAMMIAMO
Internet - Protocollo TCP: segmentazione
Il protocollo TCP

Il protocollo TCP è stato progettato per garantire una trasmissione affidabile, su una rete non affidabile. Esso inoltre offre una comunicazione detta full-duplex, cioè in cui il flusso dati tra mittente e destinatario è bidirezionale. Più precisamente i flussi dati, con direzione diverse, possono coesistere contemporaneamente. Ciò vuol dire che un generico host potrà trasmettere dati ad un altro e nello stesso momento riceverne dati senza che ciò comprometta l'affidabilità della trasmissione.

La connessione TCP offre all'applicazione che si trova al livello superiore l'impressione di usufruire di una linea dedicata (mentre in realtà, come sappiamo, si tratta solo di un canale logico). In questo senso le sue funzioni assomigliano a quelle di una connessione telefonica fra due utenti: anche in questo caso abbiamo una connessione full-duplex (entrambi possono parlare contemporaneamente)e inoltre i due utenti hanno l'impressione che vi sia un collegamento diretto fra i loro apparecchi telefonici (anche se in realtà non è così). Inoltre, come vedremo più avanti, come nella conversazione telefonica, anche nel protocollo TCP ci sono delle procedure per stabilire la connessione (come es. fare il numero sul telefono) e per abbatterla (es. chiudere la conversazione).

La connessione TCP viene anche detta  point-to-point (punto a punto), cioè con un solo mittente e un solo destinatario. Questo la differenzia da altri tipi di trasmissione, come per esempio il broadcast, dove la sorgente è unica ma i destinatari sono tutti gli altri nodi connessi,

Le caratteristiche principali del TCP possono essere così riassunte:

Suddivisione in segmenti

La Protocol Data Unit (PDU) del protocollo TCP si chiama tecnicamente segmento (segment). Come ogni PDU anche il segmento è composto da un header e da una parte di dati (body).

In generale i dati che TCP deve trasmettere sono quelli che gli vengono passati dal livello superiore, al quale fornisce i servizi. Se consideriamo di nuovo il semplice esempio della richiesta di una pagina web da un browser a un web server, il browser si serve di TCP per inviare la richiesta e, in modo simile, il server usa TCP per recapitare al browser la risposta. I dati da trasmettere, in entrambi i casi, sono costituiti da una payload del livello HTTP, cioè di un'intera PDU del livello superiore.

Per motivi pratici cui abbiamo già accennato più volte in precedenza, non è conveniente trasmettere in rete un blocco di dati troppo grosso, poiché esso potrebbe andar perso o risultare danneggiato durante la trasmissione (e quindi potrebbe essere necessario ritrasmetterlo integralmente). Per esempio non è opportuno trasmettere in un "blocco unico" un'intera immagine di alcuni megabyte di dimensione, ma conviene suddividerla prima della trasmissione in parti più piccole.

Di questa operazione di suddivisione si occupa appunto il TCP (una ulteriore suddivisione in pacchetti può essere anche effettuata sul livello inferiore dal protocollo IP). Pertanto, a seconda dei casi, la parte di dati di un segmento TCP potrebbe:

Per essere ancora più specifici, è ragionevole ad esempio che una richiesta GET di pagina web possa stare interamente in un unico segmento (essendo molto piccola), mentre la risposta a tale richiesta potrebbe essere suddivisa in più segmenti diversi. Si osservi a questo proposito la figura seguente in cui vengono sinteticamente mostrati entrambi i casi:

Si noti come nel primo caso la PDU HTTP sia stata semplicemente incapsulata all'interno di un unico segmento, in quanto le sue dimensioni erano inferiori alle massime dimensioni di un segmento. Nel secondo caso invece la PDU è stata divisa in due parti, che, con l'aggiunta di un header TCP, sono diventate due segmenti separati.

E' importante notare come il protocollo TCP deve occuparsi sia della suddivisione in segmenti della PDU in trasmissione che, in ricezione, della sua ricostruzione a partire dai segmenti ricevuti.

Per quanto riguarda le dimensioni dei segmenti, non è certamente nostra intenzione approfondire troppo l'argomento. In generale le massime dimensioni di un segmento devono rispettare i limiti imposti alle dimensioni dei pacchetti dalle reti che bisogna attraversare (Maximum Trasmission UnitMTU). Un tipico valore per MTU sono i 1500 byte imposti dalle reti Ethernet. A tale valore bisogna però sottrarre lo spazio occupato dall'header aggiunto dal livello IP sottostante, per cui si ottiene come massima dimensione dei segmenti il valore tipico di 1460 byte per la parte dati cui vanno aggiunti 20 byte per l'header TCP, per un totale di 1480 byte.

La figura seguente mostra come una PDU proveniente da una applicazione di livello superiore viene suddivisa in segmenti TCP con l'aggiunta di un header e quindi tali segmenti vengano incapsulati in pacchetti del livello inferiore (IP):

Struttura di un segmento TCP

Fatte le precedenti premesse, possiamo ora dare un'occhiata alla struttura di un segmento TCP:

Notiamo anzitutto la tipica suddivisione in una parte di header (in giallo) e in una parte di dati (in rosa). Esaminiamo quindi un po' più nel dettaglio le parti principali che lo compongono:

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it