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.