Universta' di Torino
  CISI > HOME > TCP/IP

Il protocollo TCP/IP

Il TCP/IP e' un insieme di protocolli sviluppato per interconnettere reti di calcolatori. Questi protocolli si presentano con un'architettura stratificata. Per i non adetti ai lavori vedremo di spiegarci con un esempio.

Supponiamo di dover gestire del traffico di posta elettronica. Il primo livello di stratificazione e' quello identificato dal protocollo per l'invio del messaggio che identifica il mittente, il destinatiario, nonche' il testo dello stesso messaggio.

A questo livello si sovrappone il TCP, il protocollo che si incarica di controllare che i dati del mittente raggiungano effettivamente il destinatario. Il messaggio viene all'uopo articolato in datagrammi e TCP si preoccupa che ogni datagramma giunga correttamente al destinatario.

Ai due si sovrappone ancora un altro applicativo, IP, che e' deputato all'instradamento dei dati su Internet.

E per ultimo abbiamo un quarto livello, quello di interfaccia (Ethernet, seriale, ecc).


Il livello TCP

TCP o Transfer Control Protocol si occupa di spezzettare in datagrammi i dati da inviare, cosi' come di riassemblare i datagrammi ricevuti, e di richiedere il reinvio di questi pacchetti di dati se si sono persi per strada. E IP procede all'instradamento degli stessi. Da notare che ogni livello di protocollo ignora completamente l'altro; e di fatti ogni livello di protocollo aggiunge delle intestazioni ai datagrammi, cosicche' questi sono univoci ed imperdibili.

Un esempio, che seguiremo anche piu' avanti, ci permettera' di capire il meccanismo. Supponiamo di dover spedire un messaggio ad un altro computer attraverso la rete Internet. Rappresentiamo i bytes di questo file con dei pallini:

Il protocollo che controlla il trasferimento (TCP) rompe tale file in pezzi piu' maneggevoli, essendosi messo preventivamente d'accordo con il ricevente sulla massima ampiezza che puo' essere usata, e dipendentemente anche dalla rete che hanno in comune. Il file pertanto, schematicamente, diventa:

· · · · · ·

A questo punto, per cio' che si diceva prima, all'inizio di ogni datagramma (graficamente le tre palline) viene attaccato un header, una intestazione. La tecnologia attuale attribuisce 20 bytes (160 bit) ad ogni header, che possiamo rappresentare come segue:

________________________________________________ |BIT 0 8|9 16|17 | |-----------------------------------------------| | SOURCE PORT | DESTINATION PORT | |-----------------------------------------------| | SEQUENCE NUMBER | |-----------------------------------------------| | ACKNOWLEDGMENT NUMBER | |-----------------------------------------------| |DATA OFFSET | RESERVED | WINDOW | |-----------------------------------------------| | CHECKSUM | URGENT POINTER | |_______________________________________________|

E vediamo di spiegare questa tabella.

  • SOURCE PORT e' l'interfaccia che si occupa del transito del file che viene inviato.
  • DESTINATION PORT e', ovviamente, l'equivalente che viene raggiunto nell'altro computer. Il significato di queste due ripartizioni e' da ricercare nel fatto che ogni sistema puo' essere provvisto di piu' porte e puo' cosi' connettere conteporanemente piu' di un utente. Source Port e Destination Port si interscambiano quando l'utente contattato manda a sua volta indietro dei dati.
  • SEQUENCE NUMBER, specifico per ogni datagramma, permette al corrispondente di assicurarsi della corretta ricostruzione e quindi ricezione perfetta del file.
  • Come ci si accorge che il ricevente ha effettivamente ricevuto il datagramma e nella giusta sequenza? Il destinatario (target) invia al mittente (sender) un ACKNOWLEDGEMENT NUMBER, che andra' a formare il Sequence Number dei dati ricevuti dal corrispondente.
  • WINDOW e' un campo che serve a controllare quanti dati possono essere inviati. Poiche' il corrispondente deve avere il tempo di immagazzinare la serie di datagrammi in arrivo (che varia in dipendenza da molti fattori) rimanda di volta in volta al mittente, tramite il campo Window, quanti dati puo' ancora ricevere; per cui via via che vengono scambaiti i dati, il campo varia continuamente. Questo campo risulta vitale per informare il mittente quando deve sospendere l'invio dei dati e quando riprendere la trasmissione.
  • CHECKSUM presenta la somma di tutti i bytes contenuti nel datagramma che deve risultare identica nel datagramma di partenza e nel datagramma di arrivo. E' anche questa una informazione di controllo; infatti se durante il trasferiemtno dei dati qualcosa va storto i dati di checksum non saranno identici e verra' richiesto di ritrasmettere il datagramma errato.
  • URGENT permette ad uno dei due sistemi di segnalare all'altro la necessita' di passare a trasmettere un determinato ottetto. Con tale sistema si forza, ad esempio, l'interruzione nella trasmissione.


