Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NetworkLayer Odt
NetworkLayer Odt
Il livello di rete si occupa di prendere i segmenti dal livello di trasporto incapsularli in datagrammi e
inoltrarli attraverso la rete.
Nell’esempio H1 inoltra i
pacchetti al proprio router
vicino, R1, che si occuperà
di inoltrare il pacchetto di
H1 ai propri router limitrofi
guardando l’indirizzo IP,
allo stesso modo H2
ricerverà il pacchetto dal
router limitrofo R2.
Routing e forwarding
Il livello di rete per trasferire i pacchetti da un host a un’ altro utilizza 2 funzioni:
1. Forwarding, i router devono trasferire i pacchetti dalla giusta porta di ingresso al giusto
collegamento in uscita(decisione locale).
2. Routing, determina il percorso che il pacchetto deve seguire attraverso degli algoritmi di
routing.
All’interno del livello di rete possiamo distinguere quindi due diversi piani:
Control Plane
• Determina come il datagramma viene indirizzato dai router lungo il percorso end to end tra
mittente e destinatario.
1. Algoritmi tradizionali implementati nei router, cioè ogni router parla con il proprio vicino,
se ci sono guasti però non possono comunicare
2. SDN, approccio centralizzato, abbiamo un remote controller centralizzato a cui sono
collegati i router, attraverso dei control agents(CAs), quando ci sono problemi la
propagazione è rapida e in più calcola percorsi migliori.
ANALOGIA BUS
Control Plane, prima di mandare gli autisti a prendere le persone dobbiamo conoscere tutte le
fermate(nelle reti equivale alle remote networks); quindi il control plane del bus, sarà conoscere
tutti i percorsi e le fermate, in questa fase non abbiamo ancora caricato nè scaricato persone.
Data Plane, equivale a trasportare le persone(pacchetti) lungo il percorso dove transita il bus.
Per inoltrare i pacchetti i router estraggono dal campo intestazione il valore che utilizzano come
indice nella forwarding table, che punta alla giusta interfaccia di output.
Esempio:
Terminologia:
Analogalmente all’ handshake a 3 vie delle connessioni TCP anche alcuni protocolli di rete(ATM,
MPLS) stabiliscono che i router prima di scambiarsi dati debbano effettuare un handshake tra loro,
per impostare lo stato della connessione, prima che i pacchetti inizino a fluire tra di loro.
Le reti che effettuano la connessione sono dette “reti a circuito virtuale”(l’implementazione è molto
diversa dall’implementazione nel livello di trasporto, qui sono implementate sia nei router che nei
sistemi periferici e non solo ai bordi della rete), quelli che non la offrono sono dette “reti datagram”.
Modelli di servizio
Quali sono i servizi offerti dal livello rete? Questo dipende dal modello di servizio della rete che
definisce le caratteristiche del trasporto end-to-end di dati tra i sistemi periferici di invio e ricezione
Vediamo alcuni servizi che il protocollo di rete fornisce al livello di trasporto dell’host mittente
quando invia i segmenti:
11001000000101110001011010100001
I router non mantengono le informazioni di stato relative alle connessioni, ma solo quelle relative
all'inoltro. Le informazioni sulle tabelle di inoltro sono aggiornate ogni 1-5 minuti, per cui i
pacchetti possono arrivare in disordine.
Architettura router
Porte di ingresso
Il lookup avviene:
1. usando le informazione nell’header del pacchetto, si determina la giusta porta di uscita
guardando la tabella di instradamento
2. il forward è basato solo sull’indirizzo IP
3. il forward è basato su qualsiasi campo nell’header del pacchetto
Altri componenti
output ports, memorizza i datagrammi che sono stati inoltrati dallo switch fabric e ritrasmettono il
pacchetto sul collegamento, svolge la funzione di livello fisico, di collegamento proprio come le
porte di ingresso(solitamente, nei collegamenti bidirezionali, ogni porta di uscita verso un
collegamento è accoppiata con la porta di ingresso di quel collegamento, con una line card).
NB la funzione di lookup appena vista viene svolta anche dal routing processor, in router, per cui in
router con bassa capacità si richiama il routing processor.
Struttura di commutazione
La commutazione consiste nel trasportare un pacchetto da una porta di ingresso a una porta di
usctita, esistono varie tecniche per farlo:
2. Switching via bus, le porte di ingresso trasferiscono i dati alle porte di uscita tramite un bus
condiviso; tipicamente quando arriva un pacchetto dall’interfaccia di rete la porta di ingresso
aggiungerà un ettichetta con su scritto a che porta il bus deve inoltrare il pacchetto, come
abbiamo già visto in SO2 le porte di output riceveranno ciascuna il pacchetto, ma solo la
destinataria lo accoderà, e rimuoverà l’ettichetta. La larghezza di banda della commutazione
è limitata da quella del bus. NB possiamo trasferire un solo pacchetto per volta
3. Switching tramite una rete di interconnessione, abbiamo un percorso dedicato per ogni
possibile collegamento(interfaccia di input → interfaccia di output), senza alcun percorso
condiviso, quindi 2n bus, se 2 due pacchetti sono destinati alla stessa porta di output uno dei
due dovrà aspettare
Illustrazione 8: Ogni bus
verticale interseca ogni bus
orizzontale a un punto di
incrocio, che può essere
aperto o chiuso(al momento
della commutazione), dal
controller della struttura di
commutazione
Accodamenti
Supponiamo che la velocità dei collegamenti sia uguale d’appertutto.I pacchetti vengono trasferiti
da una coda a un’ altra e un pacchetto può essere trasferito dalla porta di ingresso alla porta di
uscita nello stesso intervallo di tempo per cui un pacchetto arriva a una porta di ingresso.
Il traffico sia sulle porte di input che quelle di output dipendono dalla quantità di traffico sulla rete,
dalla velocità della struttura di commutazione, e dalla velocità della linea. Queste code possono
crescere fino a occupare tutta la memoria del router, e in questo caso si possono verificare perdite di
pacchetti.
Se la struttura di commutazione non è sufficentemente rapida a smaltire i pacchetti si può verificare
accodamento sulle porte di input, ma se ci sono molte richieste quali scheduliamo prima?Qui
supponiamo FCFS
Illustrazione 9: HBO
Ricordiamo che possiamo trasferire differenti pacchetti in parallelo quando le porte di uscita sono
differenti, nel primo caso supponiamo che il commutatore decida di trasferire il primo pacchetto in
alto a sinistra, in questo caso il pacchetto in basso a sinistra dovrà attendere e anche il suo
predecessore, anche se ha l’uscita libera; un buon algoritmo di commutazione dovrebbe evitare
questo fenomeno, molto difficile!.
Porte di uscita
È possibile che il cavo di rete non riesca a smaltire i pacchetti in arrivo dalla struttura di
commutazione, per cui deve bufferizzarli, è molto importante avere:
1. uno schedulatore di pacchetti, avendo molti pacchetti accodati sulle porte di uscita
dobbiamo stabilire quale servire, possiamo utilizzare semplici FCFS, fino ai più sofisticati
WFQ
2. policy che stabiliscano cosa fare quando arriva un pacchetto che non può essere
bufferizzato(perchè pieno), bisogna decidere se buttare il nuovo arrivato o sostituirlo con un
uno nella coda; può risultare utile eliminare pacchetti dalla coda o marcarli, prima che la
coda si riempia in modo che il mittente sappia della congestione Tutte queste tipologie di
algoritmi sono detti ARQ.
SCENARIO TIPICO DI ERRORE
Supponiamo che la velocità di linea sulle porte di input/output abbiamo lo stesso tasso di
trasmissione Rline pacchetti al secondo e ci siano N porte di input e N porte di output, e supponiamo
che abbiano tutti la stessa lunghezza e arrivino tutti in modo sincrono, vale a dire, cioè mentre
inviamo un pacchetto può arrivarne un altro oppure nessuno. La struttura di commutazione ha tasso
di elaborazione di Rswitch e supponiamo che sia N volte più veloce di Rline In questo modo
l’accodamento sulle porte di input è trascurabile, poiché abbiamo N porte e possiamo elabolare N
volte più velocemente, supponiamo che arrivino N pacchetti tutti destinati alla stessa porta di uscita,
quindi al tempo richiesto per ricevere un singolo pacchetto ne arriveranno N nuovi, la porta di
uscita può trasmettere un solo pacchetto per volta(tempo di tramissione), e in questo intervallo
possono arrivare N nuovi pacchetti che devono essere accodati; la memoria potrebbe esaurirsi
velocemente.
all’istante t arrivano arrivano più pacchetti destinati alla porta di uscita superiore(rossa);
supponendo un commutatore che opera al triplo della velocità di linea nell’unità di tempo, cioè nel
tempo per ricevere un pacchetto, il commutatore ha già trasferito tutti e 3 i pacchetti nella porta di
uscita, il che potrebbe causare overflow.
Grandezza buffer
Esiste una regola empirica[RFC 3439], la quantità di memoria riservata al buffer dev’essere uguale
alla media dell’ RTT per la capacità del collegamento, es con un RTT di 250ms e un collegamento
da 1Gbps B= RTT * C =2,5 Gbit;
recenti studi suggeriscono che con N flussi TCP il buffer dev’essere grande così.
Algoritmi di scheduling
Ancora su scheduling
Priority, potrei avere due differenti code, una con i pacchetti ad alta priorità e una con i pacchetti a
bassa priorità, quando devo inoltrare un pacchetto mando prima quello a più alta priorità
PROTOCOLLO IP
1. IPv4
2. IPv6
• IP.
• Routing protocols, determina il percorso che i datagrammi seguiranno per arrivare a
destinazione, compila le tabelle di inoltro.
• ICMP, rileva errori nei datagrammi, e risponde a richieste di informazioni.
FORMATO DATAGRAMMI IPv4
• Versione, 4 bit, specificano la versione del protocollo IP del datagramma, poiché IPv6 e
IPv4 hanno formati differenti e i router devono sapere con cosa hanno a che fare.
• Lunghezza dell’intestazione, 4 bit, specificano dove inizianoi dati, poiche IP ha un campo
Opzioni, non obbligatorio; normalmente l’intestazione è lunga 20 byte.
• Tipo di servizio, distingue il tipo di datagramma, per esempio un datagramma riservato alla
telefonia o quelli che richiedono basso ritardo, ecc…
• Lunghezza del datagramma, 16 bit, lunghezza del datagramma in byte “dati più header”, al
massimo 2^16 -1 byte
• Identificatore, flag, spiazzamento hanno tutti a che fare con la frammentazione; IPv6 non
consente la frammentazione
• Tempo di vita, per evitare che diagrammi persi viaggino per sempre nella rete è stato incluso
il campo TTL a ogni router viene decrementato di 1 quando scende a 0 viene scartato.
• Protocollo, Indica il protocollo a livello di trasporto al quale i dati vanno passati, quest’
informazione è indicata da un valore numerico
• Checksum dell’intestazione, a ogni hop il router calcola il checksum, sommando i campi
dell’intestazione in complemento a 1.
• Indirizzi IP sorgente e destinazione, Indirizzo mittente e destinazione(calcolato con DNS)
• Opzioni, allungano il campo intestazione, tra le opzioni possiamo trovare “timestamp, router
da percorrere, percorsi da effettuare ecc…”
• Dati, segmento a livello di trasporto TCP/UDP; potrebbe trasportare anche altri tipi di
messaggi, come ICMP
Frammentazione datagrammi IP
A livello di collegamento non è sempre possibile trasportare pacchetti di qualsiasi dimensione, per
questo motivo si definisce un MTU, cioè la massima quantità di dati che un frame può trasportare.
MTU pone un limite ai pacchetti di rete, poiché da un router a un altro sono incapsulati in frame,
ciò pone delle difficoltà, un datagramma per arrivare a destinazione attraverserà molti
router(presumibilmente), e sicuramente non tutti i router avranno lo stesso protocollo di rete, a
fronte di questo come faccio a spedire i pacchetti con differenti MTU?Utilizziamo la
frammentazione, supponiamo che un router riceva un pacchetto dal livello di collegamento, a
questo punto esamina l’intestazione e determina il collegamento di uscita, ma il protocollo in uscita
ha MTU più piccola della lunghezza del frammento IP, a questo il pacchetto viene spezzato in
pacchetti più piccoli e poi vengono spediti.
Un altro aspetto legato alla frammentazione è il riassemblaggio, questi pacchetti devono essere
riassemblati, farlo a livello di router non conviene, per via dei tempi di gestione, per cui se ne
occuperanno i livelli di rete dei sistemi periferici, per fare questo un il livello di rete deve riuscire a
capire quando un pacchetto e frammentato, riuscire a riconoscere tutti i frammenti ecc… per
adoperare queste funzioni utilizza i campi spiazzamento, identificazione e flag
Vediamo un esempio
come deframmentiamo?
Indirizzamento IPv4
Alcune premesse, normalmente ogni host ha un solo collegamento con la rete, quando
l’implementazione di IP dell’host vuole inviare un datagramma lo fa attraverso quel collegamento;
il confine tra host e collegamento è detto interfaccia; una volta detto questo è facile convincersi che
i router hanno 2 interfacce, avendo 2 collegamenti, uno per inviare datagrammi e uno per riceverli.
IP richiede che tutte le interfacce abbiano associato un indirizzo IP.
L’indirizzo IP è una sequenza di 4(1 byte ciascuno) numeri espressi nella forma decimale puntata,
cioè abbiamo che ogni byte è espresso in decimale ed è separato dagli altri con un punto es:
”192.168.0.1”, con 32 bit possiamo indirizzare 2^32-1 interfacce, estremamente irrealistico.
Gli indirizzi IP associati a host e router non sono scelti in modo casuale, parte dell’indirizzo
dell’interfaccia è determinata dalla sottorete al quale è collegata(guardare illustrazione precedente)
Ai giorni nostri le interfacce dei router non si collegano direttamente con gli host ma abbiamo una
situazione del genere:
In internet gli indirizzi sono assegnati tramite la strategia CIDR, L’indirizzo mantiene la forma
esadecimale puntata A.B.C.D/X dove X indica il numero di bit dedicati alla sub net
Nell’illustrazione a
destra
Un vantaggio di questo metodo è che un router, esterno all’organizzazione, quando deve inoltrare
un datagramma può considerare solo i primi x bit, una volta giunti nella subnet il router guarderà
solo il campo host(32-x bit) per individuare l’host.
Prima di CIDR si utilizzavano gli indirizzi di clsse, la parte network dell’indirizzo IP poteva essere
lunga 1,2,3 byte, rispettivamente chiamati indirizzi di classe A,B e C, il che portava a definire sotto-
reti con o troppi pochi host indirizzabili o troppi. DIVISIONE TROPPO RIGIDA.
NB: nella netmask il numero di 1 indica il numero di bit statici, è anche possibile che i router ai
quali in
Dhcp consente a un host di ottenere un indirizzo IP in modo automatico, gli verrà anche
comunicato:
1. una maschera di rete
2. l’indirizzo del router per uscire dalla sottorete(gateway)
3. l’indirizzo del DNS server locale.
4. Il tempo di vita dell’IP, in questo modo gli indirizzi IP non utilizzati potranno essere
riassegnati
Il DHCP può essere configurato per offrire sempre lo stesso indirizzo IP a un determinato host
oppure gli viene assegnato un indirizzo IP dinamico.Sostanzialmente è un server in ascolto di
richieste.
DHCP è un protocollo “plug&play”, poiché gli host si connettono alla rete e dinamicamente gli
viene assegnato un indirizzo IP, utilizzato anche nelle reti wirless, e nelle reti residenziali di accesso
a internet. Da questa definizione vediamo che è anche un protocollo client-server.
Supponiamo che un utente sia collegato con il proprio smartphone alla rete dell’università è che si
sposti dalla biblioteca alla propria classe, fino a un altro piano dell’università; tutte queste stanze
hanno una diversa subnet, e quindi spostandoci da una stanza all’altra dobbiamo ricollegarci, DHCP
risulta particolarmente adatto a questo compito. Altrettanto utile nelle reti di accesso agli ISP
residenziali, per esempio una rete ISP con 2000 clienti, che non ha mai più di 400 clienti attivi, non
abbiamo bisogno di 2000 indirizzi, ne sono sufficenti 512 quindi a.b.c.d/23, quando un utente si
connette gli viene assegnato un indirizzo IP, e viene tolto dalla lista degli IP disponibili, quando si
sconnette viene rimesso tra i disponibili.
Ogni dispositivo connesso alla rete richiede un indirizzo IP, il proliferare di sotto-reti “small office,
home office”, implica che l’ISP fornisca un insieme(blocco di indirizzi contigui) di indirizzi per le
macchine connesse alla rete, supponiamo che alla rete LAN si aggiungano altri dispositivi, a questo
punto l’ISP deve fornire un’altro blocco di indirizzi(maggiore di quello di prima), e se l’ISP avesse
già allocato tutti gli indirizzi contigui(quelli di cui disponeva) per quella LAN?
Il router ha un’interfaccia che fa parte della rete domestica, tutte le interfacce di rete hanno lo stesso
indirizzo di sotto-rete 10.0.0.0/24, uno spazio di indirizzamento simile è detto privato(NB
moltissime reti private utilizzano questo stesso identico indirizzamento), cioè ha senso solo
all’interno della rete locale, questi indirizzi possono essere utilizzati per scambiare pacchetti
all’interno della stessa rete locale, per indirizzarare pacchetti relativi all’internet devo utilizzare un’
altra tecnica.
I router abilitati al NAT vengono visti come un dispositivo con un unico indirizzo IP unico, tutto il
traffico della rete locale ha indirizzo IP “138.76.29.7”, e il traffico in entrata deve avere lo stesso
indirizzo per la destinazione; il router ottiene il proprio indirizzo dal DHCP dell’ ISP,
successivamente manda in esecuzione un server DHCP che assegna gli indirizzi alle macchine
locali.
Il campo porta è lungo 16 bit, circa 2^16-1 connessioni simultanee con un solo IP.
Quando i pacchetti richiesti arriveranno il NAT farà il processo inverso, cioè consulterà la tabella
sostituirà i campi porta e indirizzo dei datagrammi, e invierà sulla rete locale.
Alcune controversie
• I numeri di porta sono stati concepiti per indirizzare i processi, e non gli host.
• I router dovrebbero elaborare pacchetti fino al livello 3(rete,collegamento, fisico).
• Viola il principio end-to-end, gli host dovrebbero comunicare direttamento tra di loro, senza
intromissioni di nodi né modifica di indirizzi IP.
• Problemi connessioni P2P, il problema sta nel fatto che un peer con NAT non può agire da
server e accettare connessioni TCP, per risolvere si aggiunge un peer intermedio che non fa
uso di NAT
IPV6
Motivi introduzione:
1. I 32 bit dell’IPV4 erano troppo pochi per poter indirizzare tutte le macchine connesse in
rete.
2. Il formato dell’header consente una velocità di trasmissione maggiore
3. non c’è più il fastidioso campo optional, quindi IPV4 ha un header di 40 byte
4. non necessita di frammentazione
5. Qualita del servizio migliore, dipende dal tipo di protocollo
Formato IPV6
• Indirizzamento Esteso, indirizzo a 128 bit, supporta indirizzi unicast, multicast, brodcast, e
anche anycast, cioè consegna di un datagramma a un qualsiasi host all’interno del gruppo(il
gruppo è identificato dall’indirizzo anycast), normalmente il più vicino. Può essere usata per
inviare una GET HTTP al più vicino di una serie di siti.
• Intestazione Ottimizzata, alcuni campi di IPV4 sono stati eliminati, otteniamo
un’intestazione a 40 byte(lunghezza fissa), in questo modo IP ci metterà meno a elaborarli,
inoltre una nuova codifica delle opzioni ne consente l’elaborazione in maniera più flessibile.
• Etichettatura e priorità dei flussi, è possibile fare in modo che un particolare flusso di dati
possa essere etichettato, poiché il mittente vuole che sia gestito in maniera diversa, come un
QoS diverso da quella di default o un servizio realtime, in modo da poterli soddisfare,
esempio un flusso audio o video oppure traffico ad alta priorità per utenti che pagano. C’è
anche un campo a 8 bit, per identificare la priorità di 1 pacchetto.
Da IPV4 a IPV6
Tutti i nuovi router IPV6 sono retrocompatibili con IPV4, ma i router IPV4 non sono compatibili
con IPV6, come risolvere:
1. Spegnere tutte le macchine per un giorno e aggiornarle, 25 anni fa fu fatta una cosa simile e
fu un misero insuccesso.
Ci vuole un approccio più a lungo termine, cioè di aggiornamento graduale, sono possibili 2
approcci(applicabili singolarmente o insieme):
1. Metodo a doppia pila, tutti i nodi IPV6 sono dotati di un’implementazione IPV4 completa,
in modo che possano inviare o ricevere sia datagrammi IPV4 che IPV6, devono avere, di
conseguenza, sia 1 indirizzo IPV4 che IPV6, e dev’essere in grado di distinguere se un
router(al quale magari vuole inviare qualcosa) è IPV6 o no, per far questo si chiede al DNS
di restituire l’indirizzo IPV6 del nodo, se questo non lo supporta sarà restituito quello IPV4.
Illustrazione 25: Il nodo B contatta il DNS e scopre che il successivo nodo supporta solo
IPV4 quindi converte il pacchetto eliminando i campi in più
Illustrazione 24: con un approccio a doppia pila certamente due nodi IPV4 saranno in grado
di scambiarsi pacchetti IPV6 e 2 nodi IPV6 saranno in grado di scambiarsi pacchetti IPV6,
ma è anche possibile per due nodi IPV6 scambiarsi pacchetti IPV4, anche se E e F
supportano IPV6 il datagramma che gli sarà passato non avrà alcuni campi IPV6 poiché C e
D non supporta IPV6
Tunnelling
Adozione
È molto difficile aggiornare il livello di rete, senza far danni, per questo si rimanda il più possibile;
mentre i protocolli a livello applicativo hanno conosciuto un rapido sviluppo.
SDN
Nelle reti tradizionali l’instradamento è basato solo sull’indirizzo IP di destinazione del pacchetto,
all’interno delle reti si stanno sempre di più diffondendo middlebox(switch di livello 2 o livello 3),
cioè dispositivi che agiscono non solo sugli indirizzi IP, ma anche sui livelli inferiori(livello di
collegamento) o superiore es: porte dei socket; un esempio di questi dispositivi è il NAT che
riscrivono IP e numero di porta; i firewall bloccano i pacchetti basandosi sia su porta che indirizzi
IP, ma anche il load balancer inoltrano i pacchetti, verso server, che hanno bisogno di un
determinato servizio, guardando la porta di servizio.
La gestione di questi servizi non è semplice, e in questo SDN si sta adoperando per fornire servizi a
livello di rete e collegamento in maniera unificata.
OpenFlow(protocollo SDN)
Le tabelle match-action in openflow sono note come flow table e, ogni riga contiene:
• Una serie di valori nel campo intestazione con il quale il pacchetto sarà confrontato, nel caso
non ci siano corrispondenze il pacchetto viene scartato oppure mandato al livello superiore.
• Un insieme di contatori, il contatore viene incrementato quando un pacchetto viene
associato a una determinata occorrenza della tabella.
• Una serie di azioni che
devono essere
intraprese quando un
pacchetto viene
associato a una
determinata
Illustrazione 28: esempio azioni che possono essere intraprese, occorrenza della
nelle tabelle di flusso è possibile utilizzare le wildcard tabella
Illustrazione 29: In basso gli 11 campi del pacchetto che entra nella tabella
dei flussi
collegamento e trasporto, quindi a livello di collegamento i frame non trasportano solo datagrammi
di livello 4.
Switch port= porta in entrata al packet switch, sul quale il pacchetto viene ricevuto.
Action
la tabella dei flussi ha molteplici azioni, nel caso per un’occorenza ne fossero specificate molte
vengono eseguite in quest’ordine:
Illustrazione 30: In questo esempio notiamo quanto sia semplice
impore dei vincoli all'inoltro