Il Datagramma IPIl datagramma IP (IP datagram) è l'unità di trasferimento di base del TCP/IP. Esso presenta una forte analogia con i frames di una rete reale; infatti si compone di una header area e di una data area.L'header contiene l'indirizzo di destinazione (Destination IP Address) e di origine (Source IP Address), il livello IP, inoltre, svolge funzioni di routing fondamentali per l'architettura dell'intera rete internet proprio su questi indirizzi.
La differenza con l'header del frame fisico è che quest'ultimo contiene un indirizzo fisico, quello del datagramma contiene un indirizzo IP.Di seguito la struttura del datagramma IP: L'header contiene anche:
- un type field, che identifica il contenuto del datagramma
- un checksum field, che assicura l'integrità dei valori contenuti in esso
- il Time To Live, che specifica quanto tempo può sopravvivere un datagramma IP nella rete.
Un altro elemento molto importante è il protocol. Un datagramma IP, infatti, può contenere al suo interno un pacchetto TCP, un UDP, un ICMP o un VMTP e quindi è necessario procedere con un demultiplex logico basato appunto su tale campo.Fra le altre informazioni, l'header del datagramma contiene il controllo della frammentazione, delle precedenze e degli errori veri e propri.Idealmente, un intero datagramma IP viene incapsulato in un frame fisico, per rendere efficiente la trasmissione attraverso una rete fisica reale. Ma ogni rete locale consente una dimensione minima e una massima (indicata con Maximum Transfer Unit MTU) per i pacchetti che la attraversano, ed è quindi ovvio che, siccome i datagrammi IP devono essere incapsulati in un frame, non possono prescindere da queste dimensioni per altro fortemente variabili a seconda del tipo di rete.Quindi, per tutelarsi dalla disomogeneità delle reti, si è deciso di scegliere una dimensione dei datagrammi IP conveniente ed escogitare poi un metodo (segmentation and reassembly) di dividerli in piccoli pezzi detti frammenti per poter essere accettati da una rete con qualsivoglia piccolo MTU e, ovviamente, riassemblati in uscita.
Il RoutingIn un sistema basato sul packets switching quale il TCP/IP, il routing rappresenta il processo di scelta del percorso su cui inoltrare i pacchetti ed il router è un computer che effettua l'instradamento.Da sottolineare che il routing IP avviene in ambiente software, mentre in realtà il routing fisico è a livello di MAC.Il routing IP, in un sistema ideale, dovrebbe esaminare:
- la connessione alla rete
- la lunghezza del datagramma
- quando selezionare il percorso migliore.
Quando un programma applicativo su un host tenta di instaurare una comunicazione con un host remoto, sia l'host locale che i routers partecipano all'instradamento dei datagrammi IP fino alla loro destinazione. Si può parlare di due tipi di routing:Diretto - se l'host locale ed il remoto appartengono alla stessa rete fisica, in questo caso non sarà necessario l'impiego di router.Indiretto - se l'utente destinazione è connesso ad una rete fisica diversa ed è necessario instradare il datagramma sorgente attraverso un router.Per sapere se una destinazione appartiene alla propria rete, l'utente sorgente estrae dall'indirizzo IP di destinazione la parte relativa alla rete, la cosiddetta netid, e la confronta con la propria: se differisce, evidentemente la destinazione del datagramma è esterna.Nel primo caso, il Network Interface Layer dell'utente di origine incapsula il datagramma IP in un frame fisico, associa l'indirizzo IP al relativo fisico ed usa l'hardware della rete per trasferirlo. Un possibile meccanismo per conoscere l'indirizzo fisico corrispondente è quello di utilizzare il protocollo ARP.Il caso del routing indiretto è più difficoltoso, perché l'utente di origine deve identificare il router a cui inviare il datagramma; se nella rete locale c'è un solo router che permette la connessione con altre reti, il routing diventa molto più semplice poiché, appena l'host locale ha capito che la destinazione non appartiene alla propria rete, indirizza il datagramma direttamente al router. Se è connesso a più routers, lo indirizzerà a quello più vicino.Una volta che il frame contenente il datagramma raggiunge il router, il software del Network Interface Layer estrae il datagramma incapsulato e le routine di routing, e in base agli indirizzi internet, il software IP seleziona il prossimo router a cui inviare il datagramma, incapsulato in un nuovo frame.I routers in Internet danno vita ad una struttura interconnessa che li pone in continuo contatto tra loro. In questa struttura il datagramma scorre finché non raggiunge quel particolare router che gli permette di giungere direttamente a destinazione.L'algoritmo che svolge queste funzioni (IP routing algorithm) utilizza su ogni macchina una tabella di routing (IP routing table), che contiene informazioni circa le possibili destinazioni e il modo come raggiungerle. Se contenesse tutte le destinazioni possibili diventerebbe troppo ingombrante e sarebbe impossibile tenerla aggiornata.Quindi, solitamente, ci si limita a mantenere le informazioni degli utenti sulla stessa rete o su quelle più frequentemente utilizzate, lasciando un indirizzo di default per tutti gli altri.Dato che i router operano in base alla parte di indirizzo IP relativo alla rete di destinazione l'instradamento è molto efficace e le tabelle necessarie di dimensioni abbastanza piccole.Una tabella di routing contieneuna coppia N-R, dove N è l'indirizzo IP della rete di destinazione ed R (next-hop) è quello del successivo router che permette di raggiungere la rete N. Chiaramente tutte le R presenti nella tabella di un router indicheranno al più i routers connessi direttamente ad esso, come mostrato nell'esempio in figura, che presenta quattro reti e tre routers (Q, R, S): Nella tabella che segue è riportata la tabella di routing di R:Fine della parte 5