Sei sulla pagina 1di 77

Vincenzo Ciaglia

Networking@LowLevel
Teoria dei protocolli

Quest'opera è distribuita sotto licenza:

Attribuzione - Non Commerciale - Condividi allo stesso modo 2.0 Italia


Maggiori informazioni: http://creativecommons.org/licenses/by-nc-sa/2.0/it/
Informazioni sull'autore

Vincenzo Ciaglia, studente di Informatica presso l'Università degli Studi di Salerno, si occupa di
sicurezza informatica, networking e sistemi aperti da molti anni. Ha collaborato con molte riviste
del settore, nazionali e internazionali e attualmente è il Project Leader e Mantainer di Linux
Netwosix, una distribuzione creata per le macchine server e gli specialisti di rete. Si occupa, inoltre,
di programmazione in C e Perl, sistemi operativi e sistemi distribuiti. Esperto di GNU/Linux a tutto
campo, ne segue gli sviluppi da molti anni con entusiasmo e passione cercando sempre di dare il
proprio contributo all'intera comunità Open Source.
Sommario

CAPITOLO 1
Introduzione
1.1 Argomenti trattati

NETWORKING
CAPITOLO 2 – Internet, la regina delle reti
2.1Arpanet e la storia di Internet
2.1.1. Reti a commutazione di pacchetto e di circuito
2.2 NSFNET
2.3 Tipi di rete
2.3.1. Topologia a bus
2.3.2. Topologia ad anello
2.3.3. Topologia a stella
2.3.4. Topologia gerarchica o ad albero
2.3.5. Topologia a maglia
2.4 Il modello OSI (Open System Interconnect)
2.5 Request For Comments (RFC)
2.5.1. Come ottenere le RFCs
2.6 Gli usi di Internet
2.7 Il futuro di Internet: Internet2

CAPITOLO 3 – Nei meandri del TCP/IP


3.1 Introduzione
3.1.1. Comparazione tra TCP/IP e ISO/OSI
3.2 Lo stack del TCP/IP
3.3 L'header del TCP
3.4 User Datagram Protocol (UDP)
3.5 Numeri di porta TCP e UDP
3.6 Gli indirizzi IP e le loro classi
3.6.1. Indirizzi IP speciali
3.7 Three-way handshake
3.7.1. Chiusura di una connessione
3.8 File Transfer Protocol (FTP)
3.8.1. Operazioni FTP
3.9 Domain Name System (DNS)
3.9.1. Processo di risoluzione di un dominio
3.9.2. I formati dei messaggi DNS
3.10 Internet Protocol (IP)
3.11 Internet Control Message Protocol (ICMP)
3.12 Address Resolution Protocol (ARP)
3.13 Internet Relay Chat Protocol (IRC)
3.14 Sviluppi futuri: IP Version 6 (IPV6)
3.14.1. Ipv6 Addressing

CAPITOLO 4 – Protocolli di routing


4.1 Introduzione
4.2 Autonomous Systems
4.3Algoritmi di routing
4.4 Exterior Gateway Protocol (EGP)
4.5 Border Gateway Protocol (BGP)
4.6 Routing Information Protocol (RIP) version 1
4.6.1. Routing Information Protocol (RIP) version 2
4.6.2. Open Shortest Path First (OSPF)
1
Introduzione

Lo scopo principale di questo vulume è quello di diffondere la cultura del networking a basso livello
e fornire una valida alternativa alla consultazione delle RFC ufficiali dei principali protocolli di rete.
Il volume non vorrà riproporre materiale a voi, probabilmente, già noto ma il suo intento principale
è quello di trattare con cura, e a basso livello, tutti i principali protocolli di comunicazione usati da
un computer descrivendone le loro caratteristiche principali e i fini pratici. Il libro analizzerà a
fondo il TCP/IP e la sua suite di protocolli che tutti insieme permettono lo scambio di informazioni
attraverso quella che è diventata la più importante tra le reti : Internet.

1.1 Argomenti trattati


Il libro è impostato in 4 capitoli. Il primo capito è prettamente di introduzione mentre dal capitolo 2
sino alla fine viene trattato l'argomento Networking. Si comincia con la storia di Internet e gli
sviluppi iniziali di quella che è diventata la rete più grande e famosa del mondo, dai primi sviluppi e
il modello a strati OSI al TCP/IP. Si prosegue col capitolo 3. Viene trattata, nei minimi particolari,
l'intera suite dei protocolli di comunicazione del TCP/IP: File Transfer Procol, Domain Name
Service, Internet Control Message Protocol, Internet Group Message Protocol senza tralasciare il
futuro dell' Internet Protocol: Ipv6. Nel capitolo seguente, il numero 4, vengono affrontati i
protocolli di routing, molto importanti e certe volte sottovalutati. Sono alla base del perfetto
funzionamento della nostra rete e analizzeremo, anche questi, nei minimi particolari.

Contatti
Hai commenti da fare al libro o vuoi che vengano aggiunte delle modifiche? Puoi scrivermi al mio
indirizzo email e sarò ben felice di scambiare delle chiacchiere con te:
vincenzo.ciaglia@gmail.com

3
2
Internet, la regina delle reti

Arpanet e la storia di Internet


Per capire qualcosa in più sulle origini di Internet bisogna tornare indietro ai tempi della prima
esplorazione spaziale operata dai russi nel 1957. E' la data del lancio in orbita dello Sputnik. Ancora
una volta gli eterni rivali Russia e America si trovavano a sfidarsi sul piano delle nuove scoperte,
siano esse spaziali o scientifiche. Questa volta l'America è stata a guardare. Si è trovata totalmente
impreparata a fronteggiare sul piano “spaziale” il nemico e non potette rispondere alla disfatta sino
alla creazione della NASA, la ben nota agenzia spaziale americana. Si decise allora di creare una
agenzia di ricerca avanzata che avrebbe avuto il compito di sviluppare e applicarsi su nuove
frontiere, creare qualcosa di mai pensato ed evitare , insomma, di trovarsi ancora una volta sorpresi
alle scoperte dei nemici. E' così che nacque la “Advanced Research Projects Agency” o più
comunemente conosciuta come ARPA. Vennero reclutati scienziati da molte università americane e
non. Si creò una equipe strepitosa di matematici, fisici e ingegneri. Da lì in avanti l'America è
cresciuta moltissimo sul piano delle scoperte e ha conosciuti i momenti più felici , sul piano della
ricerca e dell'innovazione, della sua storia. Tutto cominciò nel 1962 quando l' ARPA decise di aprire
un programma di ricerca sulle tecnologie informatiche. J.C.R. Licklider, scienziato proveniente dai
ben noti laboratori del MIT, pubblicò la sua prima ricerca su una ipotetica “Galactic Network” dal
titolo “On-Line Man Computer Communication”. Proprio quest'ultimo è considerato il vero e
proprio padre di internet in quanto nel suo “tipo di rete” si riscontrano tantissime similitudini con
quella che è oggi Internet. Leonard Kleinrock , invece, con la sua pubblicazione “Information Flow
in Large Communication Nets” , risalente al 1961, fu il primo a ipotizzare un modello di
comunicazione basato sulla trasmissione a commutazione di pacchetto. Dopo la pubblicazione di
Kleinrock c'era bisogno di dimostrare che effettivamente quel modello potesse funzionare. Per
questo motivo nel 1965 Kleinrock insieme a Thomas Merrill riuscì a collegare due computer tramite
una connessione dial-up, un computer TX-2 localizzato nel Massachusetts con uno Q-32 in
California. I risultati diedero ragione alla teoria di Kleinrock e la trasmissione a commutazione di
pacchetto divenne l'unica ragionevole soluzione a una futura comunicazione telematica. Pian piano
si crearono i primi “nodi” e i primi “client” della grande rete Internet cominciarono a scambiarsi
dati. Ricordiamo il primo nodo Network Measurement Center all'Università della California e il
successivo "Augmentation of Human Intellect" allo Stanford Research Institute (SRI). Con il
passare degli anni si unirono altri nodi, processo che continua ancora oggi. Dopo aver sperimentato

4
Capitolo 2

abbastanza questo innovativo sistema di comunicazione era arrivato il momento di cominciare a


sviluppare delle applicazioni che potessero sfruttarlo al meglio e così nell' Ottobre del 1972 Robert
E. Kahn organizzò una dimostrazione dell'Arpanet all' International Computer Communication
Conference (ICCC). Questo fu il primo evento pubblico in cui vennero esposte le potenzialità di
Arpanet e di alcune sue nuove applicazioni come ad esempio le e-mail. Da qui ebbe inizio la storia
di Internet.

2.1.1 Reti a commutazione di pacchetto e di circuito


Prima di andare avanti è necessario fare una chiara distinzione tra reti a commutazione di pacchetto
e reti a commutazione di circuito. In una rete a commutazione di pacchetto l'informazione viene
trasmessa sotto forma di pacchetti di dati (questo procedimento prende il nome di assemblaggio),
ognuno con una sua intestazione e con una dimensione minima. All'interno di ogni pacchetto vi
sono le informazioni necessarie affinché il pacchetto giunga correttamente a destinazione. Una volta
arrivati a destinazione i pacchetti vengono riassemblati in unico flusso di dati, in pratica così come
erano partiti dalla sorgente. Durante il loro percorso, i pacchetti, possono anche cambiare direzione.
Questo viene deciso da ogni nodo che è in grado di smistare un pacchetto o un intero flusso di
informazioni su un percorso del tutto diverso da quello deciso al momento dell'assemblaggio.
Questo si verifica per migliorare il servizio e aumentarne l'affidabilità. Nelle reti a commutazione di
circuito, invece, il flusso di informazioni passa su un unico canale a differenza delle reti a
commutazione di circuito. A voi le necessarie conclusioni sulle migliorie apportate dalla
commutazione di pacchetto (packet switching) ai moderni mezzi di comunicazione.

2.2 NSFNET
Nata nel 1979, la National Science foundation (NSF) aveva come obiettivo collegare tutte le sedi
universitarie americane in un'unica grande rete. Era necessario allargare il concetto di ARPANET e
cercare di coinvolgere quante più reti possibili. Visto che in quel periodo quel che oggi è divenuta
Internet veniva usata solo per scopi di ricerca, non si pensava minimamente di coinvolgere tutti i
computer del mondo ma soltanto i centri di ricerca e universitari americani. Nacque cosi la National
Science foundation Network, più conosciuta come NSFNET. E' stata la prima grande antenata di
Internet e con le sue tre iniziali backbone collegava quasi tutti i campus universitari americani.
Sfruttava gli stessi principi che avevano reso celebre ARPANET incluso l'uso del TCP/IP come
protocollo di comunicazione, che analizzeremo nel prossimo capitolo. Ha giocato sicuramente un
ruolo chiave nello sviluppo di Internet.

2.3 Tipi di rete


Non potevamo andare avanti senza aver parlato dei vari tipi di rete oggi esistenti. Ne esistono
svariati e in particolare possiamo definirli come topologia a bus, anello, stella, gerarchiche o ad
albero, maglia e a stella estese. Capiremo meglio questi concetti soffermandoci su ognuna delle
topologia aiutandoci anche con delle figure.

5
Internet, la regina delle reti

2.3.1 Topologia a bus


In questa topologia , la più semplice da realizzare, i dati passano su un unico segmento
di rete. Se il computer A manda un pacchetto al computer B, posto alla fine del segmento di rete, gli
altri computer dovranno aspettare la fine dell'operazione per poter comunicare o per mandare un
altro pacchetto sul segmento di rete. E' forse la topologia più usata dagli utenti domestici ma è
sicuramente la più lenta e carente di prestazioni.

Figura 1 : Classico esempio di topologia a bus

2.3.2 Topologia ad anello


La topologia ad anello è caratterizzata da un insieme di client posti su un segmento ad “anello” ,
appunto, su cui i pacchetti di informazioni viaggiano in senso orario. Poniamo il caso che il
computer A voglia mandare un pacchetto al computer B. Il computer A spedisce il pacchetto sul
segmento di rete e prima di arrivare al computer B, posto dall'altra estremità dell'anello, il pacchetto
passerà attraverso tutti i computer situati al centro dei due. I computer che non avevano richiesto il
pacchetto lo scarteranno , fino a quando non arriverà a destinazione al computer B il quale
riconoscerà il pacchetto e lo accetterà. Si conclude così la comunicazione tra i due client e si può
cominciare un'altra trasmissione. Questo topologia prende il nome anche di “Token Ring”,
passaggio del testimone.

Figura 2: Topologia “token ring” o ad anello

2.3.3 Topologia a stella


E' sicuramente una delle più usate. In questa topologia i client sono collegati tutti a un unico perno
centrale , detto “hub”, che smista i pacchetti a seconda della loro destinazione. In questo caso si
evitano collassi della rete e sovraccarichi in quanto i client che non avevano fatto esplicitamente
richiesta del pacchetto non lo riceveranno, così come succedeva con le precedenti topologie. L'hub
può essere considerato un utile

6
Capitolo 2

strumento di diagnostica della rete in quanto possiamo riferirci ai led luminosi di quest'ultimo per
capire se ci sono eventuali guasti o malfunzionamenti alla rete.

Figura 3: Topologia a stella

2.3.4 Topologia gerarchica o ad albero


La topologia gerarchica o ad albero è caratterizzata dalla compartecipazione di due o più reti a bus,
come mostrato nella figura 4.

Figura 4: Topologia ad albero

2.3.5 Topologia a maglia


La topologia a maglia viene usata quando all'interno della rete non ci devono essere interruzioni tra
due o più client durante uno scambio di pacchetti di informazione. Per evitare ciò ognuno di essi ha
la sua propria connessione a tutti gli altri della rete.

Figura 5: Topologia a maglia

7
Internet, la regina delle reti

2.4 Il modello OSI (Open System Interconnect)

Figura 1: Il modello a strati OSI

Creata la rete nacque il bisogno di creare un unico standard di comunicazione, un protocollo che
potesse accomunare le caratteristiche hardware e software di tutti i client connessi a essa. E' così che
si ebbero alcune proposte come ad esempio quella avanzata dal CCITT (Comité Consultatif
International Téléphonique et Télégraphique) una organizzazione che oggi si occupa di definire gli
standard delle comunicazioni e della ISO (International Organization for Standardization) che
elaborò un modello multi strato. Esso prese il nome di OSI (Open System Interconnect). Come è
mostrato in figura 1, lo standard OSI è caratterizzato da sette livelli diversi. Esso, a differenza degli
altri proposti, mostrava ampiamente e in modo soddisfacente come le comunicazioni tra due client
potessero avvenire a livello di stack di rete. Bisogna capire anche il perchè e i vantaggi dei sette
livelli. Proviamo ad elencarli:
• Ogni livello svolge una funzione ben definita
• Divide le comunicazioni di rete in piccole parti in modo da evitare e prevenire eventuali errori
• Aiuta maggiormente l'apprendimento e l'insegnamento al funzionamento dello standard
• Permette la comunicazione tra computer che non hanno la stessa configurazione hardware e
software
• Facilita i programmatori nello sviluppo di driver per le interfacce hardware

Detto questo passiamo ad analizzare ogni livello del modello ISO/OSI:

1. FISICO: usato per la trasmissione di sequenza di bit. E' il livello che opera a livello fisico tra
due o più computer e ne permette, garantisce la comunicazione. Stiamo parlando dei cavi di rete,
dispositivi hardware, connettori. E' inoltre garante del corretto voltaggio, quindi dei flussi di
corrente e il data rates tra cavi di rete.
2. DATA LINK: in questo livello abbiamo il controllo degli errori dei dati trasmessi attraverso il
dispositivo fisico e della sua corretta provenienza. E' questo livello che si

8
Capitolo 2

occupa di far ritrasmettere un pacchetto nel caso si verifichino delle anomalia di


