Il protocollo TCP/IP
[ la modulazione
radio digitale ]
[ il TNC ]
[ il protocollo AX25 ]
[ il protocollo TCP/IP ]
[ il TCP/IP via radio ]
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. 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'...
...dalla quale si evince che i caratteri
di controllo propri dell'interfaccia elettrica sono posti all'inizio ed alla
fine del datagramma.