7. Il protocollo IP
Transcript
7. Il protocollo IP
7. Il protocollo IP 7.1. Introduzione IP è il protocollo che è responsabile della interconnessione di sottoreti che costituisce l'internet È un protocollo di consegna di messaggi senza connessione (connectionless) 7.2. Una rete virtuale Nel capitolo 3 abbiamo studiato questo aspetto. L'utente non si deve preoccupare delle tecniche necessarie per realizzare l'interconnessione di due qualunque macchine nel mondo Ora ci occuperemo proprio di come si realizza questa astrazione di rete virtuale 7.3. Architettura e filosofia di internet APPLICATION SERVICES RELIABLE TRANSPORT SERVICE CONNECTIONLESS PACKET DELIVERY SERVICE Figura 7-1 Internet è organizzata su tre livelli di servizio, che qui sono mostrati Ognuno di questi livelli di servizio è realizzato mediante opportuni protocolli perché sono servizi distribuiti Pagina 7.1 7.4. In concetto di consegna inaffidabile Il software di internet è progettato attorno a questi tre livelli di servizio. Il suo successo dipende in gran parte dal fatto che questa architettura è sorprendentemente robusta ed adattabile E la cosa che più sorprende il profano è che il livello di base della gerarchia è volutamente inaffidabile! 7.5. Un sistema di consegna privo di connessione (connectionless) Il servizio fondamentale (IP) è un sistema di consegna • di pacchetti • senza necessità di creare una connessione fra mittente e destinatario • best-effort, cioè fa quello che può al meglio, sfruttando al meglio le risorse disponibili • inaffidabile, perché non è in grado di garantire una data qualità di servizio Connectionless: ogni pacchetto viaggia sulla rete "per conto suo", seguendo la strada migliore/possibile in quel momento: le risorse sono sfruttate al meglio e non sono "prenotate" per una connessione Inaffidabile: come conseguenza dell'uso ottimale delle risorse, i pacchetti possono essere persi, essere duplicati, ritardati, consegnati in ordine diverso da quello della spedizione Pagina 7.2 Importante: i pacchetti non sono persi perché i mezzi di comunicazione sono fallaci (anzi, sono in genere molto robusti), né perché IP li butta via a capriccio. Vengono persi (buttati) quando non si hanno risorse locali per gestirli (per es. mancano buffer!) 7.6. Scopo dell'internet protocol Realizzare il servizio di consegna di pacchetti connectionless, best-effort, inaffidabile: Internet Protocol (IP) 1. Definire il formato della unità di base di trasferimento dell'informazione 2. Realizzare la funzione di routing (instradamento) che interconnette le varie sottoreti 3. Definire un insieme di regole di protocollo che incorporano la nozione di consegna connectionless best-effort, inaffidabile: 3.1. come processare i pacchetti 3.2. come e quando generare messaggi di errore 3.3. sotto quali condizioni è ammissibile scartare pacchetti Ora parliamo del formato dei pacchetti Pagina 7.3 7.7. I datagram internet L'unità di trasferimento di dati si chiama internet datagram, IP datagram oppure semplicemente datagram Si chiamano datagram per sottolineare che non fanno parte di una connessione. Hanno struttura simile a quella dei mezzi fisici DATAGRAM HEADER DATAGRAM DATA AREA Figura 7-2 Il formato della DATA AREA non è fissato da IP, ma dai protocolli di livello superiore 7.7.1. Formato del datagram 0 4 8 16 19 24 31 VERS HLEN SERVICE TYPE TOTAL LENGTH IDENTIFICATION FLAGS FRAGMENT OFFSET TIME TO LIVE PROTOCOL HEADER CHECKSUM SOURCE IP ADDRESS DESTINATION IP ADDRESS IP OPTIONS (IF ANY) PADDING DATA .... Il formato non è dettato da considerazioni hardware, neanche da vincoli di allineamento Tutti campi di lunghezza fissa tranne IP OPTIONS, che se presente appunto termina con un campo di padding per allinearsi al confine di 32bit. Se nn ci sono opzioni l'header è lungo 5 parole VERS: numero di versione del protocollo usata HLEN: lunghezza dell'header (notare) in parole di 32 bit TOTAL LENGTH: lunghezza di tutto il pacchetto in ottetti, incluso header → 64KB lunghezza massima! Pagina 7.4 7.7.2. Service type 0 1 2 PRECEDENCE 3 4 5 D T R 6 7 UNUSED PRECEDENCE: è un campo ignorato dalla maggior parte delle implementazioni, anche se permette di definire la qualità del servizio (QoS) che il mittente richiede dalla rete: priorità nel trattamento del pacchetto. È amministrato e quindi non libero D, T, R: completano la definizione di QoS: D=richiesto basso ritardo; T=richiesto alto throughput (a scapito del ritardo); R=alta affidabilità. Sono un suggerimento per il routing, ma non vengono quasi mai osservati 7.7.3. Incapsulamento del datagram Occorre comprendere la relazione che esiste fra datagram e frame fisici Dato che i datagram non devono essere trattati dall'hardware dei mezzi di comunicazione, possono avere la lunghezza che il progettista decide. Ci sono solo 16bit per la lunghezza Per ragioni di efficienza sarebbe meglio che un datagram viaggiasse in un solo frame fisico (non spezzato in due): incapsulamento DATAGRAM HEADER FRAME HEADER DATAGRAM DATA AREA FRAME DATA AREA Figura 7-5 Pagina 7.5 7.7.4. Dimensione del datagram, network MTU e frammentazione Sfortunatamente, ogni mezzo fisico ha una massima dimensione del frame, scelta in base a considerazione di efficienza e costo dell'hardware Es.: ethernet 1500B, proNET-10 2044, X.25 128B, ...Questa è la maximum transfer unit = MTU Allora quale dimensione scegliere per spedire un datagram? Scegliere la più piccola non è conveniente, e per di più non è nota a chi spedisce, e cambia a seconda della strada seguita dal datagram! È quindi compito di IP scegliere una dimensione per il datagram che sia conveniente per la sottorete di partenza, e poi se IP deve far passare un datagram in una sottorete la cui MTU è inferiore a quella del datagram provvederà a spezzarlo in frammenti. Il processo è chiamato frammentazione Si noti subito che all'arrivo a destinazione IP dovrà provvedere a riassemblare i frammenti in un unico datagram, perché gli utenti di IP non devono preoccuparsi di questa frammentazione introdotta da IP Host B Host A Net1 Net3 MTU=1500 MTU=1500 G1 Net2 MTU=620 G1 Pagina 7.6 La frammentazione avviene, quando avviene, in un qualche router fra la rete origine e quella destinazione. La dimensione è quella massima permessa, con il vincolo che la lunghezza sia multipla di otto ottetti (vedremo poi perché) Ciascuno dei frammenti ha la stessa forma del datagram originale! DATAGRAM HEADER data1 600 ottetti data2 600 ottetti data3 200 ottetti FRAGMENT 1 HEADER data1 600 ottetti FRAMMENTO 1 (offset 0) FRAGMENT 2 HEADER data2 600 ottetti FRAMMENTO 2 (offset 600) FRAGMENT 3 HEADER data3 200 ottetti FRAMMENTO 3 (offset 1200) Figura 7-7: Gli header dei frammenti 1 e 2 hanno il bit MoreFragments settato per indicare che un frammento "segue"; l'offset indicato nel campo dell'header è quello indicato diviso per 8 Ognuno ha il suo header quasi uguale a quello originale: • il valore del campo FRAGMENT OFFSET indica la posizione del frammento nel datagramma originale: se diverso da zero è un frammento • il terzo bit settato dei FLAGS indica se segue un altro frammento • il campo TOTAL LENGTH indica la lunghezza del frammento Pagina 7.7 7.7.5. Riassemblaggio dei frammenti I frammenti viaggiano separati fino a destinazione e qui vengono riassemblati. Svantaggi: • frammenti piccoli viaggiano in sottoreti con MTU grande • se un frammenti viene perso, il riassemblaggio non può essere fatto e quelli arrivati hanno viaggiato invano Vantaggio: l'operazione di riassemblaggio viene fatta una volta sola anche se avvengono numerose frammentazioni lungo la strada Il riassemblaggio è basato su un reassembly timer, che il ricevente fa partire quando riceve il primo frammento. Se scade, viene buttato tutto quanto ricevuto 7.7.6. Controllo della frammentazione I campi interessati sono IDENTIFICATION, FLAGS, e FRAGMENT OFFSET. • IDENTIFICATION = intero unico non ripetibile che identifica il datagramma • FRAGMENT OFFSET = misurato in unità di otto ottetti (per risparmiare spazio nell'header). Identifica la posizione del frammento nel datagramma originale (notare che frammentazioni in cascata continuano a indicare l'offset rispetto al datagramma originale). Solo il primo frammento ha 0 • FLAGS = primo bit è riservato (deve essere 0); il secondo se settato vieta di eseguire frammentazione (se necessaria allora il pacchetto viene scartato con un messaggio di errore al mittente); il terzo indica se seguono ancora frammenti. Notare che è necessario perché la lunghezza del datagramma originale non è nota al ricevitore Pagina 7.8 7.7.7. Time to live (TTL) Il campo TIME TO LIVE specifica il tempo in secondi che il datagramma può restare nella rete. Chi tratta il pacchetto deve decrementare il TTL del tempo usato per trattarlo (notare, anche il tempo in coda di spedizione!): quando il TTL non è più positivo il pacchetto deve essere scartato (con messaggio di errore al mittente) Ogni router deve decrementare almeno di uno il TTL, e poi dovrebbe aggiungere il tempo di attesa in coda La cosa essenziale è che venga sempre decrementato, per evitare che instradamenti sbagliati tengano un pacchetto per sempre nella rete 7.7.8. Altri campi dell'header PROTOCOL = analogo al type field dell'ethernet: vi possono essere più protocolli utenti di IP, e in questo modo l'IP ricevente sa a chi passare i dati ricevuti (ogni protocollo utente formatta i dati a modo suo!) HEADER CHECKSUM = controlla l'integrità dell'header = somma in complemento a 1 delle parole di 16bit che costituiscono l'header (in network byte order!) e infine il complemento a 1 del risultato. Nel fare la somma il campo HEADER CHECKSUM viene assunto avere valore 0 in spedizione (alla ricezione si somma e si deve ottenere 0!) NOTARE: si controlla solo l'header, i dati non vengono controllati → ogni protocollo di livello superiore scegli la propria funzione di controllo, e non vengono fatti tre controlli (solo due perché anche la sottorete fisica controlla i suoi dati e quindi anche l'header di IP) SOURCE IP ADDRESS e SOURCE IP ADDRESS sono ovvii Pagina 7.9 IP OPTIONS (vedi sotto) è l'unico a lunghezza variabile; il campo PADDING viene aggiunto se necessario ad allinearsi a 32bit 7.8. Internet datagram options Non è necessario; principalmente per testing e debugging Alcune opzioni di un solo ottetto option code, altre del codice più altro; si susseguono una all'altra; se non terminano con la fine dell'header (quindi c'è padding), c'è una opzione di "fine opzioni" Option code ha la seguente struttura 0 1 2 COPY OPTION CLASS 3 4 5 6 7 OPTION NUMBER COPY indica ai router se l'opzione deve essere copiata in tutti i frammenti oppure solo nel primo Option Class 0 1 2 3 Meaning datagram or network control reserved for future use debugging and measurement reserved for future use Pagina 7.10 Option Option Class Number Length Descrizione 0 0 Fine opzioni 0 1 No operation. Per allineamento 0 2 11 Restrizioni di sicurezza (militare) 0 3 var Loose source routing 0 7 var Record route 0 8 4 Stream identifier (obsoleto) 0 9 var Strict source routing 2 4 var Internet timestamp Quelle interessanti sono la Record Route e timestamp, e la Source Routing 7.8.1. Record route option La registrazione dell'instradamento seguito dai router e la registrazione dei timestamp permettono di controllare come funziona l'internet Con record route il mittente inizializza una lista vuota di IP address dei router attraverso cui il pacchetto passa. Ogni router deve aggiungere il proprio IP address alla lista: 0 8 CODE (7) 16 24 31 LENGTH POINTER FIRST IP ADDRESS SECOND IP ADDRESS ... LENGTH è la lunghezza totale (in ottetti) dell'opzione, partendo dal CODE; POINTER permette di inserire il proprio IP address senza scandire la lista. NOTARE: lo spazio per la lista è allocato alla partenza! La destinazione deve essere d'accordo a trattare le route tracciate! Pagina 7.11 7.8.2. Source route option Serve per forzare i router a seguire un particolare instradamento deciso alla partenza, invece che quello che deciderebbero loro La forma STRICT contiene esattamente la route, senza salti intermedi. Errore se un router non è direttamente connesso a quello indicato come successivo nella route La forma LOOSE invece permette di inserire router intermedi fra quelli indicati nella route Il formato dell'opzione è lo stesso, ma POINTER indica il punto nella route a cui si è arrivati 7.8.3. Timestamp Viene allocato spazio per la registrazione di IP address e i corrispondenti valori dell'orologio quando il pacchetto è stato trattato da quel router 7.9. Conclusioni A questo punto abbiamo visto due delle cose fondamentali che un servizio di comunicazione di livello rete deve fornire: 1. un indirizzamento uniforme e globale 2. una funzione consegna di pacchetti che includa frammentazione e riassemblaggio de pacchetti per rendersi indipendenti dalle caratteristiche fisiche delle sottoreti attraversate Pagina 7.12