trasmissione.
3. NETWORK: si occupa dell'indirizzamento, del routing e dell'assemblaggio dei pacchetti sulla
rete. E' addetto al controllo delle congestioni di rete smistando il traffico su strade secondarie
quando è necessario.
4. TRASPORTO: fornisce un affidabile e sicuro trasporto dei pacchetti “end-to-end” sul
segmento di rete. Il trasferimento dei pacchetti avviene tramite porte logiche sfruttando i
protocolli TCP (Transmission Control Protocol) e UDP (Universal Datagram Protocol) che
analizzeremo nel prossimo capitolo. La sua funzione principale è quella di accettare dati dal
livello “sessione”, dividerli in piccoli pacchetti se necessario, trasferirli al livello “network” e
assicurarsi che arrivano dall'altro lato della comunicazione, cioè all'utente finale.
5. SESSIONE: qui vengono instaurate, gestite e terminate le sessioni di comunicazione tra due
client della rete.
6. PRESENTAZIONE: riassembla e decodifica tutti i pacchetti e li trasforma in informazioni per
il livello applicazione.
7. APPLICAZIONE: forse è quello che conosciamo maggiormente. In questo livello, infatti,
fanno parte tutte le applicazioni che ci permettono di leggere i dati comunicati in chiaro.
Parliamo dunque di browser, client mail, file transfer e sessioni. Il livello applicazione permette
ai programmi di accedere ai servizi di rete.

2.5 Request for comment (RFC)


I protocolli Internet sono sempre in continuo sviluppo. Non bisogna pensare , infatti, che una volta
creato un protocollo funzionante in cui non si riscontrano particolari problemi esso non debba per
forza essere rivisto o riprogettato. Centinaia di sviluppatori di tutto il mondo ogni giorno si
impegnano per migliorare l'affidabilità degli Internet Protocol, a volte creandone dei nuovi o
basando il loro lavoro sul miglioramento di quelli già esistenti. Quando un ricercatore vuole
proporre il suo application protocol o il suo nuovo protocollo all'intera comunità di internet lo
rilascia sotto forma di Internet Draft (ID). Tutti loro sono raggruppati sotto forma di RFC (Request
For Comment). Possiamo definire le RFCs come dei documenti informativi sui nuovi protocolli e
application protocols. L'Internet Architecture Board (IAB) è l'organizzazione che mantiene tutte le
RFCs relative agli Internet Protocol. Ogni protocollo può avere uno dei seguenti stati, definiti dalla
IAB:

• Standard
Protocollo ufficiale per Internet. Esso si può dividere in due gruppi:
- IP Protocol che può essere applicato all'intera Internet;
- Network Specific Protocol che generalmente utilizza il protocollo solo in particolari tipi di rete

• Draft Standard
Protocollo che è candidato ad essere usato come protocollo ufficiale per Internet. Tutte i commenti
al protocollo possono essere fatti direttamente alla IAB. Tutti i miglioramenti potranno essere
apportati prima che il protocollo diventi Standard.
• Proposed Standard
Questa categoria comprende tutte le proposte di protocolli che possono essere

9
Internet, la regina delle reti

considerati dalla IAB per futuri protocolli standard.

• Experimental
Un sistema non utilizzerà un protocollo sperimentale fino a quando non si saranno
decisi i suoi principali usi con il suo sviluppatore.
• Informational
Ne fanno parte i protocolli sviluppati da altre organizzazioni per gli standard, o da altri produttori o
che per convenienza della comunità di Internet fanno parte delle RFCs come protocolli informativi.
• Historic
Tutti i protocolli troppo obsoleti od ormai sorpassati fanno parte di questa categoria.

Seguono le definizioni che vengono date agli stati dei protocolli:

Required
Il protocollo è necessario per qualsiasi sistema.
Recommended
Il protocollo è raccomandato per qualsiasi sistema.
Elective
Il protocollo può essere o non essere implementato nel sistema. Tutto ciò dipende dalla nostra
scelta.
Limited use
Il protocollo può essere necessario in situazioni particolari : protocollo obsoleto, protocollo
sperimentale o dalle funzionalità limitate.
Not recommended
Il protocollo non è raccomandato. Questo può essere dovuto al fatto che il protocollo è obsoleto,
sperimentale o dalle funzionalità limitate.

2.5.1 Come ottenere le RFCs


E' possibile ottenere tutte le RFCs pubblicate e discusse dal 1969 ad oggi al seguente indirizzo:
http://www.rfc-editor.org/ o sul sito della IETF http://www.ietf.org/ , dove oltre alla consultazione
delle RFCs è possibile iscriversi alla mailing list, e quindi entrare a far parte, dei gruppi di ricerca
che stanno lavorando su nuovi e vecchi protocolli.

2.6 Gli usi di Internet


Scagli la prima pietra se qualcuno , persone la cui età varia dagli otto ai settanta anni , non ha mai
sentito parlare di Internet. Ormai non vogliamo ammetterlo ma è sicuramente cosa certa che non
possiamo più farne a meno. La grandissima comodità della rete, vedi il commercio elettronico e la
possibilità di ricevere un oggetto , magari disponibile solo dall'altra parte del mondo, in pochi
giorni, scaricare musica, chiacchierare con gli amici da qualsiasi parte del mondo standosene
tranquillamente dietro la propria scrivania, parlare in video conferenza con un parente lontano e
moltissimo altro ancora, ha fatto si che Internet diventasse un mezzo di comunicazione vitale per
ogni famiglia. Basti pensare che al momento dell'acquisto di un computer la prima cosa che salta in
mente è sicuramente Internet. Subito dopo l'acquisto , infatti,

10
Capitolo 2

non si pensa minimamente di testare le prestazioni della nuova macchina o giocare con un
videogame che richieda una grande capacità in termini di memoria video. L'unica cosa che l'utente
prova è Internet. Non si sa perché ma ha un certo fascino, sarà forse dovuto al fatto che accedere a
delle informazioni poste a migliaia di chilometri di distanza è un ebbrezza tale che è degna di essere
provata prima di qualsiasi altra cosa. Internet è lavoro, cultura, opportunità e voglia di crescere.
Sembra proprio che dall'anno 2000 in poi si sia verificata una rivoluzione incredibile. Prima di
quella data nessuna azienda di qualsiasi calibro avrebbe investito un solo euro per la propria
crescita aziendale su Internet. Fortunatamente questa cognizione è cambiata. Oggi esistono migliaia
di aziende online che investono quasi tutte le loro forze sulla grande rete, si pensi al fatto che oggi,
anno 2004, tutte le aziende piccole, medie, grandi o addirittura singoli negozi e soprattutto
multinazionali hanno il proprio sito web. Internet è lavoro. La figura professionale del webmaster o
del webdesigner, tanto per fare un esempio, è nata solo grazie a Internet, senza tralasciare gli esperti
di sicurezza informatica che senza la rete ora non avrebbero potuto guadagnarsi da vivere. Internet è
cultura. E' una banca dati enorme. Su Internet si trova di tutto, da come si cucina un piatto tipico
giapponese sino ai documenti riguardanti le ultime ricerche scientifiche. Internet è il nostro futuro,
impariamo a usarlo al meglio!

2.7 Il futuro di Internet: Internet2


A pensare che si sta già pensando di creare qualcosa di meglio. Internet2, infatti, è un consorzio
formato da 206 università americane , moltissime società e dal supporto delle agenzie del governo
americano per assicurare un futuro migliore ad Internet e migliorarlo. Tra gli obiettivi principali ci
sono quelli elencati di seguito:

– creare una rete dalle elevate capacità di trasmissione per le società di ricerca e le università;
– creare nuove applicazioni rivoluzionarie per l'intera Internet;
– assicurare una elevatissima forma di trasmissione tra questa nuova innovativa rete ed Internet.

Tutte le reti di Internet2 sono collegate tramite Abilene, una backbone ad alta velocità che assicura
prestazioni super al futuro di Internet. Sono già stati riscontrati grandissimi record di velocità, basti
pensare solo che Abilene assicura una trasmissione di circa 10 gigabits per secondo a tutta la rete.
Non possiamo, dunque, che augurarci il meglio per Internet. Maggiori informazioni su
http://www.internet2.edu/ .

Figura 2: La mappa dei collegamenti di rete di Abilene

11
3
Nei meandri del TCP/IP

3.1 Introduzione
Sviluppato dalla Defense Advanced Research Projects Agency (DARPA) ai fini di garantire un
unico modello di comunicazione tra due o più reti, la suite di protocolli TCP/IP è diventata oggi lo
standard più diffuso e usato da tutti i computer interconnessi ad Internet. Questo anche grazie al
fatto che è stato implementato nei sistemi operativi UNIX e di Berkley. Anche il TCP/IP è un
protocollo a livelli, così come abbiamo imparato dal modello ISO/OSI. Quest'ultimo però a
differenza del primo ha tre livelli in più ma la sua tecnologia viene interamente inglobata dai quattro
livelli del TCP/IP. All'interno della suite TCP/IP sono contenuti molti protocolli che permettono il
perfetto funzionamento dello scambio di dati tra due computer: icmp,arp,rarp,udp,igmp. Ma i
principali è più importanti rimangono il TCP e l' IP, da qui il nome TCP/IP. Nel prossimo paragrafo
analizzeremo le principali differenze e le eventuali similitudini tra i due modelli.

3.1.1 Comparazione tra TCP/IP e ISO/OSI


Come è possibile notare dalla figura 1 , il modello TCP/IP è molto più compatto rispetto
all'ISO/OSI.

Figura 1: Modelli a confronto: TCP/IP vs ISO/OSI

12
Capitolo 3

Il livello “Network Access” contiene tutte le periferiche hardware ed equivale ai livelli Data Link e
Fisico nel modello ISO/OSI, il livello “Internet” contiene i protocolli ARP,RARP,ICMP,IP ed
equivale al livello Network del modello ISO/OSI, il livello “Trasporto” contiene i protocolli TCP
(Trasmission Control Protocol) e UDP (User Datagram Protocol) ed è equivalente al livello
trasporto del modello ISO/OSI. L'ultimo livello, “Applicazione” , contiene i protocolli FTP,DNS,
SNMP e le applicazioni di remoto ed email e ingloba i livelli Applicazione, Presentazione e
Sessione del modello ISO/OSI. Analizzeremo nei minimi particolari i quattro layer del TCP/IP nel
prossimo paragrafo dove faremo inoltre conoscenza con lo stack e l'header di quest'ultimo.

3.2 Lo stack del TCP/IP


Per una maggiore comprensione degli argomenti trattati negli ultimi paragrafi ci occuperemo dello
stack del TCP/IP cercando di esporre i concetti fondamentali in modo chiaro e concreto.
Analizzeremo dunque ogni livello chiarendone le sue caratteristiche principali.

– Livello Applicazione
Ne fanno parte tutti i protocolli per la gestione degli indirizzamenti e della rete, senza tralasciare i
programmi dediti al file transfer, al remote loging e alle email.
Di seguito tutti i protocolli che ne fanno parte:

DNS (Domain Name System)


E' usato all'interno della rete per convertire i nomi di dominio in indirizzi numerici.

WINS (Windows Internet Naming Service)


E' un protocollo sviluppato da Microsoft ed associa le workstations NT con i nomi di dominio.

HOSTS
E' un file presente su ogni server creato dagli amministratori di sistema. Serve a mantenere traccia
delle macchine comprese nella rete e dei loro relativi nomi di dominio.

PoP3 (Post Office Protocol)


E' uno standard Internet usato per trattenere i messaggi che arrivano nella nostra casella email su un
mail server sino a quando non li scarichiamo sul nostro computer.

SMTP (Simple Mail Transport Protocol)


E' il responsabile delle trasmissioni delle nostre email verso altre reti di computers.

SNMP (Simple Network Management Protocol)

13
Nei meandri del TCP/IP

E' un protocollo che fornisce il supporto per il monitoraggio e la gestione dei nostri
devices di rete, della loro implementazione e del loro livello di sicurezza.

FTP (File Transfer Protocol)


E' un affidabile protocollo, connection-oriented, di trasferimento file che sfrutta il TCP per trasferire
files da un computer all'altro che supporto questo protocollo.

TFTP (Trivial File Transfer Protocol)


E' un protocollo connectionless e non molto affidabile che usa UDP come protocollo per il
trasferimento di files tra due computers. Puo' avere il vantaggio di essere usato nelle piccolo LANs
in quanto è più veloce nel traferimento rispetto ad FTP.

HTTP (Hypertext Transfer Protocol)


E' lo standard Internet usato per lo scambio di informazioni attraverso il World Wide Web.
Supporta molti scambi di informazioni: grafico, testuale e multimediale. Tramite questo protocollo
il nostro browser invia delle richieste di informazioni , ad esempio quando si apre il dominio
www.netwosix.org, al webserver dove è localizzato il dominio stesso che a sua volta le manda in
output sul nostro browser.

Protocolli di troubleshooting (protocolli di ricerca dei disturbi)

Telnet
E' un terminal emulation protocol usato dai clients di una rete per collegarsi ad una macchina
remota o non fisicamente accessibile. E' uno standard ancora molto usato per la gestione e la
configurazione di routers.

Ping (Packet INternet Groper)


E' puramente uno strumento di diagnostica usato dagli amministratori di sistema per capire lo stato
di attività di una macchina in rete.

Traceroute
E' un programma molto famoso, anch'esso di diagnostica, disponibile su quasi tutti i sistemi simile
al ping ma con molte più informazioni dettagliate. Traceroute è capace di tracciare il percorso di un
pacchetto sulla rete ed è molto usato per la diagnostica di problemi legati ai routers.

Altri protocolli che non sono molto usati su sistemi Linux ma che fanno parte di questo livello sono:
NBTSTAT, NETSTAT, ipconfig/winipcfg.

– Livello Trasporto
Fornisce uno scambio dati di tipo end-to-end. Può supportare più applicazioni contemporaneamente
ed è il principale responsabile dell'affidabilità dei servizi di trasmissione dati e quindi dei protocolli
che stanno al suo interno: UPD e TCP.

TCP (Trasmission Control Protocol)


E' un protocollo connection-orientedmolto affidabile. Ha un'ottima gestione degli errori

14
Capitolo 3

Gadi trasmissione in quanto se un pacchetto inviato da un client non arriva correttamente


all'altro client è in grado di rispedirlo sino a quando non avviene l'effettivo scambio dati. rantisce
dunque un'ottima e sicura consegna dei pacchetti. E' stato sviluppato, inoltre, per adattarsi al
funzionamento su protocolli con modello a livelli e ad applicazioni multi-network.

UPD (User Datagram Protocol)


E' un protocollo connectionless e non molto affidabile. Non ha un controllo degli errori e quindi non
ha una sicura ed affidabile gestione dei pacchetti in termini di scambio. Molti pacchetti UPD
possono non arrivare a destinazione senza che nessuno se ne accorga. Il vantaggio dell'UPD rispetto
al TCP è sicuramente la velocità. Visto che è un protocollo connectionless, non necessita di
acknowledgments e quindi più pacchetti possono essere spediti sul segmento di rete in maniera
meno sicura ma molto più veloce.

Tratteremo nei minimi particolari questi due protocolli nei paragrafi 3.3 e 3.4.

– Livello Internet
Il livello Internet, come abbiamo già potuto notare nei capitoli addietro corrisponde al livello
Network del modello ISO/OSI. In questo livello sono raggruppati tutti protocolli di indirizzamento
dei pacchetti che viaggiano su un segmento di rete. Ne fanno parte i protocolli : Arp, Rarp, Icmp, Ip.

IP (Internet Protocol)
E' un protocollo connectionless e si occupa soltanto di spedire i pacchetti sul segmento di rete nella
loro direzione seguendo i percorsi ottimali. Non ha un controllo degli errori e non effettua nessuna
verifica sui pacchetti.

ICMP (Internet Control Message Protocol)


Fornisce uno speciale meccanismo di controllo sugli errori e i messaggi inviati dal TCP/IP.

ARP (Address Resolution Protocol)


Addetto alla risoluzione hardware degli indirizzi di rete di tutti i client connessi ad essa.

RARP (Reverse Address Resolution Protocol)


Agisce facendo il procedimento inverso dell'ARP. Da un indirizzo di rete conosciuto, passa alla sua
risoluzione hardware.

Analizzeremo meglio tutti i suddetti protocolli nei paragrafi 3.11, 3.12,3.1, 3.14.

– Livello Network Access


Di questo livello fanno parte tutte le periferiche hardware che sfruttano i precedenti livelli del
modello TCP/IP.

15
Nei meandri del TCP/IP

3.3 L'header del TCP