Il file, dopo lo spezzettamento che abbiamo gia' visto, e con l'aggiunta di un header per ogni pezzo, diventera':



Il livello IP

A questo punto il TCP ha formato, dal file iniziale, una serie di datagrammi; questi ora vengono passati alla serie di istruzioni IP (Internet Protocol). Queste istruzioni serviranno ai datagrammi per individuare il percorso che dovranno seguire per arrivare al destinatario. Per questo IP giustappone pure lui un header da 20 bytes ad ogni datagramma. Anche per questo datagramma forniamo uno schema:

____________________________________________________________ |BIT 0 |9 16|17 | |-----------------------------------------------------------| | VERSION | IHL | TYPE OF SERVICE | TOTAL LENGHT | |-----------------------------------------------------------| | IDENTIFICATION | FLAGS | FRAGMENT OFFSET | |-----------------------------------------------------------| | TIME OF LIVE | PROTOCOL | HEADER CHECKSUM | |-----------------------------------------------------------| | SOURCE INTERNET ADDRESS | |-----------------------------------------------------------| | DESTINATION INTERNET ADDRESS | |-----------------------------------------------------------| | TCP HEADER, DATA, ...... | |___________________________________________________________|

E cerchiamo di chiarirne il contentuto.

  • Il SOURCE INTERNET ADDRESS e' l'indirizzo del mittente; e' un numero di 32 bit (ad esempio 130.192.59.20). Come il mittente su una lettera, informa il destinatario di una missiva su chi sia il mittente.
  • Il DESTINATION INTERNET ADDRESS e' un altro numero, anche esso di 32 bit, ed e' l'indirizzo univoco del destinatario. Sia il mittente sia il destinatario sono cosi' individuabili correttamente ed inequivocabilmente da qualsiasi macchina attraverso la quale passino i datagrammi, che procedera' al corretto instradamento.
  • PROTOCOL NUMBER identifica il tipo di protocollo usato e dermina il corretto trattamento del datagramma da parte del ricevente.
  • CHECKSUM permette al destinatario del datagramma di controllare che durante il trasferimento non siano intervenuti fattori di disturbo che ne abbiano alterato le caratteristiche. E' autonomo dal checksum di TCP e riguarda pertanto solo l'header di IP.
  • I campi FLAGS E FRAGMENT OFFSET servono per la ricomposizione ordinata dei datagrammi nel caso essi si dividano. Puo' infatti succedere che siano fisicamente troppo grossi per una rete e quindi si sbriciolino per riuscire a passare.
  • TIME TO LIVE: e' una valvola di sicurezza nel caso si venisse a creare un loop di un datagramma; infatti ogni volta che un datagramma passa per un sistema tale numero diminusce fine a diventare zero, al che viene cancellato.


A questo punto, con l'aggiunta anche dell'header di IP il nostro file diventa:

ecc...


Il livello di interfaccia

Interviene ora una ulteriore stratificazione, in quanto ai datagrammi si sovrappongono dei caratteri di controllo, che sono tipici dell'interfaccia elettrica (Ethernet, RS 232, un TNC nel caso della comunicazione radio). Questi caratteri sono di basso livello hardware, e come tali vengono trattati.

Una rappresentazione grafica del treno di pacchetti cosi' ottenuto sara'...

ecc...

...dalla quale si evince che i caratteri di controllo propri dell'interfaccia elettrica sono posti all'inizio ed alla fine del datagramma.