Dopo aver analizzato lo stack del TCP/IP è quasi d'obbligo soffermarsi anche sull'header del TCP.
In questo paragrafo approfondiremo in maniera dettagliata questo protocollo e studieremo in quale
modo un pacchetto passa da un computer all'altro sfruttando le funzionalità di quest'ultimo. In figura
2 è mostrato il formato dell'header del TCP. I segmenti TCP viaggiano all'interno di un datagramma
internet. Abbiamo già parlato del TCP e delle sue principali caratteristiche nel paragrafo precedente
ma è sempre meglio rinfrescarsi le idee. Per questo motivo ripetiamo il concetto.

TCP (Trasmission Control Protocol)


E' un protocollo connection-oriented molto affidabile. Ha un'ottima gestione degli errori di
trasmissione in quanto se un pacchetto inviato da un client non arriva correttamente all'altro client è
in grado di rispedirlo sino a quando non avviene l'effettivo scambio dati. Garantisce dunque
un'ottima e sicura consegna dei pacchetti. E' stato sviluppato, inoltre, per adattarsi al funzionamento
su protocolli con modello a livelli e ad applicazioni multi-network.

Figura 2: Il formato dell'header del Tcp

Analizziamo tutti i campi.

Source Port: 16 bits


Contiene le informazioni relative al numero di porta del mittente.

Destination Port: 16 bits


Contiene le informazioni relative al numero di porta del destinatario.

16
Capitolo 3

Sequence Number: 32 bits


Numero di sequenza del primo ottetto di dati contenuti in questo segmento.

Acknowledgment Number: 32 bits


Contiene il successivo numero di sequenza che il mittente si aspetta di ricevere.

Data Offset: 4 bits


Questo campo indica dove comincia il dato.

Reserved: 6 bits
Riservato per usi futuri. Deve essere settato a 0.

Control Bits: 6 bits (da sinistra a destra):


URG: Bit del controllo urgente. Se impostato ad 1, deve essere letto.
ACK: Importante campo di Acknowledgment (Bit del controllo delle conferme). Se impostato ad 1, deve
essere letto.
PSH: Push Function (Bit del controllo dell'inoltro). Se impostato ad 1 vuol dire che il segmento ha richiesto un
controllo immediato.
RST: Reset della connessione. Se impostato ad 1, la connessione deve essere ristabilita.
SYN: Sincronizzazione dei numeri di sequenza.
FIN: Non ci sono più dati dal mittente. Se impostato ad 1, esso non ha più dati da inviare.

Window: 16 bits
Indica il numero di ottetti che il mittente sta imponendo di accettare.

Checksum: 16 bits
Al suo interno sono presenti le checksums calcolate dei dati e dell'header.

Urgent Pointer: 16 bits


Indica la fine di un dato urgente.

Options: variable
Il segmento TCP più grande contenente tutte le opzioni.

Padding: variable
Si assicura che tutto il segmento sia multiplo di 32 bits. Esso è composto da zeri.

Data
Contiene i dati veri e propri del segmento TCP.

3.4 User Datagram Protocol (UPD)


Così come per l'header TCP , procederemo nello stesso verso per quanto riguarda l'UPD. Prima di
studiare il suo header (figura 3), rinfreschiamoci le idee.

UPD (User Datagram Protocol)


E' un protocollo connectionless e non molto affidabile. Non ha un controllo degli errori e quindi non
ha una sicura ed affidabile gestione dei pacchetti in termini di scambio. Molti pacchetti UPD
possono non arrivare a destinazione senza che nessuno se ne accorga. Il vantaggio dell'UPD rispetto
al TCP è sicuramente la velocità. Visto che è un

17
Nei meandri del TCP/IP

Figura 3: L'header dell'UDP

protocollo connectionless, non necessita di acknowledgments e quindi più pacchetti possono essere
spediti sul segmento di rete in maniera meno sicura ma molto più veloce.

Source Port
Contiene le informazioni relative al numero di porta del mittente.

Destination Port
Contiene le informazioni relative al numero di porta del mittente.

Lenght
E' la lunghezza (in bytes) del datagramma insieme alla lunghezza dell'header.

Checksum
E' un campo di 16 bits e assicura che il pacchetto che sta' per essere inviato non sia danneggiato.
Somiglia molto al metodo usato dalla Checksum dell'header del TCP.

Data
E' un campo di lunghezza variabile e contiene tutti i dati che devono essere trasportati all'interno
del pacchetto UDP.

3.5 Numeri di porta TCP e UDP


Sia l'UPD che il TCP usano dei numeri di porta per indirizzare meglio le informazioni ai livelli
superiori. Sono nati per tenere traccia di queste ultime attraverso un segmento di rete. Il consorzio
che è responsabile delle creazione e dell'assegnazione di nuovi numeri di porta per i protocolli dello
standard Internet è l' Internet Assigned Numbers Authority (IANA). E' grazie a ciò che oggi
possiamo scambiare dati via FTP usando un unica porta, la 21. Questo si verifica anche per le altre
applicazioni e servizi di rete. Tutti gli scambi di dati che non interessano le well-known port
vengono assegnati a dei numeri di porta random con un range ben definito. Possiamo dividere i
numeri di porta in tre parti:

– Le porte che stanno al di sotto della 255 sono usate per le applicazioni comuni.
– Le porte comprese tra la 255 e la 1023 sono destinate alle aziende per usi commerciali dei loro
prodotti.
– Le porte sopra alla 1023 sono random e non sono regolate da nessuna applicazione.

18
Capitolo 3

Seguono le tabelle dei numeri di porta UPD e TCP riservati (well-known).

RESERVED TCP PORT NUMBERS


Decimal Description Keywords
0 Reserverd
1-4 Unassigned
5 Remote Job Entry RJE
7 Echo ECHO
9 Discard DISCARD
11 Active Users USERS
13 Daytime DAYTIME
15 Who is UP or Netstat NETSTAT
17 Quote of the day QUOTE
19 Character Generator CHARGEN
20 File Transfer Protocol (data) FTP-DATA
21 File Transfer Protocol FTP
23 Terminal Connection TELNET
25 Simple Mail Transfer Protocol SMTP
37 Time of Day TIME
39 Resource Location Protocol RLP
42 Host Name Server NAMESERVER
43 Who is NICNAME
53 Domain Name Server DOMAIN
75 Any private dial-out Service
77 Any private RJE Service
79 Finger FINGER
95 SUPDUP Protocol SUPDUP
101 NIC Host Name Server HOSTNAME
102 ISO-TSAP ISO-TSAP
103 Authentication Service AUTH
117 UUCP Path Service UUCP-
133-159 Unassigned
160-223 Reserved
224-241 Unassigned
242-255 Unassigned

19
Nei meandri del TCP/IP

RESERVED UPD PORT NUMBERS


Decimal Description Keywords
0 Reserved
1-4 Unassigned
5 Remote Job Entry RJE
7 Echo ECHO
9 Discard DISCARD
11 Active Users USERS
13 Daytime DAYTIME
15 Who is UP or Netstat NETSTAT
17 Quote of the day QUOTE
19 Character Generator CHARGEN
20 File Transfer Protocol (data) FTP-DATA
21 File Transfer Protocol FTP
23 Terminal Connection TELNET
25 Simple Mail Transfer Protocol SMTP
37 Time of Day TIME
39 Resource Location Protocol RLP
42 Host Name Server NAMESERVER
43 Who is NICNAME
53 Domain Name Server DOMAIN
67 Bootstrap ProtocolServer BOOTPS
68 Bootstrap ProtocolClient BOOTPC
69 Trivial File Trasfer Protocol TFTP
75 Any Private Dial-out Service
77 Any Private RJE Service
123 Network Time Protocol NTP
133-159 Unassigned
160-223 Reserved
224-241 Unassigned
242-255 Unassigned

3.6 Gli indirizzi IP e le loro classi


Un indirizzo IP è formato da 32 bit in formato binario caratterizzato da 4 campi di 8 bit

20
Capitolo 3

ciascuno separati da un punto (Es. 192.168.2.1). La risoluzione degli indirizzi è affidata al


Domain Name System (DNS) che analizzeremo in uno dei prossimi paragrafi. Vi sono più classi di
indirizzi IP che ne definiscono le loro peculiarità dalla parte Network e Host. Infatti in ogni
indirizzo IP possiamo definire la parte Network, campo invariabile che identifica la rete di cui fanno
parte una serie di hosts, e la parte Host, campo variabile che identifica tutti gli host facenti parte
della rete. Definiamo quindi le varie classi.

– Classe A:
Gli indirizzi facenti parti di questa classe utilizzano 7 bits per la parte Network e 24 Bits per la parte
Host. Per questa classe sono disponibili più di 2 milioni di possibili indirizzi.

– Classe B:
Gli indirizzi che fanno parte di questa classe utilizzato 14 per la parte Network e 16 bits per la parte
Host. Per questa classe sono disponibili più di 1 milione di possibili indirizzi.

– Classe C:
Gli indirizzi che fanno parte di questa classe utilizzato 21 per la parte Network e 8 bits per la parte
Host. Per questa classe sono disponibili più di mezzo milione di possibili indirizzi.

– Classe D:
Gli indirizzi che fanno parte di questa classe sono utilizzati per indirizzi di multicasting.

– Classe E:
Gli indirizzi che fanno parte di questa classe sono utilizzati per usi futuri.

Uno schema di tutte le classi disponibili è mostrato in figura 4.

Figura 4: Le classi di indirizzi disponibili

3.6.1 Indirizzi IP speciali


Quando abbiamo delle situazioni in cui alcuni campi di un indirizzo IP hanno come unico valore
binario solo 0 o 1 possiamo definirli come indirizzi IP speciali e hanno dei significati speciali.
Spieghiamo meglio perchè.

21
Nei meandri del TCP/IP

• All bits 0
Quando un host vuole comunicare in rete ma non conosce ancora l'indirizzo ip potrebbe inviare dei
pacchetti con il campo <network address> settato a 0. L'indirizzo IP viene interpretato in questo
modo da tutti gli altri computer della rete. La loro risposta però conterrà l'indirizzo ip completo , e
non settato a 0, che useranno sino alla fine della comunicazione.

– All bits 1
Prendiamo come esempio l'indirizzo IP 148.12.255.255. In questo modo i campi hosts sono definiti
su 255 e ciò con bit 1. Ciò significa che devono essere presi in considerazione tutti gli indirizzi della
classe B.

– Loopback
E' l'indirizzo di classe A 127.0.0.0 definito come loopback network. Tutti gli indirizzi che fanno
parte di questa classe processano i dati che devono essere inviati lungo il segmento di rete all'interno
del sistema.

3.7 Three-way handshake


Ogni qualvolta comunichiamo con un nostro amico , che sia dall'altra parte del mondo o all'interno
della nostra rete aziendale, si mette in atto un procedimento a livello TCP che ci permette di fare
tutto ciò. C'è bisogno sostanzialmente di sincronizzare i numeri di sequenza dei pacchetti TCP
dall'una e dall'altra parte della comunicazione. I numeri di sequenza sono usati per tenere traccia
dell'ordine dei pacchetti sulla rete e che nessuno di essi venga perso durante la trasmissione. Questo
procedimento prende il nome di Three-way handshake. In figura 5 possiamo capire il suo
funzionamento con uno degli esempi più semplici.

Figura 5: Un caso semplice di Three-way handshake

Quando due host non devono scambiarsi dei dati sono nello stato 1. Uno dei due aspetta, si mette in
ascolto, che qualcuno gli mandi delle richieste. Lo stato 2 è quello iniziale di una connessione. Tcp
A invia un pacchetto SYN (Synchronization) al Tcp B che a sua volta invia la risposta a
quest'ultimo con la richiesta di ACK (Acknowledgment) della connessione e della sua
sincronizzazione. Tcp A , dunque, invia la sua risposta sincronizzando i numeri di sequenza
rispondendo alla richiesta di Acknowledgment di Tcp B. Lo stato 5 è quello finale. Dopo aver
sincronizzato i numeri di sequenza i due host

22
Capitolo 3

cominciano a scambiarsi dei dati, come mostrato in figura 5.

3.7.1 Chiusura di una connessione


Usando lo stesso principio per l'instaurazione di una nuove connessione è anche possibile
chiuderla. Come possiamo vedere dalla figura 6 abbiamo in più il pacchetto il FIN che è quello che
viene sincronizzato per la fine di una connesione rispetto ai soli ACK e SYN dell'instaurazione.

Figura 6: Chiusura di una connessione col Three-way handshake

3.8 File Transfer Protocol (FTP)


Il File Trasfer Protocol è forse uno dei più usati protocolli della suite TCP/IP. E' un protocollo end-
to-end e fornisce connessioni affidabili e sicure. I suoi scopi principali sono quelli di:

1) promuovere la condivisione dei files


2) incoraggiare l'uso diretto o indiretto di computer remoti
3) trasferire i dati in maniera sicura e immediata

I server FTP sono in ascolto sulle porte 20 e 21. Sono usate due connessioni: la prima per fare il
login all'interno del sistema remoto, così come avviene per Telnet, e la seconda per gestire il
trasferimento dei dati. Il computer che instaura una connessione FTP diventa il client della
comunicazione mentre il computer a cui si connette il client è il server. Esso è anche quello su cui
vengono trasferiti e prelevati i dati. In entrambi i lati della comunicazione l'FTP dispone di un
protocol interpreter (PI) e di un data transfer process (DTP) e di una interfaccia utente. Quest'ultima
comunica con il PI che è nello spazio dedicato al controllo della connession. Il protocol interpreter ,
poi, comunica tutte le informazioni necessarie al suo file system. Dall'altro lato del trasferimento il
protocol interpreter deve avviare la connessione dati (data connection). Durante il trasferimento dei
files, la gestione dei dati è fornita dai Data Transfer Processes (DTPs). Dopo che la richiesta di
trasferimento da parte di un utente è completata, il protocol interpreter non deve far altro che
chiudere la connessione. Tutto il principio del funzionamento dell'FTP è mostrato in figura 7.

23
Nei meandri del TCP/IP

Figura 7: Una semplice sessione FTP.

3.8.1 Operazioni FTP


Quando ci connettiamo a un computer remoto usando FTP eseguiamo le seguenti operazioni:

1. Ci connettiamo all'host remoto

Prima di connetterci al nostro host c'è bisogno come in tutti i sistemi predisposti di login remoto di
inserire una username e una password. Esistono anche FTP remoti Anonimi da cui è possibile
prelevare files senza l'immissione di quest'ultime. Questo è quello che si verifica quando
scarichiamo, ad esempio, una immagine ISO delle nostra distribuzione Linux preferita da un
computer remoto.
Quattro sono i comandi usati:

– Open
Selezioniamo l'host remoto e ci logghiamo al suo interno.
– User
Identifica l'user id del computer remoto.
– Pass
L'user viene autentificato
– Site
Invia informazioni all'host sconosciuto che è usato per fornire servizi specifici a quell'host.

2. Selezioniamo una directory

Quando la connessione è avvenuta possiamo muoverci facilmente all'interno del sistema remoto
usando il comando cd solo dove abbiamo le autorizzazioni necessarie per farlo.

3. Visualizziamo la lista dei files disponibili per il trasferimento

24
Capitolo 3

Vengono qui usati i comandi per ricevere in output la lista dei file disponibili in una
directory o di tutto il sistema remoto. I comandi usati sono dir o ls a seconda del sistema
operativo usato dal server ftp.

4. Definiamo il metodo di trasferimento

Nel momento in cui l'utente ha la necessità di trasferire dei dati tra due sistemi diversi c'è bisogno di
scegliere il metodo di trasferimento affinché entrambi gli host possano scambiarli in maniera
efficace. Tutto questo è gestito dai comandi:

– mode
indica il modo in cui il file deve essere trasferito: Block o Stream. Quest'ultimo è quello usato in
modo predefinito e dispone di un più efficiente trasferimento.

– tipe
indica il sets di caratteri e quindi di codifica/decodifica di tutto il procedimento di trasferimento
files. Abbiamo i tipe: ASCII,EBCDIC e IMAGE.

5. Copiamo uno o più files dal nostro computer all'host remoto

Facciamo tutto ciò con i seguenti comandi:

– Get
Preleviamo un file dall'host remoto al computer locale.
– Mget
Preleviamo più di un file dall'host remoto al computer locale.
– Put
Trasferiamo un file dal computer locale all'host remoto.
– Mput
Trasferiamo più di un file dal computer locale all'host remoto.

6. Ci disconnettiamo dall'host remoto

I seguenti comandi sono usati per terminare una sessione:

– close
Si disconnette dal'host remoto e termina la sessione FTP.
– exit
Si disconnette dall'host remoto ma non termina la sessione FTP. In questo modo c'è la possibilità di
avviare un'altra sessione su un altro host remoto.

3.9 Domain Name System (DNS)


Il Domain Name System è sicuramente uno dei più importanti protocolli applicazione dell'intera
suite TCP/IP. E' lui , infatti, il responsabile della trasformazione di un indirizzo IP a nome di
dominio. A causa dell'enorme crescita di Internet e quindi di tutti gli host che ne facevano parte la
sua implementazione e soprattutto i suoi obiettivi sono cambiati con la crescita della grande rete.
Prima dello sviluppo vero e proprio del DNS,

25
Nei meandri del TCP/IP

infatti, tutti gli host con i relativi indirizzi IP e nomi di dominio venivano registrati in un unico file:
hosts.txt. Questo file era gestito dal NIC (Network Information Server) che provvedeva anche a farlo
arrivare a tutti gli host della rete tramite FTP ogni qual volta si
aggiungeva un altro host a quest'ultima. Ovviamente con l'incredibile crescita esponenziale di tutti
gli host connessi a Internet questa soluzione non poteva più essere valida. Il file hosts.txt
cominciava a diventare tremendamente pesante in termini di megabyte ed era praticamente
impossibile gestire la situazione in questo modo. Si pensò dunque di sviluppare il DNS che
permetteva, tramite l'avvio di un applicazione, di accedere e comunicare con tutti gli host connessi a
Internet senza aver bisogno dell'intero database di tutti gli host sul proprio sistema.
Nacque così anche il bisogno di raggruppare tutti gli hosts in grandi gruppi necessari a definire
meglio il servizio che forniva un determinato host e la sua provenienza. Si svilupparono dunque i
three-character top-level names, nient'altro che i nomi di dominio che oggi tutti noi conosciamo.
L'assegnazione dei nomi di dominio è gestito dalla IANA (Internet Assigned Numbers Authority,
http://www.iana.org). Nella tabella 1 sono definiti i principali nomi di dominio.

Nome di dominio Significato


.com Organizzazioni commerciali
.net Centri di supporto della rete
.org Organizzazioni no-profit
.int Organizzazioni internazionali
.mil Esercito militare americano
.gov Istituzioni del governo
Nome di dominio Significato
.edu Istituzioni educative
contrycode Standard ISO di 2 lettere che identifica una nazione. Esempi: Italia .it,
Inghilterra co.uk, Germania .de.

Al momento della stesura di questo libro sono disponibili anche altri nomi di dominio come .info, .
biz, .sex , .tv, .eu che identificano rispettivamente: siti web a carattere informativo, centrati sul
business, erotico, televisivo. I .eu indicano domini che fanno parte dell'Europa.

3.9.1 Processo di risoluzione di un dominio


Il processo di risoluzione di un dominio può essere definito con i seguenti quattro passaggi:

1. Un utente formula una richiesta di ricevere il nome dell'host avendo l'indirizzo IP.
2. Colui che deve fare ciò invia una richiesta al nameserver.
3. Il nameserver verifica se la richiesta può essere soddisfatta tramite il suo database o cache e
invia la richiesta. Se questo non può essere fatto invia la richiesta ad un altro

26
Capitolo 3

4. nameserver partendo dal dominio root (quello che alla base di tutti i nomi di dominio).
5. L'utente riceva una risposta alla sua richiesta. Se si è verificato un errore durante il processo,
l'utente non riceverà una risposta.

3.9.2 I formati dei messaggi DNS


L'header di un messaggio DNS , mostrato in figura 8, contiene i seguenti campi:

Figura 8: Il formato di un messaggio DNS.

ID
Identificatore di 16 bit assegnato dal programma che genera tutti i tipi di richieste.

QR
Campo di 1 bit che specifica quando il messaggio è una richiesta (QR=0) o una risposta (QR=1).

OPCODE
Campo di 4 bit che identifica il tipo di richiesta formulata dall'utente. Questo valore è settato da
chi invia la richiesta ed è copiato nella risposta. Questi i possibili valori:

0 richiesta standard (QUERY)


1 richiesta inversa (IQUERY)
2 richiesta di informazioni sullo stato del server (STATUS)
3-15 riservato per usi futuri

AA (Authoritative Answer)
Campo di 1 bit valido nella risposta. Indica che il nameserver che risponde ha l'autorita' per il
nome di dominio nel messaggio DNS.

TC (TrunCation)
Indica che il messaggio è stato spezzato a cause delle sue grandi dimensioni che non
permettevano il passaggio attraverso il canale di trasmissione.

RD (Recursion Desired)

27
Nei meandri del TCP/IP

Questo bit dovrebbe essere settato nella richiesta e copiato nella risposta. Se settato ad 1 indica
che il DNS desidera che il server dei nomi DNS usi un'interrogazione ricorsiva.

RA (Recursion Available)
Questo campo è settato o cancellato in una risposta e indica che il nameserver supporta le
interrogazioni ricorsive.

Z
Riservato per usi futuri. E' settato a 0 in tutte le richieste e le risposte.

RCODE (Response Code)


Viene settato solo nelle risposte e indica che si è verificato un errore. Ecco i possibili valori:

0 Nessun errore.
1 Errore di formato. Il server non è capace di interpretare il messaggio.
2 Errori del server – Il name serveè capace di processare la richiesta a causa di un
errore/problema del server.
3 Errore di nome – Il nome di dominio presente nella richiesta non esiste.
4 Non supportato – Il nameserver non supporta il tipo di richiesta.
5 Rifiutato – Il server si rifiuta di rispondere a causa di politiche di sicurezza.

6-15 Valori riservati per usi futuri.

QDCOUNT campo di 16 bit che definisce il numero di voci nella sezione question.

ANCOUNT campo di 16 bit che specifica il numero di record risorse nella sezione Answer.

NSCOUNT campo di 16 bit che specifica il numero di record risorse del nameserver nella
sezione Authority.

ARCOUNT campo di 16 bit che specifica il numero di record risorse nella sezione Additional
Records.

– Formato della Question section

La sezione Question contiene dati quando un risolutore DNS emette un messaggio di richiesta DNS.
Analizziamo il suo formato.

28
Capitolo 3

QNAME
Nome di dominio rappresentato come una sequenza di labels, dove ogni label è formato da un
ottetto seguito da quel numero di ottetti. Il nome di dominio termina con un un ottetto di lunghezza
0 per il null label del root.

QTYPE
Codice di due ottetti che rappresenta il tipo di richiesta.

QCLASS
Codice di due ottetti che rappresenta la classe di una richiesta. Il campo QCLASS è IN quando è
riferito ad Internet, ad esempio.

– Formato della Answer, Authority, e Additional section


Analizziamo l'ultima section rimasta, quella relativa alla risposta di una query (richiesta) DNS.

NAME un nome di dominio a cui appartiene questo resource record

TYPE due ottetti contenenti uno dei tipi di codice RR (Resource Record). Questo campo
specifica il significato dei dati all'interno del campo RDATA.

CLASS due ottetti che specificano la classe dei dati nel campo RDATA.

TTL un intero di 32 bit che specifica l'intervallo di tempo che il resource record può essere
contenuto nella cache prima di essere scartato. I valori settati a zero indicano che il resource record
può essere solo usato per la trasmissione che si sta verificando e non dovrebbe essere mantenuto
nella cache.

RDLENGTH intero di 16 bit che specifica la lunghezza dell'ottetto contenuto nel campo
RDATA.

RDATA una stringa di ottetti di lunghezza variabile che descrive il tipo di risorsa. Il formato
di questa informazione varia a seconda del TYPE e CLASS del resource record. Se ad esempio il
TYPE è A e la classe è IN, il campo RDATA è un ottetto che descrive un indirizzo Internet ARPA.

29
Nei meandri del TCP/IP

Figura 9: Formato della Answer Section

3.10 Internet Protocol (IP)


L'internet protocol è stato fondamentalmente progettato con l'intento di funzionare su una o più reti
a commutazione di pacchetto (il suo funzionamento è stato descritto nel paragrafo 2.1.1). Esso è
anche l'artefice della trasmissione di pacchetti di informazioni (datagrammi) che partano da un
mittente e arrivano a un destinatario. E' un protocollo dotato di un procedimento di frammentazione
e di riassemblaggio dei paccheti e della loro trasmissione su piccole reti. L'Internet Protocol ha
principalmente due funzioni: indirizzamento (addressing) e frammentazione (fragmentation).
Passiamo ad analizzare il suo header (figura 10).

Figura 10: Il formato dell'header Internet

Version: 4 bits
Questo campo indica la versione dell' header internet. In questo paragrafo analizzare l' Ipv4 mentre
nell'ultimo paragrafo l'Ipv6.

IHL (Internet Header Length) : 4 bits


Indica la lunghezza dell'header internet in parole di 32 bit e si riferisci, quindi, all'inizio dei dati.

30
Capitolo 3

Type of Service: 8 bits


Fornisce delle indicazioni sulla qualità del tipo di servizio desiderato.
Il TOS è meglio specificato dai parametri astratti di precedenza, delay, throughput e affidabilità.

Precedenza. Indica quanto è importante questo datagramma.

Delay. Una veloce consegna è importante per i datagrammi con questa indicazione.

Throughput. Un'alta velocità di consegna dei dati è importante per i datagrammi con questa
indicazione.

Affidabilità. Assicura una consegna ad alto livello per i datagrammi con questa indicazione.

Total Length: 16 bits


Indica la lunghezza del datagramma, misurata in ottetti, incluso l'header internet e i dati. Permette la
lunghezza massima di un datagramma di 65,535ottetti.

Identification: 16 bits
Valore identificativo assegnato dal mittente per aiutare nell'assemblaggio i frammenti di un
datagramma.

Flags: 3 bits

Vari valori sono assegnati. Elenchiamoli.

Bit 0: riservato, deve essere settato a 0.


Bit 1: (DF) 0 = Devi frammentare, 1 = Non frammentare.
Bit 2: (MF) 0 = Ultimo frammento, 1 = Più frammenti.

0 1 2
+---+---+---+
| | D | M |
| 0 | F | F |
+---+---+---+

Fragment Offset: 13 bits


Questo campo indica dove appartiene il frammento nel datagramma.

Time to Live: 8 bits


Questo campo indica il tempo massimo che il datagramma può rimanere in vita nel sistema internet.
Se questo campo contiene il valora 0 allora il datagramma deve essere distrutto. Il tempo di vita è
misurato in secondi. Lo scopo di questo campo è essenzialmente quello di scartare i datagrammi che
non possono essere smistati al destinatario.

31
Nei meandri del TCP/IP

Protocol: 8 bits
Il campo indica il prossimo livello del protocollo usato nella porzione dati del datagramma internet.

Header Checksum: 16 bits


Indica la checksum del solo header. Visto che alcuni campi dell'header possono cambiare, questa
deve essere ricomposto e verificato ad ogni punto dell'header.

Source Address: 32 bits


Indirizzo del mittente.

Destination Address: 32 bits


Indirizzo del destinatario.

Options: variable
Le opzioni possono apparire o meno nel datagramma. Devono essere implementate da tutti i moduli
ip (host e gateways).

Padding: variable
E' usato per assicurarsi che l'header internet termini entro un limite di 32 bit. Il campo è settato a 0.

3.11 Internet Control Message Protocol (ICMP)


Come abbiamo gia' ampiamente spiagto nel paragrafo precedente riguardo all'Internet Protocol, esso
viene usato per connessioni host-to-host e su reti interconnesse tra di loro a commutazione di
pacchetto. All'interno di queste reti vi sono dei gateway e dei router che qualche volta hanno
bisogno di comunicare con colui che ha mandato loro una richiesta di informazioni. A questo scopo
è nato l'ICMP. Esso fa interamente parte dell'IP è può essere usato in ogni sua applicazione. La sua
principale funzione è quella di riportare degli errori di trasmissione e quindi di dare la possibilità al
destinatario di comunicare col ricevente prima, durante e dopo la trasmissione. Non è stato
sviluppato per rendere l'IP più affidabile. Può riportare gli errori di ogni applicazione IP tranne
quelli legati all'ICMP stesso per non creare infinite code di messaggi. Dopo aver analizzato l'header
dell'ICMP, faremo lo stesso anche con tutti i suoi messaggi. Ecco da cosa è composto il suo header:

Version
(ipv)4 or (ipv)6

IHL
Lunghezza dell'header internet in parole di 32 bit.

Type of Service
0 Echo Reply

3 Destination Unreachable
4 Source Quench

32
Capitolo 3

5 Redirect
8 Echo
11 Time Exceeded
12 Parameter Problem
13 Timestamp
14 Timestamp Reply
15 Information Request
16 Information Reply

Total Length
Lunghezza dell'internet header e dei dati in ottetti.

Identification, Flags, Fragment Offset


Usati nella frammentazione.

Time to Live
Time to live in secondi.

Protocol
ICMP = 1

Header Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

Source Address
Indirizzo del gateway o dell'host che ha composto il messaggio ICMP.

Destination Address
Indirizzo del gateway o dell'host al quale il messaggio ICMP dovrebbe essere mandato.

– Destination Unreachable Message

Campi IP :

Destination Address
La rete o l'indirizzo d'origine dai dati originali del datagramma.

Campi ICMP:

33
Nei meandri del TCP/IP

Type
3

Code
0 = net unreachable;
1 = host unreachable;
2 = protocol unreachable;
3 = port unreachable;
4 = fragmentation needed and DF set;
5 = source route failed.

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

Internet Header + 64 bits of Data Datagram


L'internet header addizionato ai primi 64 bits del Data Datagram. Questo dato è usato dall'host per
instradare il messaggio all'appropriato processo.

– Time Exceeded Message

Campi IP :

Destination Address
La rete o l'indirizzo d'origine dai dati originali del datagramma.

Campi ICMP:

Type
11

Code
0 = time to live exceeded in transit;
1 = fragment reassembly time exceeded.

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

34
Capitolo 3

Internet Header + 64 bits of Data Datagram


L'internet header addizionato ai primi 64 bits del Data Datagram. Questo dato è usato dall'host per
instradare il messaggio all'appropriato processo.

– Parameter Problem Message

Campi IP :

Destination Address
La rete o l'indirizzo d'origine dai dati originali del datagramma.

Campi ICMP:

Type
12

Code
0 = il pointer indica l'errore.

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

Pointer
Se il codice = 0, identifica l'ottetto dove è stato trovato un errore.

Internet Header + 64 bits of Data Datagram


L'internet header addizionato ai primi 64 bits del Data Datagram. Questo dato è usato dall'host per
instradare il messaggio all'appropriato processo.

– Source Quench Message

35
Nei meandri del TCP/IP

Campi IP :

Destination Address
La rete o l'indirizzo d'origine dai dati originali del datagramma.

Campi ICMP:

Type
4

Code
0

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

Internet Header + 64 bits of Data Datagram


L'internet header addizionato ai primi 64 bits del Data Datagram. Questo dato è usato dall'host per
instradare il messaggio all'appropriato processo.

- Timestamp or Timestamp Reply Message

Campi IP :

Addresses
L'indirizzo del mittente in un messaggio timestamp sarà il destinatario che risponde a questo. Per
creare una risposta a un messaggio timestamp, gli indirizzi del mittente e del destinatario sono
semplicemente riservati, il codice type cambiato cambiato a 14, e la checksum ricomposta.

Campi IP:

Type
13 for timestamp message;

36
Capitolo 3

14 for timestamp reply message.

Code
0

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in futuro.

Identifier
Se il codice = 0, un identificatore per assistere nell'instradamento del timestamp e delle risposte,
dovrebbe essere zero.

Sequence Number
Se il codice = 0, un identificatore per assistere nell'instradamento del timestamp e delle risposte,
dovrebbe essere zero.

– Information Request or Information Reply Message

Campi IP:

Addresses
L'indirizzo del mittente in un messaggio timestamp sarà il destinatario che risponde a questo. Per
creare una risposta a un messaggio timestamp, gli indirizzi del mittente e del destinatario sono
semplicemente riservati, il codice type cambiato cambiato a 16, e la checksum ricomposta.

Campi IP:

Type
15 for information request message;
16 for information reply message.

Code
0

Checksum
Indica la checksum del solo header. E' un campo di 16 bit e per comporla , il campo checksum
dovrebbe essere settato a 0. Questa checksum dovrebbe essere sostituita in

37
Nei meandri del TCP/IP

futuro.

Identifier
Se il codice = 0, un identificatore per assistere nelle richieste e nelle risposte di matching,
dovrebbe essere settato a 0.

Sequence Number
Se il codice = 0, un identificatore per assistere nelle richieste e nelle risposte di matching,
dovrebbe essere settato a 0.

3.12 Address Resolution Protocol (ARP)


L'Address Resolution Protocol gioca un ruolo chiave all'interno dell'Internet Protocol (IP). Esso,
infatti, viene usato per mappare un indirizzo hardware (indirizzo ethernet o della scheda di rete o
MAC , Media Access Control) da un indirizzo IP all'interno della rete. Il processo ARP viene
attuato nei livelli Network (arp) e DataLink (ethernet). L'ARP è importante perchè, in ogni
comunicazione, prima di risolvere un indirizzo IP deve per forza essere risolto l'indirizzo hardware
di ogni scheda di rete connessa ad essa e quindi di ogni client. Per velocizzare la risoluzione di
questi indirizzi ogni client usa la propria cache ARP (una sorta di file temporanei di Internet) in
modo da non ripetere lo stesso processo di risoluzione nel caso in cui si stesse comunicando con lo
stesso computer. Passiamo ora ad analizzare la struttura di un pacchetto ARP e successivamente il
processo di risoluzione ARP.

Figura 11: Struttura di un pacchetto ARP

Ethernet transmission layer (parte non accessibile all'utente):

DESTINATION 48.bit: Indirizzo di destinazione

38
Capitolo 3

SOURCE 48.bit: Indirizzo d'origine

PROTOCOL TYPE 16.bit: Tipo di protocollo


(impostato su ARP).

Ethernet packet data:

HRD 16.bit: Spazio di indirizzamento hardware

PRO 16.bit: Spazio di indirizzamento del protocollo

HLN 8.bit: Lunguezza dell'indirizzo hardware (0-255 Bytes)

PLN 8.bit: Lunghezza dell'indirizzo del protocollo (0-255 Bytes)

OP 16.bit: Opcode: sia richiesta che risposta

SHA nbytes: Indirizzo hardware del mittente

SPA mbytes: Indirizzo del protocollo del mittente

THA nbytes: Indirizzo hardware del destinatario

TPA mbytes: Indirizzo del protocollo del destinatario

Processo di risoluzione ARP

1. Un protocollo di routing identifica il prossimo HOP (salto) su un indirizzo IP.


2. Questo indirizzo MAC è gia' presente nella tabella di risoluzione IP-ARP ?

1. SI: allora creo un pacchetto 802.x usando la destinazione MAC e lo invio.

2. NO:
1. Genero un pacchetto ethernet con i seguenti valori:
DESTINATION = Unset
SOURCE = LOCAL MAC
Protocol type = ARP
HRD = local MAC
PRO = IP
HLN = 6
PLN = 4 (se si tratta di IP)
OP = REQUEST (Richiesta)
SHA = local MAC (Richiedente)
SPA = local IP (Richiedente)
THA = (indirizzo hardware di broadcast)
TPA = remote IP
2. Invio un pacchetto Broadcast ARP sul segmento di rete.

39
Nei meandri del TCP/IP

3. Il successivo HOP-HOST aggiornerà la sua tabella di risoluzione IP-ARP con l'indirizzo IP


del richiedente e con il suo MAC, quindi risponde con un pacchetto settato in questo modo:

DESTINATION = Unset
SOURCE = LOCAL MAC
Protocol type = ARP
HRD = local MAC
PRO = IP
HLN = 6
PLN = 4 (se si tratta di IP)
OP = REPLY
SHA = local MAC
SPA = local IP
THA = MAC del richiedente
TPA = IP del richiedente

4. GLI ALTRI HOSTS:


Gli altri host aggiorneranno la loro tabella di risoluzione IP-ARP con le informazioni del
richiedente, poi scartano il pacchetto.

3.13 Internet Relay Chat Protocol (IRC)


Chi non conosce, nell'anno 2004, IRC? E' sicuramente il mezzo di comunicazione instantanea più
usato al mondo e permette le conferenze testuali con altri computer localizzati , magari, dall'altra
parte del globo. In questo paragrafo analizzeremo la sua architettura definendone le funzioni chiave
e i vari tipi di servizi offerti da IRC.
Il protocollo IRC è stato sviluppato con una struttura client-server ed è , come organizzazione di
rete, molto similare ai sistemi distribuiti. Infatti all'interno di un network IRC possiamo notare la
connessione tra loro di più server per garantire una maggiore e più efficace fruibilità del servizio ai
client connessi ad esso. Il tutto utilizza una configurazione distribuita che prende il nome di
Spanning Tree. Essa utilizza un algoritmo di broadcast. Per capire meglio quest'ultima serviamoci
della figura 12 in cui abbiamo ipotizzato una semplice rete Irc. Chi ha delle minime conoscenze di
sistemi

Figura 12: Architettura di una rete IRC

40
Capitolo 3

distribuiti sa cosa sono gli algoritmi di broadcast ma per rendere il libro alla portata di tutti,
spieghiamo il suo funzionamento. Un algoritmo di broadcast funziona nel seguente modo:
supponiamo che il computer A voglia mandare un messaggio al computer C e che il computer C, a
sua volta, voglia mandare questo messaggio al computer D. Il computer A manda il messaggio a
tutti i suoi figli (i computer direttamente collegati ad esso). Nella figura il primo ed unico figlio è
proprio il computer C. Quando quest'ultimo riceve il messaggio dal computer A spedisce lo stesso
messaggio a tutti i suoi figli (computer D). Questa è l'unica configurazione permessa per i server
IRC. Nello spanning tree ogni server funge come nodo centrale per il resto della rete. Passiamo ora
a descrivere i servizi offerti dal protocollo IRC. L'unione di questi servizi permette l'effettiva
comunicazione testuale.

Servizi IRC

– Client Locator
Affinchè due clients possano scambiare messaggi tra di loro è necessario che riescano a localizzarsi
ognuno con gli altri all'interno della rete. Una volta connesso ogni client si identifica sulla rete con
una propria label che sarà poi usata dagli altri clients e servers per localizzarlo. I servers sono
responsabili di mantenere traccia di tutti i label usati sulla rete da ogni client.

– Message Relaying
Ogni comunicazione tra due clients connessi alla rete IRC è fornita attraverso il server(s).

– Channel Hosting And Management


Un canale non è nient'altro che un gruppo di più utenti che preferisce scambiarsi messaggi
attraverso quest'ultimo. Un canale è caratterizato dal suo nome e dai suoi membri e ha anche delle
proprietà che possono essere gestite dai suoi membri. Il canale fornisce un metodo veloce di
smistamento di messaggi a pià clients contemporaneamente.

3.14 Sviluppi futuri: IP Version 6 (IPV6)


Tutti sanno che Internet nel corso dell'ultimo decennio si è sviluppata a dismisura, oltrepassando
ogni limite e ogni previsione di crescita. E' anche vero che con l'aumento dei computer connessi alla
rete sorge il problema di come indirizzarli. Pensate di trovarvi in un grande parcheggio (Internet) e
volete parcheggiare la vostra macchina (client) con un indirizzo IP assegnatovi. Non c'è nulla di
strano, ovvio. Ma pensate all'ipotesi che quel parcheggio non possa più ospitare altre macchine,
come fanno i nuovi client ad accedere? Si va incontro ad un collasso della rete, non sono più
disponibili indirizzi e più nessuno potrà accedere ad Internet. Per ovviare a questo problema è nato l'
Internet Protocol Version 6, più noto con la siglia IPV6. Esso è una nuova versione dell'Internet
Protocol, sviluppata per diventare il successore dell'IPv4 (i comuni indirizzi Internet che oggi
usiamo). In questo paragrafa analizzaremo sino infondo questo protocollo, compreso il suo header e
i suoi metodi di indirizzamento.
Ecco i principali vantaggi dell'IPV6 rispetto all'IPV4:

– Una più estesa capacità di indirizzamento


L'IPv6 aumenta la grandezza di un indirizzo IP da 32 a 128 bits, supporta più livelli di

41
Nei meandri del TCP/IP

indirizzamento, ha molti più indirizzi disponibili e dispone di una più semplice modalità di
configurazione degli indirizzi.
Dispone di un nuovi tipi di indirizzo chiamato anycast address , usato per spedire un pacchetto a
qualcuno del gruppo dei nodi.

– Formato dell'header semplificato


Alcuni campi dell'header IPV4 sono stati eliminati per ridurre i tempi di elaborazione dei dati
all'interno di una rete IPV6. In particolare viene semplificata la vita agli host riceventi.

– Supporto migliorato per le estensioni e le opzioni


L'header Ipv6 è stato compresso per garantire una maggiore efficienza, diminuire i limiti sulla
lunghezza delle opzioni e dare una maggiore flessibilità nell'introduzione di opzioni in futuro.

– Miglior controllo di flusso


Con questa nuova capacità i datagrammi IP potranno richiedere una maggiore qualità del servizio,
velocizzare le operazioni di scambio dati e disporre di servizi in tempo reale.

– Autenticazione e privacy con IPv6


Ipv6 supporta l'autenticazione, integrità dei dati e, in modo opzionale, la confidenzialità dei dati per
garantirne la perfetta integrità durante il trasporto dei datagrammi.

Terminologia Ipv6

node - un dispositivo che implementa IPv6

router - un nodo che inoltra un pacchetto Ipv6 non esplicitamente indirizzato a se


stesso.

host - qualsiasi nodo che non è un router.

upper layer - un livello imeddiatamente sopra Ipv6. Esempi sono


protocolli di trasporto come TCP e UDP, protocolli di
controllo come ICMP, protocolli di routing come OSPF.

link - una comunicazione su cui i nodi possono comunicare allo


stesso livello, ad esempio, col livello immediatamente sotto all'IPv6.

Neighbors - nodi allegati allo stesso link.

interface - l'allegato di un nodo ad un link.

address - an IPv6-layer identifier for an interface or a set of


interfaces.

packet - un header IPv6 più il carico utile.

42
Capitolo 3

link MTU - maximum transmission unit, ad esempio, la grandezza


massima di un pacchetto, in ottetti, che può essere trasportato
su un link.

path MTU - il minimo link MTU di tutti i links presenti in un percorso tra il nodo
d'origine e quello d'arrivo.

Header Ipv6

Figura 13: Header Ipv6

Version 4-bit -> Internet Prtocol Version Number = 6 (Ipv6).

Traffic Class 8-bit -> Tipo di traffico.

Flow Label 20-bit -> Etichetta di flusso.

Payload Length 16-bit -> Lunguezza del payload (carico utile) Ipv6,
ad esempio, il resto del pacchetto che segue questo header
Ipv6, in ottetti.

Next Header 8-bit -> Identifica il tipo di header immediatamente seguente


all'header Ipv6. Usa gli stessi valori del protocollo Ipv4.

Hop Limit 8-bit -> Campo decrementato di una unità da ogni nodo che inoltra
il pacchetto. Il pacchetto è scartato se l'Hop Limit è decrementato
a zero.

Source Address 128-bit -> indirizzo del client che ha originato il pacchetto.

Destination Address 128-bit -> indirizzo del destinatario del pacchetto.

43
Nei meandri del TCP/IP

IPv6 Extension Headers

Nell'IPv6, le informazioni opzionali relative ad Internet sono codificate in diversi headers che
potrebbero essere localizzati tra l'header IPV6 e il livello superiore in un pacchetto. Ci sono un
piccolo numero di estensioni headers, ognuna identificata da un diverso valore Next Header. Come
mostrato in figura 14, ogni pacchetto Ipv6 può contenere nessuna, una o più intestazioni header,
ognuna delle quali identificata dal campo Next Header del precedente header.

Figura 14: Intestazione dell'header Ipv6

La caratteristica fondamentale di questa struttura Ipv6 è quella che gli extension headers non sono
esaminati o processati da nessun router nel percorso di inoltro di un pacchetto. Gli extension
headers vengono esaminati nell'ordine con cui compaiono nel pacchetto Ipv6. Se ad esempio un
host vuole eseguire per primo una data operazione diversa dall'ordine del pacchetto non può farlo,
devono essere prima eseguite le operazioni relative agli extension headers precedenti.

Una completa implementazione di IPV6 include anche l'implementazione dei seguenti extension
headers:

1) Hop-by-Hop
2) Options Routing (Type 0)
3) Fragment Destination
4) Options
5) Authentication
6) Encapsulating Security Payload

Ordine degli Extension Headers in un pacchetto IPv6

IPv6 header
Hop-by-Hop Options header
Destination Options header (nota 1)

44
Capitolo 3

Routing header
Fragment header
Authentication header
Encapsulating Security Payload header
Destination Options header (nota 2)
Header di livello superiore

Nota 1 : per le opzioni da essere processate dalla prima destinazione che


appare nel campo Ipv6 Destination Address più la seguente destinazione
elencata nell'header Routing.

Nota 2 : per le opzioni da essere processate solo dal ricevente del


pacchetto.

Analizziamo ora gli header di ogni intestazione.

Hop-by-Hop Options Header

L'header Hop-by-Hop Options è usato per trasportare le informazioni facoltative lungo ogni nodo
attraverso un percorso di smistamento del pacchetto. Ecco il formato del suo header:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
. .
. Options .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 15: Hop-by-Hop Option Header

Next Header campo di 8 bit. Identifica il tipo di header immediatamente seguente


all'header Hop-by-Hop Options. Usa gli stessi valori del campo del
protocollo Ipv4.

Hdr Ext Len campo di 8 bit. Lunghezza dell'header Hop-by-Hop Options in unità
di 8 ottetti. Non include il primo campo di ottetti.

Options campo di lunghezza variabile e contiene una o più opzioni TLV


(type-length-value).

Routing Header

L'header di Routing è usato da una fonte Ipv6 per elencare ono o più nodi intermedi da essere
percorsi sulla strada che porta alla destinazione del pacchetto. Questa funzione è molto simile alle
opzioni Loose Source e Record Route del protocollo Ipv4. L'header Routing è identificato da un
valore Next Header di 43 nel precedente header. Studiamo ora il suo header:

45
Nei meandri del TCP/IP

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. type-specific data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 16: Routing Header

Next Header campo di 8 bit. Identifica il tipo di header immediatamente seguente


all'header di Routing. Usa gli stessi valori del campo del protocollo
Ipv6.

Hdr Ext Len campo di 8 bit. Lunghezza dell'header Routing in unità di ottetti da 8
bits. Non include il primo campo di ottetti.

Routing Type campo di 8 bit. Identifica una particolare variante dell'header Routing.

Segments Left campo di 8 bit. Numeri di segmenti di route rimanenti, ad esempio il


numero di nodi ancora da essere percorsi prima di raggiungere la
destinazione finale.

type-specific data campo di lunghezza variabile, determina il tipo di Routing.

Fragment Header

L'header Fragment è usato da una fonte Ipv6 per spedire un pacchetto più grande che potrebbe
adattare nel percorso MTU alla sua destinazione. L'header Fragment è identificato da un valore del
Next Header di 44 nell'immediatamente precedente header. Studiamo il suo header:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Reserved | Fragment Offset |Res|M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 17: Fragment Header

Next Header campo di 8 bit. Identifica il tipo di header immediatamente seguente


all'header di Routing. Usa gli stessi valori del campo del protocollo
Ipv6.

Reserved campo di 8 bit. Inizializzato con il valore 0 per la trasmissione, è


ignorato nella ricezione.

Fragment Offset campo di 13 bit. L'offset, in unità di ottetti da 8 bits. L'offset si basa

46
Capitolo 3

sull'inizio della parte frammentabile del pacchetto originale.

Res campo di 2 bit. Inizializzato con il valore 0 per la trasmissione, è ignorato


nella ricezione.

M flag 1 = altri frammenti; 0 = ultimo frammento.

Identification campo di 32 bits. Creato dall'host d'origine, questo campo identifica


univocamente i frammenti come parte di un pacchetto originale non
frammentato come in Ipv4.

Processo di Frammentazione di un pacchetto

pacchetto originale:
+------------------+--------------+--------------+--//--+----------+
| Unfragmentable | first | second | | last |
| Part | fragment | fragment | .... | fragment |
+------------------+--------------+--------------+--//--+----------+

frammenti di un pacchetto:
+------------------+--------+--------------+
| Unfragmentable |Fragment| first |
| Part | Header | fragment |
+------------------+--------+--------------+

+------------------+--------+--------------+
| Unfragmentable |Fragment| second |
| Part | Header | fragment |
+------------------+--------+--------------+
o
o
o
+------------------+--------+----------+
| Unfragmentable |Fragment| last |
| Part | Header | fragment |
+------------------+--------+----------+

Ogni frammento di un pacchetto è caratterizzato da:

(1)Un parte non frammentabile con la lunghezza dell'header originale cambiato per contenere
solo la lunghezza di questo frammento e il campo Next Header dell'ultimo header della
parte non frammentabile cambiato con il valore 44.

(2)L'header di un frammento contiene:


Il valore Next Header che identifica il primo header della parte frammentabile del
pacchetto originale.
Un frammento Offset contenente l'offset del frammento, in unità di ottetti da 8 bits, relativi
all'inizio della parte frammentabile del pacchetto originale. Il frammento offset del primo
frammento è 0.
Una flag M settata col valore 0 se il frammento è l'ultimo oppure con 1 se ce ne

47
Nei meandri del TCP/IP

sono altri.
Il valore di identificazione generato per il pacchetto originale.

(3) Il frammento stesso.

Il pacchetto riassemblato dopo la frammentazione:


+------------------+----------------------//------------------------+
| Unfragmentable | Fragmentable |
| Part | Part |
+------------------+----------------------//------------------------+

Destination Options Header

Questo campo è usato per trasportare informazioni opzionali che hanno bisogno di essere esaminate
solo da un nodo(i) della destinazione del pacchetto. L'header Destination Options è identificato da
un valore Next Header di 60 nell'immediatamente precedente header. Studiamo il suo header:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
. .
. Options .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 17: Destination Options Header

Next Header campo di 8 bit. Identifica il tipo di header immediatamente seguente


all'header di Routing. Usa gli stessi valori del campo del protocollo
Ipv6.

Hdr Ext Len campo di 8 bit. Lunghezza dell'header Destination Options in unità di
ottetti da 8 bits. Non include il primo campo di ottetti.

Options campo di lunghezza variabile e contiene una o più opzioni TLV


(type-length-value).

No Next Header
Il valore 59 di questo campo di un header Ipv6 o un altra estensione dell'header indica che non c'è
nessun altro segmento che segue quell'header.

48
Capitolo 3

3.14.1 Ipv6 Addressing


Analizziamo ora , dopo aver descritto tutte le funzioni principali e le caratteristiche dell'IPv6, il suo
addressing, ovvero il suo indirizzamento IP.

Gli indirizzi Ipv6 sono campi a 128 bit. Ci sono tre tipi di indirizzi:

Unicast: identificativo assegnato ad una sola interfaccia. Un pacchetto inviato ad un


indirizzo unicast è smistato solo all'interfaccia identifica da quell'indirizzo.

Anycast: un identificativo per un set di interfacce. Un pacchetto inviato ad un


indirizzo unicast è smistato a ona delle interfacce identificate da
quell'indirizzo (il più vicino secondo i protocolli di routing e il calcolo della distanza).

Multicast: un identificativo per un set di interfacce. Un pacchetto inviato ad un


indirizzo multicast è smistato a tutte le interfacce indificate da
quell'indirizzo.

Da come si può notare non sono presenti indirizzi di broadcast nell'IPv6 in quanto la loro funzione è
stata sostituita dagli indirizzi multicast.
Fondamentalmente ci sono tre forme canoniche di rappresentazione di un indirizzo Ipv6.
Analizziamole:

1. La forma preferita è x:x:x:x:x:x:x:x, dove ogni ogni x rappresenta il valore esadecimale degli
otto pezzi da 16 bits dell'indirizzo. Facciamo un esempio:

LOLC:BA98:2654:2210:LOLC:BA98:2654:2210

2. Può essere comune per degli indirizzi che contengo lunghe stringhe di 0 bits utilizzare un
metodo semplice ed efficace per comprimere il lungo indirizzo Ipv6. Per rendere facilmente
comprensibile e scrivibile un indirizzo Ipv6 caratterizzato da una lunga serie di 0 bits si è
concepito un metedo per comprimere gli zeri. L'uso di "::" indica gruppi multipli di zeri da 16
bits. I "::" possono apparire solo una volta in un indirizzo.

Facciamo un esempio con gli indirizzi che seguono:

1080:0:0:0:8:800:200C:417A unicast address


FF01:0:0:0:0:0:0:101 multicast address
0:0:0:0:0:0:0:1 loopback address
0:0:0:0:0:0:0:0 unspecified addresses

potrebbero essere rappresentati come:

1080::8:800:200C:417A unicast address


FF01::101 multicast address
::1 loopback address

49
Nei meandri del TCP/IP

:: unspecified addresses

3. Una forma alternativa che alcune volte è più conveniente quando si tratta con indirizzi misti di
nodi Ipv4 e Ipv6 è x:x:x:x:x:x:d.d.d.d, dove le x sono i valori esadecimali dei sei pezzi da 16 bit
dell'indrizizzo Ipv6 e le d sono i lavori decimali dei 4 pezzi da 8 bits dell'indirizzo Ipv4.
Utilizzando sempre il metodo dei "::", possiamo formulare degli esempi.

Esempio: forma estesa di un indirizzo misto:

0:0:0:0:0:0:13.1.68.3
0:0:0:0:0:CCCC:129.144.52.38

o nella forma compressa:

::13.1.68.3
::CCCC:129.144.52.38

50
Capitolo 3

Una nuova frontiera per Ipv6


(notizia tratta da www.punto-informatico.it)

Un passo epocale atteso da tempo, un salto in avanti gia` compiuto da


numerosi network e sistemi di rete ed ora uno sviluppo che viene integrato
ai server di root che governano il traffico Internet. Cosi` ICANN,
l'organismo che supervisiona il sistema dei domini, ha confermato
l'integrazione di IPv6 nei root server. Un evento definito appunto
"epocale".

Come noto, IPv6 e` la chiave che apre ad una dimensione pressoche'


illimitata di Internet, perche' consente una moltiplicazione esponenziale
degli indirizzi IP assegnabili. Il che significa, in sintesi, che lo
spazio IP fin qui gestito da paesi non-USA aumentera` in modo
assolutamente significativo al punto da consentire di "far entrare in
rete" dispositivi di qualsiasi natura e in pressoche' qualsiasi numero.
Per gli Stati Uniti il cosiddetto IP shortage non ha mai rappresentato un
problema perche', fin dagli albori della rete, nata proprio negli USA, lo
spazio IP che e` stato riservato agli States e` sempre stato molto piu`
ampio di quello internazionale.

IPv6 pero` significa anche una rete maggiormente stabile ed affidabile ed


e` questo il motivo per cui numerosissime istituzioni anche italiane,
principalmente accademiche e legate al mondo della ricerca, da lungo tempo
hanno lavorato per implementare IPv6 sulle proprie reti. IPv6 rappresenta
l'evoluzione del protocollo attuale, IPv4, che ha ormai quasi vent'anni e
che come detto inizia ad accusare grossi problemi di crescita.

L'annuncio che al nuovo traguardo giungono ora anche i root server,


arrivato nel corso del meeting ICANN in Malaysia che si protrarra` ancora
qualche giorno nella capitale malese, e` stato dato da Vinton Cerf,
chairman dell'ICANN nonche' co-autore dei protocolli TCP/IP, che hanno
reso possibile lo sviluppo della rete.

Cerf ha spiegato che l'introduzione di IPv6 "e` un passo molto, molto


importante" che apre le porte ad una Internet piu` globale capace di
rispondere maggiormente alla rapidissima crescita nelle applicazioni di
rete e nelle tecnologie che si vanno sviluppando in tutto il Mondo.

Il chairman ICANN ha anche spiegato che oggi quasi due terzi degli
indirizzi Internet disponibili sono gia` utilizzati. Rispetto a questa
situazione, ha sottolineato Cerf, IPv6 consentira` di aumentare questi
numeri di almeno 25mila miliardi di volte. Una dimensione pressoche'
infinita. Per garantire continuita` e mettersi al riparo da eventuali problemi che
dovessero insorgere, ha concluso Cerf, IPv4 continuera` a correre
parallelo a IPv6 per circa 20 anni.

51
4
Protocolli di routing

4.1 Introduzione
Il processo di smistamento delle informazioni da una rete all'altra mediante percorsi di rete specifici
e ben definiti prende il nome di routing. Esso agisce sul livello network (livello di rete) del
modello OSI. I router usano delle metriche per determinare il percorso di rete più conveniente per
un pacchetto. Per svolgere il proprio lavoro un router ha bisogno di conoscere due informazioni: la
tabella di routing che contiene tutti i percorsi di rete e i next-hops, ossia i salti successivi che il
pacchetto deve compiere sul segmento di rete per arrivare a destinazione, e i protocolli di routing
che analizzeremo nel corso di questo capitolo. Ecco le principali metriche usate dai protocolli di
routing:

– Path Length (lunghezza del percorso e conteggio dei salti)


E' la metrica più comune ed usata e misura il numero di router che devono essere attraversati da un
pacchetto prima di arrivare a destinazione.

– Reliability (Affidabilità)
L'affidabilità, riferita agli algoritmi di routing, dei collegamenti di rete. Alcuni collegamenti di rete
potrebbero interrompersi più spesso di altri e dopo questi fallimenti alcuni collegamenti di rete
potrebbero essere riparati più facilmente e velocemente degli altri links.

– Delay (ritardi di routing)


I ritardi di routing si riferiscono all'intervallo di tempo richiesto per trasferire un pacchetto dalla
sorgente alla destinazione lungo il segmento di rete. Questi ritardi dipendono da molti fattori,
facciamo degli esempi: lo stato della banda di alcuni collegamenti di rete, i problemi di rete e le sue
congestioni o la distanza fisica da essere percorsa. Visto che i ritardi di routing sono frequenti,
questa, è una comune e utile metrica.

– Bandwidth (volume del traffico)


La lunghezza di banda si riferisce alla capacità di un collegamento di smistare traffico ed
informazioni.

– Load (carico di lavoro)


Il carico si riferisce ad una risorsa di rete , come un router, quando è occupata. Il carico di lavoro
può essere calcolato in molti modi: calcolare l'utilizzazione della CPU e i pacchetti processati ogni
secondo.

52
Capitolo 4

– Communication Cost (costi di comunicazione)


Il costo della comunicazione è un'altra importante metrica, specialemente perchè molte aziende non
si preoccupano di inviare un paccheto nel minor tempo possibile bensì utilizzare una rete privata ad
una pubblica. In questo modo riescono a risparmiare molto in termine di costi.

4.2 Autonomous Systems


Con la strepitosa crescita di Internet anche i router hanno sofferto di gravi problemi di scalabilità e
di affidabilità. Era impossibile , dunque, gestire tutto il traffico internet con un solo router. Si pensò
di creare più routers che potessero gestire autonomamente il loro traffico di rete all'interno della loro
rete ma comunque connessi con gli altri router della grande rete Internet. A questa evenienza
nacquero i Sistemi Autonomi (da ora in poi chiamati AS) o Autonomous Systems. Essi non sono
altro che un insieme di routers che fanno uso di un protocollo (Interior Gateway Protocol - IGP) e di
un'unica comune metrica per instradare le informazioni all'interno dell'AS e di un altro protocollo
(Exterior Gateway Protocol - EGP) per instradare i pacchetti tra gli AS.

Esistono tre differenti tipi di AS:

1. AS Terminali: hanno un unico collegamento con un altro AS; questo e` un AS che portera`
solo traffico locale e, dal punto di vista dell'instradamento, puo` essere visto come un'estensione
dell'altro AS. Infatti la maggior parte di reti con una singola connessione Internet non
possiedono un unico numero di AS ed i loro indirizzi di rete vengono trattati come facenti parte
del AS a cui sono connesse

2. AS multiresidenti: hanno collegamenti con piu` di un AS, ma rifiutano di instradare traffico in


transito, sebbene i loro IGP potrebbero instradare il traffico attraverso molteplici AS. Tipica
configurazione di reti appartenenti a grandi aziende con molte connessioni Internet ridondanti
che non intendono trasportare traffico di computer esterni all'azienda.

3. AS di transito: ha collegamenti con piu` di un AS e lascia che i suoi router siano utilizzati per
portare traffico proveniente da altri AS e diretto verso altri AS (transit traffic). I piu` grandi ISP
sono AS di transito.

Ogni AS è identificato da un numero unico al mondo assegnato dall'Internet Network Information


Center (interNIC). Il primo e più importante nonché fondamentale AS è il core di Internet
identificato dal numero 0.

4.3 Algoritmi di routing


Gli algoritmi di routing sono in grado di smistare le informazioni automaticamente all'interno della
rete senza nessun intervento manuale da parte dell'utente. Le sue funzioni sono sostanzialmente
quelle di evitare loop (ciclo infinito di smistamento dello stesso pacchetto a più nodi), buchi neri (si
verificano quando viene inviato un pacchetto ad un nodo che non sa come utilizzarlo e lo scarta) e
limitare il consumo della banda, la cosidetta tecnica di load balancing (bilanciamento del traffico) .
Una delle peculiari caratteristiche di un algoritmo di routing è sicuramente quello di essere in grado

53
Protocolli di routing

di calcolare il percorso più conveniente per smistare un pacchetto ad un nodo. Analizziamo le


principali caratteristiche di un algoritmo di routing:

– Semplicità
L'algoritmo deve essere particolarmente efficiente e non deve procurare un alto dispenso di risorse
per poter funzionare.

– Robustezza
L'algoritmo deve funzionare su qualsiasi rete generica senza dare nessun problema. Esso deve
supportare cambiamenti di topologia e deve avere le seguenti caratteristiche:

1. Fault Detection: l'algoritmo deve essere in grado di accorgersi della presenza di guasti
isolandoli automaticamente.
2. Autostabilizzazione: l'algoritmo deve essere in grado di supportare nuovi percorsi o aggiunte di
nuovi nodi alla rete senza nessun intervento da parte di terzi.
3. Robustezza Bizantina: l'algoritmo sarà in grado di accorgersi di eventuali malfunzionamenti
della rete anche se sembra tutto funzionare alla perfezione. Questo avviene quando nessun nodo
sembra avere dei problemi o è guasto ma quando ci sono delle manomissioni nei percorsi
abituali di routing.

– Ottimizzazione
L'algoritmo deve essere in grado di scegliere la strada migliore da far percorrere ad un pacchetto per
arrivare al nodo di destinazione.

– Stabilità
L'algoritmo deve poter raggiungere uno stato di stabilità nel quale il routing non deve più cambiare
escluso se si verificano dei cambiamenti di topologia o di metriche di routing.

– Equità
L'algoritmo deve essere in grado di garantire una certà equità tra tutti i nodi della rete, tutti
funzionanti e nessuno danneggiato o guasto.

Classificazione degli algoritmi di routing

– Statici
In questo tipo di algoritmo le tabelle di routing vengono gestite e modificate dall'amministratore di
rete e non possono cambiare per nessun motivo sino a quando lo stesso amministratore non decide
di apportare delle modifiche.

– Dinamici
Gli algoritmi dinamici sono caratterizzati dal fatto che le tabelle di routing vengono aggiornate
dinamicamente all'aggiunta di nuovi nodi e/o reti e non necessitano dell'intervento
dell'amministratore di rete.

– A percorso singolo o multiplo


Alcuni algoritmi supportano più percorsi per una stessa destinazione.

54
Capitolo 4

– Gerarchici
Fanno parte di questa categoria tutti i tipi di routing su grosse reti in grado di dividere il loro carico
di lavoro con più router all'interno della rete.

– Link State o Distance Vector


Il protocollo link state (conosciuto anche come shortest path first) trasferisce tutte le informazioni di
routing a tutti i nodi. Ogni router invia solo la porzione di tabella che descrive lo stato dei suoi link.
Gli algoritmi del tipo distance vector inviano tutta o parte della tabella ai soli router vicini. Quindi
link state spedisce piccoli aggiornamenti a tutti, distance vector spedisce grossi aggiornamenti ma
solo ai router vicini : i link state richiedono più risorse hardware necessarie (CPU e memoria)
rispetto ai distance vector, ma sono meno propensi ai routing loop.

4.4 Exterior Gateway Protocol (EGP)


L'obiettivo principale di questo protocollo è quello di attivare uno o più AS affinchè avvenga uno
scambio di informazioni sulla raggiungibilità su Internet o informazioni di routing. Simuliamo una
connessione EGP. Prima di scambiare le informazioni di routing vere e proprie vengono scambiati i
messaggi Hello and I-Heard-You. Questi messaggi connettono due o più gateway EGP per
cominciare la comunicazione. I computer che comunicano tramite EGP vengono chiamati
neighbors (vicini). Lo scambio dei messaggi Hello and I-Heard-You prende il nome di acquisizione
dei vicini o acquiring a neighbor.
Dopo che un vicino è stato acquisito, le informazioni di routing sono richieste mediante un poll. Il
neighbor risponde con un pacchetto con le informazioni sulla raggiungibilità e richiede un
messaggio di update. Il sistema locale aggiunge i routes del messeggio update nella propria tabella
di routing. Se il neighbor ha dei problemi a rispondere ai successi tre messaggi di polls, il sistema si
rende conto che il neighbor ha dei problemi o è down e scarta le informazioni di routing relativo a
quest'ultimo dalla propria tabella di routing. Contrariamente, il neighbor risponde con successo a
tutti e tre i messaggi, risponde con un altro pacchetto di conferma e il processo continua.
Analizziamo i vari messaggi EGP.

Neighbor Acquisition Message

Figura 1: Formato del messaggio di acquisizione dei vicini

Descrizione:

I messaggi di acquisizione dei vicini sono usati dai gateway esterni ed interni
per diventare i vicini l'un con l'altro.

55
Protocolli di routing

EGP Version #

Type

Code

Code = 0 Richiesta Neighbor Acquisition


Code = 1 Risposta Neighbor Acquisition
Code = 2 Rifiuto di una Neighbor Acquisition
Code = 3 Messaggio Neighbor Cease (senza fine)
Code = 4 Approvazione di un Neighbor Cease

Checksum

La checksum EGP è un campo di 16 bit e comincia con il campo che


identifica il numero della versione. Per il calcolo della checksum, il
campo dovrebbe essere fissato sul valore zero.

Autonomous System #

Questo numero di 16-bit identifica l'autonomous system contenente


il gateway che è la sorgente del messaggio.

Info

Per i messaggi di rifiuto, ecco le motivazioni:

0 Non specificato
1 Fuori dalla spazio massimo della tabella
2 Proibito dall'amministratore

Per i messaggi Cease, ecco le motivazioni date al neighbor:

0 Non specificato
1 Caduta
2 Non sono richiesti longer

Altrimenti, questo campo, deve essere settato col valore zero.

Identification Number

Un numero di identificazione che aiuta a soddisfare le risposte e le richieste.

56
Capitolo 4

Messaggi Hello / I Heard You

Figura 2: Formato del messaggio Hello / I heard you

Descrizione:

I vicini esterni usano questo tipo di messaggio per determinare la


la connettività del vicino. Quando un gateway riceve un messaggio EGP
Hello dal vicino, esso dovrebbe rispondere con un messaggio EGP
I Heard You.

EGP Version #

Type

Code

Code = 0 per il messaggio Hello


Code = 1 per il messaggio I Heard you (ti ho sentito)

Checksum

La checksum EGP è un campo di 16 bit e comincia con il campo che


identifica il numero della versione. Per il calcolo della checksum, il
campo dovrebbe essere fissato sul valore zero.

Autonomous System #

Questo numero di 16-bit identifica l'autonomous system contenente


il gateway che è la sorgente del messaggio.

Sequence Number

Un numero di sequenza che aiuta a soddisfare le risposte e le richieste.

57
Protocolli di routing

Status

0 Nessuno stato
1 Mi sembri raggiungibile
2 Mi sembri irragiungibile a causa del protocollo di raggiungibilità del vicino
3 Mi sembri irragiungibile a causa delle informazioni di raggiungibilità della rete
4 Mi sembri irragiungibile a causa di problemi con la mia interfaccia di rete

Last Poll Id Number

Il numero di identificazione del più recente messaggio poll ricevuto


dal vicino a cui questo messaggio è stato spedito.

Minimum Polling Interval

Il gateway non dovrebbe essere votato per i messaggi ai vicini


più di una volta in questo numero di minuti.

NR POLL Message

Figura 3: Formato del messaggio POLL

Descrizione:

Un gateway che vuole ricevere un messaggio NR (neighbor) da un gateway


esterno manderà un messaggio NR Poll. Ogni gateway citato nel messagio NR
avrà un'interfaccia sulla rete che risiede nel campo network dell' IP.

EGP Version #

Type

Code

58
Capitolo 4

Checksum

La checksum EGP è un campo di 16 bit e comincia con il campo che


identifica il numero della versione. Per il calcolo della checksum, il
campo dovrebbe essere fissato sul valore zero.

Autonomous System #

Questo numero di 16-bit identifica l'autonomous system contenente


il gateway che è la sorgente del messaggio.

Identification Number

Un numero di identificazione che aiuta a soddisfare le risposte e le richieste.

IP Source Network

Ogni gateway citato nel messaggio NR avrà un'interfaccia sulla rete che
risiede nel campo network dell' IP. Esso è rappresentato da un byte di
un numero di rete seguito da due bytes di zero per le reti di classe A,
due bytes di un numero di rete seguito da un byte di zero per le reti di
classe B, e tre bytes di un numero di rete per le reti di classe C.

Interval

L'intervallo di polling in minuti.

EGP Error Message

Figura 3: Formato di un messaggio di errore

Descrizione:

Un messaggio di errore è mandato in risposta ad un altro messaggio EGP


che ha una errata checksum o ha un valore non corretto in uno dei suoi
campi.

59
Protocolli di routing

EGP Version #

Type

Code

Checksum

La checksum EGP è un campo di 16 bit e comincia con il campo che


identifica il numero della versione. Per il calcolo della checksum, il
campo dovrebbe essere fissato sul valore zero.

Autonomous System #

Questo numero di 16-bit identifica l'autonomous system contenente


il gateway che è la sorgente del messaggio.

Sequence Number

Un numero di sequenza che aiuta a soddisfare le risposte e le richieste.

Error Type

Il tipo del messaggio EGP che era errato.

Error Code

Il codice del messaggio EGP che era errato.

Identification number of erroneous message

Il numero di sequenza del messaggio EGP che era errato.

Reason

Ecco le motivazioni di un messaggio Error EGP. Sono definite le seguenti:

0 - non specificato
1 - Errata checksum EGP
2 - Errato indirizzo ip della sorgente in un messaggio NR Poll o in Risposta
3 - EGP Type e Code non definito
4 - Ricevuto un poll da un non-vicino

60
Capitolo 4

5 - Ricevuti troppi messaggi NR non richiesti


6 - Ricevuti troppi poll
7 - Conteggi errati nel messaggio NR ricevuto
8 - Nessuna risposta ricevuta ad un messaggio NR poll
9 - Non tutti i frammenti del messaggio NR sono stati ricevuti

4.5 Border Gateway Protocol (BGP)

Il Border Gateway Protocol è stato concepito come valida alternativa e affidabile sostituto all'ormai
obsoleto, per l'enorme mole di dati che i routers erano costretti a scambiare, EGP, analizzato nel
paragrafo precedente. EGP , infatti, aveva moltissimi problemi di natura architetturale. Esso:
– fu creato per soddisfare le esigenze di un'unica grande rete , ARPANET, e quindi in maniera
molto specifica,
– riesce a lavorare in modo adeguato soltanto su reti ad albero semplici e non su reti a maglia
complesse (cioè quelle in cui si verificano dei cicli),
– non si adatta velocemente ai cambiamenti che possono essere apportati alla topologia di rete,
– non è per niente sicuro. Infatti tutti i router che utilizzavano EGP erano sempre soggetti ad
attacchi di terzi in quando un maleintenzionato poteva far credere qualsiasi cosa ad un router
EGP e avere completo accesso ai meccanismi di routing e quindi all'intera rete.
Con l'avvento del BGP abbiamo i seguenti miglioramenti:
– consente l'uso del CIDR (Classless Inter Domain Routing). Quest'ultimo elimina i concetti di
indirizzi di classe A,B e C. Ogni indirizzo è considerato come un indirizzo che contiene una
parte host e una parte rete. Non esiste una sottorete in base ai primi bit dell'indirizzo. Il CIDR
supporta inoltre l'aggregazione dei percorsi. Un singolo percorso può rappresentare lo spazio di
indirizzamento di migliaia di percorsi effettivi. L'uso di una singola voce di routing per
rappresentare varie reti può aiutare a rendere le tabelle di routing, base di Internet, più piccole e
quindi più efficienti.
– I router BGP appartenenti ad Autonomous Systems si scambiano informazioni mediande l'uso
del TCP sulla porta 179. In questo modo abbiamo connessioni più affidabili e un minimo
controllo degli errori ,
– BGP è un protocollo path vector:
– risolve i problemi di ciclicità di EGP,
– vengono elencati tutti gli AS da percorrere per arrivare da una sorgente a una destinazione.

Nei prossimi paragrafi analizzeremo il suo header e i suoi messaggi.

61
Protocolli di routing

Message Header Format

Figura 4: Header del messaggio BGP

Marker (identificatore):

Questo campo di 16 bit contiene un valore che il ricevente del


messaggio può predire. Se il tipo del messaggio è OPEN, oppure
non richiede informazioni di autenticazione, allora il Marker
deve essere settato con tutti uno. Il marker può essere usato per
determinare la perdita di sincronizzazione tra due punti BGP
e per autentificare i messaggi BGP ricevuti.

Length (lunghezza):

Questo campo di 2 bit indica la lunghezza totale del messaggio,


includendo l'header, in ottetti. Il valore del campo Length deve
sempre essere minimo 19 e non più di 4096 e potrebbe essere
ulteriormente forzato, secondo il tipo di messaggio.

Type (tipo):

Questo campo indica il tipo di messaggio. Ecco i tipi gia' definiti:

1 – OPEN (aperto)
2 – UPDATE (aggiornamento)
3 – NOTIFICATION (notifica)
4 – KEEPALIVE (resta in vita)

OPEN Message Format

Dopo che la connessione è stata stabilita utilizzato la porta TCP 179 citata nel paragrafo introduttivo
al BGP, il primo messaggio mandato da entrambi i lati della connessione è un messaggio OPEN o di
apertura. Se il messaggio OPEN è accettabile, un messaggio keepalive (resta in vita) è mandato
indietro. Una volta che l'apertura è stata confermata, i messaggi UPDATE, KEEPALIVE e
NOTIFICATION possono essere scambiati.

62
Capitolo 4

Figura 5: Formato del messaggio OPEN

Version (versione):

Questo campo indica la versione del protocollo usato dal messaggio.


La versione corrente è la 4.

My Autonomous System:

Questo campo indicata il numero di Autonomous System del mittente.

Hold Time (tempo di sospensione):

Questo campo indica l'intervallo massimo di tempo in secondi tra


i successivi messaggi UPDATE,KEEPALIVE e NOTIFICATION.

BGP Identifier (identificatore BGP):

Indica l'identificatore BGP del mittente. Viene posto uguale all'indirizzo


IP del gateway BGP. Il valore di questo identificatore è determinato
alla partenza ed è lo stesso per tutte le interfacce locali e per ogni nodo
BGP.

Optional Parameters Length (lunghezza dei parametri opzionali):

Indica la lunghezza dei parametri opzionali in ottetti. Se il valore di


questo campo è uguale a zero, non sono sono presenti parametri
opzionali.

Optional Parameters:

Questo campo potrebbe contenere una lista di tutti i parametri


opzionali dove ogni parametro è ottenuto come una trinomio
dei valori Parameter Type, Parameter, Length, Parameter Value

63
Protocolli di routing

0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
| Parm. Type | Parm. Length | Parameter Value (variable)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

Parameter Type (tipo di parametro) è un campo di un ottetto che


senza ambiguità identifica i parametri individuali. E' un campo che
contiene la lunghezza del Parameter Value in ottetti. Parameter Value
è campo a lunghezza variabile che è interpretato secondo il valore
del campo Parameter Type.

A seguire alcuni parametri opzionali:

a) Authentication Information (Parameter Type 1):

Questo parametro opzionale potrebbe essere usato per autentificare


il nodo BGP. Il campo Parameter Value contiene un ottetto dell' Authentication
Code seguito da una lunghezza variabile dell' Authentication Data.
0 1 2 3 4 5 6 7 8
+-+-+-+-+-+-+-+-+
| Auth. Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Authentication Data |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Authentication Code:

Questo campo indica il meccanismo di autenticazione che


sta per essere usato. Ogni volta che un meccanismo di autenticazione
è specificato per un uso all'interno del BGP, tre cose devono essere incluse
nello specifico:

– il valore dell'Authentication Code che indica l'uso del meccanismo,


– la forma e il significato dell'Authentication Data,
– l'algoritmo per computare il valore dei campi Marker (identificatore).

Dobbiamo notare che un altro meccanismo di autenticazione potrebbe


essere usato nello stabilira una connessione al livello trasporto.

Authentication Data:

La forma e il signifacato di questo campo è un campo a lunghezza


variabile dipendente dall' Authentication Code.
La lunghezza minima del messaggio OPEN è 29 ottetti (incluso l'header del
messaggio)

64
Capitolo 4

UPDATE Message Format

I messaggi UPDATE sono usati per traferire informazioni di routing tra nodi BGP. L'informazione
contenuta nel pacchetto UPDATE può essere usata per costruire un grafico descrivendo le relazioni
e i collegamenti che ci sono tra i vari Autonomous Systems.

Figura 6: L'header del messaggio Update

Unfeasible Routes Length (lunghezza dei routes ineseguibili):

Questo intero di 2 ottetti indicata la lunghezza totale del campo


Withdrawn Routes in ottetti.

Un valore 0 indicata che nessun route è stato ritirato dal servizio


e che il campo Withdrawn Routes non è presente nel messaggio
Update.

Withdrawn Routes (routes ritirati):

Campo di lunghezza variabile che contiene una lista di prefissi


di indirizzi IP per i routes che sono stati ritirati dal servizio. Ogni
prefisso dell'indirizzo IP è visto come un binomio <lenght, prefix>,
i cui campi sono descritti a seguire:

+---------------------------+
| Length (1 octet) |
+---------------------------+
| Prefix (variable) |
+---------------------------+

The use and the meaning of these fields are as follows:

a) Length:
Indica la lunghezza in bits del prefisso dell'indirizzo IP.
Una lunghezza zero indica un prefisso che uguaglia tutti gli
indirizzi IP.

b) Prefix:
Il campo Prefix contiene i prefissi degli indirizzi IP.

65
Protocolli di routing

Total Path Attribute Length (lungezza totale dell'attributo del percorso):

Campo di 16 bit che identifica la lunghezza totale del campo path


Attributes in ottetti. Il suo valore deve permettere la lunghezza del
campo Network Layer Reachability per essere determinato come segue:

Un valore 0 indica che nessun campo Network Layer Reachability


Information è presente in questo messaggio update.

Path Attributes (attributi del percorso):

Una sequenza di attributi del percorso a lunghezza variabile


è presente in ogni UPDATE. Ogni attributo di percorso è visto
come un trinomio <attribute type, attribute length, attribute value>
di lunghezza variabile.

Network Layer Reachability Information (informazioni della raggiungibilità del livello di


rete)

Questo campo a lunghezza variabile contiene una lista di tutti i prefissi degli
indirizzi IP. La lunghezza in ottetti del Network Layer Reachability non è codificata
esplicitamente ma può essere calcolata come:

UPDATE message Length - 23


Total Path Attributes Length
Unfeasible Routes Length

dove la lunghezza del messaggio Update è il valore espresso nella lunghezza


dell'header BGP, Total path Attribute e Unfeasible Routes Lenght sono i valori espressi nella parte
variabile del messaggio UPDATE e il valore 23 è la lunghezza combinata di tutti e 3 i campi più
l'header BGP.

KEEPALIVE Message Format

BGP non usa nessun protocollo di trasporto e meccanismi keep-alive offerti dal TCP per
determinare se un nodo è raggiungibile o meno. Vengono però scambiati messaggi Keepalive fra
router BGP vicini a intervalli più frequenti rispetto a quelli imposti dall'Hold Time in modo da
assicurare che i tempi di sospensione (hold-time) non scadano. I messaggi keepalive vengono
spesso scambiati a intervalli 1/3 dell'hold time. Un messaggio keepalive contiene solo informazioni
relative all'header BGP.

NOTIFICATION Message Format

Un messaggio di notifica è spedito quando viene rilevato un errore. La connessione BGP è chiusa
immediatamente dopo averla instaurata.
Oltre all'header BGP i messaggi di notifica contengono anche i seguenti campi:

66
Capitolo 4

Figura 7: Il formato di un messaggio di notifica

Error Code:

Questo ottetto indica il tipo di Notifica. Ecco quali sono i codici di


errore definiti:

Error Code Nome simbolico

1 Message Header Error


2 OPEN Message Error
3 UPDATE Message Error
4 Hold Timer Expired (Hold Timer scaduto)
5 Finite State Machine Error
6 Cease

Error subcode:

Questo ottetto fornisce informazioni più specifiche sulla


natura dell'errore segnalato. Ogni errore potrebbe avere uno
o più Subcodici di Errore associati con esso.

Se non è specificato nessun Error Subcode allora il valore zero


è quello usato per questo campo.

Message Header Error subcodes:

1 - Connection Not Synchronized (connessione non sincronizzata)


2 - Bad Message Length (lunhezza errata del messaggio)
3 - Bad Message Type (tipo errato di messaggio)

OPEN Message Error subcodes:

1 - Unsupported Version Number (numero di versione non supportato).


2 - Bad Peer AS (Nodo AS errato)
3 - Bad BGP Identifier (identificatore BGP errato)
4 - Unsupported Optional Parameter (parametro opzionale non
supportato)
5 - Authentication Failure (autenticazione fallita)
6 - Unacceptable Hold Time (valore dell'Hold Time inaccettabile)

UPDATE Message Error subcodes:


67
Protocolli di routing

1 - Malformed Attribute List (lista degli attributi non corretto)


2 - Unrecognized Well-known Attribute (errore nel riconoscimento di un
ben-conosciuto attributo)
3 - Missing Well-known Attribute (perdita di un attributo ben-
conosciuto)
4 - Attribute Flags Error.
5 - Attribute Length Error (errore nella lungezza dell'attributo)
6 - Invalid ORIGIN Attribute (attributo di origine non valido)
7 - AS Routing Loop (loop nel routing dell'AS)
8 - Invalid NEXT_HOP Attribute (Attributo NEXT_HOP non valido)
9 - Optional Attribute Error (errore nell'attributo opzionale)
10 - Invalid Network Field (campo rete non valido)
11 - Malformed AS_PATH (Percorso dell'AS non corretto)

Data:

Questo campo a lunghezza variabile è usato per diagnosticare


la ragione per la notifica (messaggio Notification). Il contenuto di
questo campo dipende dagli Error Code e Error Subcode.

E' facile calcolare la lunghezza di questo campo con la semplice


formula:

Message Length = 21 + Data Length

La lunghezza minima del messaggio Notification è di 21 ottetti.

4.6 Routing Information Protocol (RIPv1)

Il Routing Information Protocol e' spesso implementato con il pacchetto routed distribuito con i
software di Berkley versione 4.3. Tuttavia ci sono moltissimi altri pacchetti che utilizzano
l'implementazione del RIP e per questo motivo cercheremo di chiarire brevemente il suo
funzionamento, tralasciando le varie versioni di software che lo implementano. I pacchetti RIP sono
trasmessi all'interno di una rete attraverso datagrammi User Datagram Protocol (UDP), trasformati e
trasferiti successivamente in datagrammi IP. Il RIP invia e riceve datagrammi UDP attraverso la
porta UDP 250. I datagrammi RIP sono generalmente spediti attraverso un processo di broadcast a
tutti i segmenti di rete. Sono specificamente indirizzati a tutti gli host della rete, seguendo la
modalità point-to-point e attraverso le reti multi accesso che non utilizzano broadcast, usando
l'indirizzo IP del router. I routers generalmente usano il RIP nella modalità active mode cioè
scambiando le loro tabelle vector distance e aggiornandole tenendo conto di quelle dei vicini. I nodi
finali, poi, sono messi in modalità passive o silent mode e fanno lo stesso procedimento di quelli
posti in active mode senza però scambiarsi le tabelle.
Il RIP utilizza due tipi di pacchetti: request (richiesta) e response (risposta)

68
Capitolo 4

Un pacchetto di tipo request viene spedito da un router per chiedere al vicino o di spedire una parte
della sua tabella distance vector (se il pacchetto ha gia' una destinazione) oppure tutta la tabella (se
il pacchetto non ha una destinazione e bisogna assegnarla).

Un pacchetto di tipo response viene spedito da un router per annunciare la sua tabella distance
vector seguendo queste modalità:

– ogni 30 secondi;
– in risposta a un pacchetto di richiesta (response to request);
– quando la tabello distance vector cambia.

Le due modalità, attiva e passiva, ricevono insieme tutti i pacchetti response e aggiornano le loro
tabelle distance vector contemporaneamente.

Analizziamo ora il formato di un pacchetto RIP.

Figura 8: Il formato di un pacchetto RIP

Ogni datagramma contiene un comando, un version number e un possibile argomento. Ecco la lista
di alcuni comandi:

1 - request Una richiesta per un vicino di spedire tutta o solo


una parte della sua tabella di routing.

2 - response Un messaggio che contine tutta o solo una parte della


tabella di routing del mittente. Questo messaggio potrebbe
essere spedito in risposta ad una richiesta o ad un poll, o
potrebbe essere un messaggio di aggiornamento generato
dal mittente.

3 - traceon Messaggio obsoleto che nella maggior parte dei casi viene
ignorato.

4 - traceoff Messaggio obsoleto che nella maggior parte dei casi viene
ignorato.

5 - reserved Questo messaggio è usato dalla Sun Microsystems per i

69
Protocolli di routing

propri usi. Se ci saranno nuovi comandi da aggiungere, essi devono essere ordinati in modo
sequenziali, dovrebbero, dunque, iniziare con il valore 6. I messaggi che contengono questo
camando potrebbero tranquillamente essere ignorati dalle implementazioni che scelgono di non
rispondere a questo tipo di comandi.

Per la richiesta e la risposta, la restante parte del datagramma contiene una lista di destinazioni con
le informazioni su ognuno di esse. Ogni voce in questa lista contiene una destinazione di un host o
di una intera rete o una metrica per quest'ultima.

Le limitazioni del RIP


Il protocollo RIP ha molte limitazioni e proprio per questo motivo deve essere considerato soltanto
un protocollo di routing adatto a situazioni non molto complesse. Ecco una lista di altri possibili
problemi che possono scaturire dall'uso del RIP:

– Il RIP può essere usato solo su reti che non hanno un numero maggiore a 15 hops (salti) per non
essere esposti ai tanti problemi implementativi del protocollo.

– Il protocollo ricorre al metodo del conteggio all'infinito per risolvere alcuni problemi di routing.
Se un sistema ha molte reti e si arriva ad avere un problema del genere il conteggio all'infinito
può creare tantissimi problemi a livello di banda utilizzata e di risorse hardware.

– Il protocollo ricorre a delle metriche prefissate per definire i propri percorsi di routing. Questa
non è assolutamente una buona cosa infatti nel caso in cui sorga il problema di cambiare in
tempo reale un percorso il protocollo non è in grado di farlo. In questo modo avremo ulteriore
consumo di tempo-banda e soprattutto di affidabilità e professionalità dei nostri servizi.

4.6.1 Routing Information Protocol (RIP)


version 2
Il Routing Information Protocol versione 2 (RIP2) è stato sviluppato con l'intento di implementare e
migliorare le funzioni che già permetteva il RIP1 cercando di risolvere le limitazioni che lo
riguardavano, sopra discusse. Ecco una lista delle funzionalità aggiunte alla versione 2 del
protocollo:

– Maschere di sottorete: nel RIPv2 gli avvisi contengono maschere di sottorete per ogni indirizzo
di rete. In questo modo ogni amministratore di rete può implementare maschere di sottorete a
lunghezza variabile e il CIDR nelle loro reti.

– Autenticazione: tutti i percorsi che utilizzano il RIPv2 sono provvisti di una password affinchè i
percorsi di routing vengano accettati soltanto dai router preferiti della rete. Se un pacchetto RIP
contine una password che non corrisponde a quella preimpostata, il percorso non viene accettato
e il pacchetto scartato.

70
Capitolo 4

– Annunci multicast: invece di usare i poco efficienti annunci con broadcast, il RIPv2 usa
l'indirizzo di multicast 224.0.0.9 per l'invio dei messaggi di routing.

– Tag dei percorsi: questi permettono di distinguere i percorsi RIP interni da quelli appresi da
altri protocolli gateway interni o esterni. I tag dei percorsi possono venire configurati per
distinguere l'origine dei percorsi esterni.

4.6.2 Open Shortest Path First (OSPF)

L'Open Shortest Path First (OSPF) è un protocollo di routing del tipo link-state. E' stato creato per
lavorare internamente ad un singolo Autonomous System. Ogni router OSPF gestiste un identico
database che descrive la topologia dell'Autonomous System. Da questo database, una tabella di
routing viene calcolata costruendo il percorso di tipo "shortest-path" cioè seguendo il percorso più
corto per arrivare a destinazione. OSPF fornisce anche il supporto per i percorsi multipli. Esso
indirizza i pacchetti del tipo IP solamente sull'indirizzo IP di destinazione trovato nell'header del
pacchetto IP. I pacchetti, poi, sono indirizzati così come sono (as is). Non sono incapsulati negli
headers di altri protocolli quando arrivano all'Autonomous System. OSPF è un protocollo del tipo
"routing protocol". Riconosce velocemente qualsiasi cambiamento di topologia nell'AS e calcola il
nuovo percorso dopo un periodo di convergenza. Questo periodo di convergenza è breve e necessita
soltanto di una piccolissima parte del traffico di routing.

L'algoritmo SPF

Il protocollo di routing Shortest Path First (SPF) sta' alla base di ogni operazione di quello OSPF. E'
proprio per questo motivo che ne parliamo. Quando un router SPF è in funzione, inizializza le
proprie strutture dati riferite al protocollo di routing e aspetta per avere delle informazioni dai
protocolli di livello inferiore che la sua interfaccia sia funzionale. Quando un router si assicura che
la sua interfaccia è in funzione, usa il protocollo OSPF e più precisamente la funzione HELLO per
acquisire dei vicini. Il router manda un pacchetto di tipo HELLO ai suoi vicini e riceve i loro.
Per aiutare ulteriormente nell'acquisizione dei vicini, i pacchetti Hello sono usati anche come
indicatori keepalives per far conoscere ai vari routers che gli altri sono ancora funzionali.
Per quanto riguarda le reti che supportano più di due routers, il messaggio Hello elegge un router
designato per definire i vari percorsi di rete e un altro per i backup di quest'ultimi. I routers
designati permettono una riduzione del traffico di rete e la diminuzione della grandezza del database
che contiene le varie topologie di rete.
Quando i database di due o più router vicini sono sincronizzati, i routers vengono detti adiacenti.
Sulle reti multiaccesso, il router designato determina quali routers dovrebbero diventare adiacenti. I
router adiacenti controllano la distribuzione dei pacchetti che sono spediti e ricevuti soltanto su
quest'ultimi. Periodicamente tutti i routers si scambiano dei pacchetti per ricevere delle informazioni
sulle condizioni di ognuno.

71
Protocolli di routing

L'Header del pacchetto OSPF

Ogni pacchetto OSPF comincia con un header comune di 24 byte. Questo header contiene tutte le
informazioni necessarie per determinare tutto ciò che il pacchetto dovrebbe accettare per le
operazioni future. La figura 9 mostra come è composta l'header di un qualsiasi messaggio OSPF.
Passiamo ora a spiegarne ogni campo.

Figura 9: Il formato di un pacchetto OSPF

Version #

Indica la versione del protocollo. Oggi siamo arrivati alla versione 2 del protocollo,
quindi il valore sarà 2.

Type
Indica i vari tipi di pacchetti OSPF presenti.

Tipo Descrizione
________________________________
1 Hello
2 Database Description
3 Link State Request
4 Link State Update
5 Link State Acknowledgment

Packet length

Indica la lunghezza del protocollo in bytes. Questa lunghezza include anche


quella dell'header OSPF.

Router ID

Questo campo indica il Router ID del mittente del pacchetto. Nel protocollo OSPF, il
mittente e il destinatario di un pacchetto del protocollo di routing sono i due finali di
un'adiacenza.

72
Capitolo 4

Area ID

Un numero di 32 bit identifica quest'area alla quale il pacchetto appartiene. Tutti i


pacchetti OSPF sono associati ad una piccola area. Molte trasportano soltanto un solo hop. I
pacchetti che viaggiano su un virtual link sono etichettati con la backbone Area ID di
0.0.0.0.

Checksum

E lo stesso campo checksum del protocollo IP e contiene l'intero pacchetto,


partendo dall'header OSPF ma escludendo il campo d'autenticazione di 64 bit.

AuType
Identifica il tipo di autenticazione che deve essere usato per il pacchetto.

Authentication

Un campo composto da 64 bit usato per le modalità d'autenticazione.

L'header del pacchetto HELLO

I pacchetti HELLO sono pacchetti OSPF del tipo 1. Questi pacchetti sono spediti periodicamente su
tutte le interfacce per stabilire e mantenere i rapporti con il vicino. Inoltre, i pacchetti Hello sono
multicast su quelle reti fisiche avendo una capacità di multicast o broadcast e abilitando il
riconoscimento dinamico dei router vicini.

Tutti i router connessi ad una rete comune devono accettare alcuni parametri (Network

73
Protocolli di routing

mask, HelloInterval and RouterDeadInterval). Questi parametri sono incluso nei pacchetti Hello,
così che le differenze possono inibire la formazione di relazioni tra vicini.

Network mask

Indica la maschera di rete associata con questa interfaccia.

Options

Indica le funzioni opzionali supportate dal router

HelloInterval

Indica il numero di secondi tra i pacchetti Hello del router, l'intervallo tra un
pacchetto e l'altro.

Rtr Pri

Indica la priorità del router. Viene usato nell'elezione del Designated Router
(quello di backup). Se è settato a 0, il router non potrà essere eletto come un Designated Router.

RouterDeadInterval

Il numero di secondi che passa prima di dichiarare un router non in funzione.

Designated Router

Indica l'identità del Designated Router per questa rete, secondo il router principale.
Il Designated Router è identificato qui dall' indirizzo IP della sua interfaccia sulla rete. Settato sul
valore 0.0.0.0. se non ci sono Designated Router.

Backup Designated Router

Indica l'identità del router di backup (Backup Designated Router) per questa rete,
secondo il router principale. Il router di backup è identificato qui dall' indirizzo IP della sua
interfaccia sulla rete. Settato sul valore 0.0.0.0. se non ci sono Backup Designated Router.

Neighbor

Indica il Router ID di ogni router dai quali i pacchetti Hello sono stato visti
recentemente sulla rete. Recentamente significa negli ultimi secondi definiti nel campo
RouterDeadInterval.

74