Appunti Reti
Appunti Reti
Simone Battisti
2024/2025
Contents
1 Introduzione 3
1.1 I protocolli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Accessi alla rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Mezzi di Comunicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Livello Applicazione 6
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5 HTTP/2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6 FTP: File Transfer Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.7 Posta Elettronica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.8 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.9 Architettura Peer-to-Peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.10 Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.11 Content delivery Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.12 Programmazione delle Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 Livello Di Trasporto 12
4.1 Servizi di Trasporto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 Multiplexing e Demultiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.3 User Datagram Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.4 Principi per un Trasferimento Affidabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.5 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.6 Principi del Controllo di Congestione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.7 Controllo di Congestione TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.8 Algoritmi di Approccio contro la Congestione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.9 Metodi odierni di Soluzione alla Congestione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5 Livello di Rete 16
5.1 Obbiettivo Principale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2 Come è fatto un Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3 Il protocollo IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Tipi di indirizzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.5 NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.6 Address Resolution Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.7 Internet Control Message Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.8 Dynamic Host COnfiguration Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.9 Viaggio di un Pacchetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.10 IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.11 Protocolli di Instradamento - Algoritmo di DIjkstra (link state . . . . . . . . . . . . . . . . . . . 20
5.12 Internet, AS, OSPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1
5.13 Intra-AS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.14 Distance Vector: Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.15 Broder Gateway Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2
1 Introduzione
1.1 I protocolli
Ogni rete ha più protocolli che eseguono certe funzioni specifiche, alcuni anche un asingola funzione.
Internet è definito come rete di reti, ha una struttura gerarchica di interconnessione, con dei provider che
generano dei collegamenti tra queste reti, anche intercontinentali.
La rete internet si divide in reti pubbliche e private:
• Pubbliche: rete che si connette con delle altre reti esterne
• Private: rete che non si connette con altre reti esterne
Internet offre 2 servizi principali:
• Servizio Affidabile: ritorna dall’internet tutti gli oggetti byte per byte, ma se la rete è scarsa ci possono
essere delle perdite di byte e lo scaricamento viene riavviato.
• Servizio Best-Effort: definito non affidabile perché funziona senza connessione, se ci sono perdite di dati se
ne frega e manda avanti.
La definizione di protocollo dice:”un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o
più entità in comunicazione, cosı̀ come le azioni intraprese in fase di trasmissione/ricezione di un messaggio o
di un altro evento”.
3
Invece il cavo ethernet è formato da:
I cavi possono essere di tipo coassiale, usato dalla rete televisiva, con conduttori in rame e bidimenzionale,
ma molto ingombrante. Al giorno d’oggi si usa molto di più la fibra ottica, molto sottile, ad altra frequenza
trasmissiva e riesce a fare collegamenti senza interferenza, comprendo molta distanza.
Un canale usato poco al giorno d’oggi è il canale radio, contiene connessioni come la Lan, Wide-area o i segnali
satellitari.
4
Per mantenere stabilità nel traffico il canale deve essere usato circa al 95%, mai al 100% perché il ritardo è
ingestibile e molti dati non arriveranno più o con molto ritardo.
Per definire il percorso e la misura del ritardo sfruttiamo il programma diagnostico Traceroute, richiamabile
da terminale, che segue un pacchetto attraverso tutto il suo percorso di router e ritorna una ”tabella” dei router
con il tempo di ritardo tra i due.
Solitamente il traceroute non viene espresso per sicurezza informatica da attacco hacking di rete, dato che fornisce
indirizzi IP e nomi di ogni router.
Solitamente i pacchetti arrivano tutti, quando vengono persi dei pacchetti significa che non sono stati smaltiti
correttamente e il router non ha le risorse per mandarlo perché trova nodi pieni che non riescono a gestire bene
grandi smaltimenti di dati.
Per evitare ciò poche volte si decide di controllare il Troughput, il passaggio di dati in unità di tempo, che può
essere istantaneo o medio in base alle capacità del troughput. Il suo funzionamento va a collo di bottiglia, cioè
se si mette un troughput piu piccolo davanti a quello più grande o al contrario, la velocità di percorso è definita
dal collo più piccolo.
Nella realtà il modello principale di Troughput è:
5
Molte reti sfruttano il modello ISO/OSI dove il blocco applicazione è diviso in: sessione, presentazione e appli-
cazione. La presentazione consente alle applicazioni di interpretare i dati(livello macchina). La sessione recupera
i dati e sincronizza i pacchetti.
2.5 PDU
Il sistema di livelli viene definito da una PDU (Protocol Data Unit), che ne determina l’esistenza nella rete.
Per creare una PDU vengono assemblati dei dati.
3 Livello Applicazione
3.1 Introduzione
Il livello applicazione collega la rete con le interfacce terminali, tramite vari tipi di connessione, come:
• Peer-To-Peer (P2P): il tipo di connessione più diffuso che consente di scambiare dati anche con l’assenza
di un server, basta l’esistenza di un singolo punto di riferimento tra due terminali (Esempio: messaggistica
istantanea).
• Cloud Computing: metodo che memorizza e archivia/elabora i dati tramite delle risorse sparse nella
rete, fornendo (oltre allo scambio) servizi di backup automatici gestiti dalla connessione stessa, servizi di
risoluzione degli errori automatici legati alla rete e sicurezza dei propri dati in rete. È un investimento
utile per progetti di grande e piccola scala, per avere una sicurezza in più sulla riuscita del progetto.
Ogni processo che invia e riceve messaggi ha la susa socket, una sorta di porta che riceve/invia i messaggi
passsati dal processo, controllando se esiste un’infrastruttura adatta al trasporto del pacchetto.
Ogni host ha un indirizzo, che ”indirizza” i pacchetti da un livello all’altro, questo indirizzo si divide in due
codici principali:
6
• Indirizzo IP : definisce l’host di destinazione ed è univoco per ogni host
• Indirizzo di Porta: messo in aggiunta all’inidirizzo IP per definire la porta di ingresso. Non è del tutto
necessario.
A livello applicazione il protocollo, oltre alla gestione rete-utente, gestisce anche i messaggi scambiati e la sintassi
dei campi del messaggio, definendo bit per bit la richiesta voluta dall’utente.
In questo tipo di protocollo sono ammesse perdite di dati, solo per certi tipi di file audio e video, poiché
avrebbero delle perdite impercettibili all’uomo, dovuti solitamente a ritardi nella rete o a problemi di Troughput.
Quest’ultimo spesso ha bisogno di un minimo di dati epr essere efficiente, quindi può avere dei rallentamenti o
delle perdite.
3.2 HTTP
HTTP (Hyper Text Transfer Protocol ) è il protocollo di base delle interfacce web e definisce l’inzio del codice
univoco che definisce ogni pagina web, l’URL.
Questi URL portano alle pagine nel famoso World Wide Web (www), inventato da Tim Berners-Lee, che
definisce un ”insieme” di pagine web a cui connettersi per navigare. Quando parliamo di pagine web intendiamo
pagine HTML, cioè dei ”fogli” che contengono la disposizione di oggetti all’interno della pagina, descritti e
implementati da linguaggi esterni (JavaScript, PHP, Css, ...).
Il protocollo HTTP è di tipo CLient Server ed è basato su un formato request - response, con la particolarità di
essere memoryless, cioè, per ogni pagina visualizzata, il protocollo non ”ricorda” quella precedente, ogniuna sarà
considerata nuova e senza precedenti. Definiamo ora il tempo di risposta, in gergo viene chiamato Round-Trip
Time (RTT), cioè il tempo che ci mette un pacchetto a fare andata e ritorno tra 2 host:
Per calolare il RTt: RT T = Ttx + 2Tp , dove Ttx è il rapporto tra la dimensione del segmento e la velocità
di trasmissione, mentre Tp è il tempo di propagazione.
Viene anche stimato con: RT Tstimato = (1 − α)RT Tstimato + αRT Tcampionato .
HTTP è formato da due tipi di messaggi, richiesta e risposta, questi metodi sono defintii in 3 funzioni principali,
GET, POST e HEAD per l’HTTP/1.0, nelle versioni successive, come HTTP/1.1 si sfrutta in più la funzione
PUT che include file all’interno della pagina, susseguida dalla funzione DELETE, che elimina il file.
HTTP sfrutta la porta 80.
3.3 Cookie
I cookie, seguono l’interazione server - utente, sono formati da 4 componenti:
• una riga di intestazione nel messaggio di risposta
• una riga di intestazione nel messaggio di richiesta
• un file cookie mantenuto sia sul sistema dell’utente che sul browser
• una compressione di byte nell’header
7
Questi cookie hanno come funzionamento principale la raccolta di azioni fatte dall’utente per semplificare il
caricamento delle pagine web. I cookie ricevono le informazioni sulla macchina e ogni volta che si apre un sito
registra le azioni dell’utente, quando poi questo sito sarà riaperto dalla stessa macchina i cookie caricano già le
pagine che l’utente ha precedentemente cercato, per favorire una minore latenza nell’esperienza.
Un cookie dura solitamente una settimana, ma possono esser ecancellati dalle impostazioni del browser.
3.4 Cache
Alcune connessioni usufruiscono di servizi di proxy che creano una cache (salvataggio momentaneo) di qualche
sito, per favorire una velocizzazione nel caricamento delle pagine. Ad esempio la connessione universitaria unitn-x
mantiene un proxy attivo che genera una cache di dati del sito unitn.it. La funzionalità èiù importante della
cache è l’interconnessione che genera tra i dispositivi, dando praticamente possibilità ad un utente di caricare
una pagina che velocizzerà il caricamento della stessa pagina su un altro dispositivo che carica la stessa pagina
sulla stessa rete.
3.5 HTTP/2.0
Al giorno d’oggi HTTP è stato fortemente migliorato, fino ad arrivare alla versione più moderna e utilizzata
HTTP/2.0. Questa versione si focalizza sul traffico di dati, cercando di diminuire drasticamente la latenza
utente - server.
Questo migliroamento viene fatto tramite un nuovo protocollo chiamato SPDY, che si basa sul trasporto di
contenuti web con la minima latenza tramite l’utilizzo di:
• Multiplex di Flussi : supporta un numero illimitato di flissi su una singola connessione
• Gestione delle Priorità: il pacchetto viene suddiviso in più pezzi, ognuno con delle priorità che l’utente
dovrà vedere prima o dopo sulla sua macchina
• COmpressione dei dati da mandare all’header : comprime i dati dell’header, cosı̀ da mostrare ”qualcosa”
all’utente il prima possibile.
HTTP/2.0 aggiugo inoltre il Frming Binario, cioè l’incapsulamento dei messaggi, che vengono codificati du-
rante il trasporto con dei frame più piccoli. I frame sono dei flussi di dati in cui viene spezzato un dato, sia in
andata che in ritorno e sono la più piccola forma di comunicazione in rete.
I vari frame vengono poi riassemblati da specifici identificatori di flusso, univoci per ciascun frame e collegati
direttamente all’interfaccia utente.
Questo nuovo HTTP deve essere utilizzato solo con altri HTTP della sua stessa versione, dato che non è com-
patibile con le versioni precedenti, che non reiscono a leggerlo.
In HTTP/2.0 c’è un livello di trasporto all’interno, considerato molto più sicuro, questo è chiamato Transport
Layer Security (TLS), che controlla che client e il server siano semrpe gli stessi durante la connessione e lo
8
scambio di dati, aumentando anche la sicurezza dato che si assicura inoltre che lo scambio sia andato a buon fine,
controllando che i dati siano arrivati senza problemi e integri. Richiamiamo TLS, e quindi HTTP/2.0, quando ci
connettiamo ad un URL che si connette alla porta 433, al posto della porta 80 sfruttata dal normale HTTP.
Possiamo notare questa connessione perché il nostro URL sarà inizializzato da un HTTPS.
Il problema di HTTPS è la latenza, infatti tutti questi controlli aumentano il tempo di connessione client server
di molto. Una soluzione è utilizzare dei protocolli più moderni come HTTP/3.0 O QUIC.
HTTPS sfrutta la porta 443.
• Server di Posta: è la vera e propria casella di posta che contiene i messaggi in arrivo all’utente, gestendo
la coda dei messaggi.
• Protocollo SMTP (Simple Mail Transfare Protocol): i server tra di loro cono collegati da questo
protocollo per lo scambio di dati.
La porta del server che accede tramie SMTP è la porta 25 che viene usata sia come ricerca dell’utente, sia come
porta di trasferimento della posta.
I messaggi si posta elettronica sono formati da un’intestazione seguida da una riga vuota e infine il corpo.
L’intestazione contiene il nome del mittente e destinatario, con il relativo oggetto (diversi dalle informazioni del
SMTP, quelli sono definiti nel codice RFC822 della mail), il corpo contiene invece il messaggio intero codificato
in soli codici ASCII.
L’accesso alla posta può essere fatto con 3 tipo di protocollo diversi:
• POP: autorizzazione agente-server che tramite autorizzazione gestisce il download in locale delle mail (più
utilizzata). La versione più utilizzata di oggi è il POP3 che richiede uno username e una password per
accedere alla mail direttamente (fase di autorizzazione), subito dopo il client elenca i messaggi e fornisce
anche un processo di eliminazione (fase di transizione).
• IMAP:i messaggi vengono vengono sia visti in locale, che in remoto via server che darà una risposta in
pase all’autorizzazione (OK o ERR).
• HTTP: gmail, hotmail, ...
Possiamo anche usare insiele SMTP e il TLS, per avere una maggior sicurezza di comunicazione, portando allo
sfruttamento delle porte:
• Porta 465 per SMTP
• Porta 995 per POP3
• Porta 993 per IMAP
3.8 DNS
Il DNS (Domain Name System), come dice il nome, definisce il dominio di una pagina web. È un database dis-
trubuito che consente a server e client di trovare la pagina web di riferimento, considerando anche lo stato/regione
in cui ci si trova. Riesce infatti a raggruppare tutti gli indirizzi IP di una regione all’interno di raggrup-
patori specifici, cosı̀ da velocizzare i collegamenti.
9
Ogni DNS ha un server TDL, che si occupa di gestire i domini, sia a livello basso (.com, .org, ...), sia a livello
alto (.it, .de, .es, ...) e un server di competenza che è gestito dalle singole aziende che detengono i suddetti
domini per le loro pagine.
I DNS esiste anche in locale funge da cache dei dati delle pagine e dei servzi richiesti. Questi dati durano poco
tempo, perché vengono eliminati dopo un certo periodo di tempo, dato che sono salvati sul ”server” locale.
Una volta che il DNS ha ”imparato” la mappatura per arrivare ad un certo dominio, cacha i dati permettendo
una più rapida visualizzazione la prossima volta che apriremo la pagina. I dati cachati sono formati da un name
e da un value:
• MX: definito dal solo value che rappresenta il nome del server di posta associato.
I messaggi del DNS sono formati da una domanda, la query e da una risposta, entrambe con lo stesso formato:
10
dP 2P = max( µFs , min(d)
F
, (µ +NP
F
µi )
)
s
i
Lo scambio P2P più rapido è definito dallo scambio torrent, dove un gruppo di dispositivi connessi in
P2P si scambiano pezzi di un file tra loro. Quando vogliamo scaricare un file, accediamo a questa rete
P2P e attendiamo che tutti i pezzi di questo file vengano recepiti dal nostro dispositivo, creando cosı̀ il file
totale. Questi pezzi di file vengono detti chunk (solitamente da 1 kB), e vengono passati casualmente al
nostro dispositivo. La rete torrent è complicata da mantenere in vita, perché dato che i disositivi possono
connettersi (seeder → altruisti) e disconnetersi (leech → egoisti) a piacimento. In alcuni peer posono venire
richieste ai vicini delle liste di chunk per dare una priorità nel download e per trovare quali sono i file più
”rari ” all’interno della rete torrent.
• Ricerca Informazioni: un indice di sistemi P2P da tutte le informazioni all’interno della rete, con relative
posizioni degli host, solitamente visualizzato come una Distribute Hash Table. Nel caso del file sharing
l’indice tiene traccia dimanicamente della posizione del file e a lui vengono condivise tutte le informazioni
di ogni peer. Anche i peer stessi fra loro consultano l’indice, per trovare i chunk a loro mancanti. Nel
caso invece della messaggistica istantanea, l’indice crea l aorrispondenza tra utenti e posizione. Quando
l’utente aprirà il client di messaggistica, l’indice riceve la sua posizione e i signoli peer lo consultano
per trovare l’utente destinatario. La ricerca di informzioni viene svolta all’interno di un’unica directory
centralizzata, quest opuò causare problemi, dato che avremo un unico punto di guasto, che inchioda tutto
il sistema e soprattutto avreo delle prestazioni a collo di bottiglia. Spesso in questo tipo di tecnologie ci
sono stati casi di violazione del copyright.
Per risolvere questi problemi viene usato il query flooding, dove la rete diventa completamente distribuita,
dove i peer sono connessi a meno di 10 peer a loro vicini nella rete di copertura. La copertura è cosı̀ definita
gerarchica, dato che esisono dei peer maggiori detti leader, che vengono connessi ai loro rispettivi peer
minori, detti figli e ne tengono traccia e locazione.
11
3.12 Programmazione delle Socket
Se volessimo provare ad accedere alle informazioni che ci fornisce la pila TCP/IP devo utilizzare le socket, cioè
un’interfaccia di host locale controllata dal sistema operativo che invia e riceve messaggi dal processo di
un’altra applicazione, accedendo direttamente al livello di trasporto.
IL client contatta il server il esecuzione, questo apre una ”porta” che da il benvenuto al contatto col client.
Creando una socket TCP si stabilisce una comunicazione, di tipo client-server, col server e ogni volta che se ne
apre un’altra, verrà aperta una ”porta” diversa.
4 Livello Di Trasporto
4.1 Servizi di Trasporto
Forniscono la comunicazione tra processi applicativi di host differenti, eseguiti solitamnete nei sistemi terminali
e ce ne sono due principali UDP e TCP.
Questi servizi offrono una connessione logica tra processi basati sul livello di rete e lo potenziano. Il livello di
trasporto si basa sul sistema che ognuno ha sul proprio client e sulle infomazioni del server a cui è connesso
in quel momento. Il tipo di servizio più usato è il TCP, molto affidabile e consegna i dati in ordine, ma
richiede molte complessità, come la creazione di un collegamenteo logico, una funzione di controllo del flusso e
un setup della connessione.
L’UDP invece è una semplice estensione del servizio di connessione, è inaffidabile e consegna i dati (tutti forse)
in disordine.
12
4.2 Multiplexing e Demultiplexing
Il multiplexing un servizio compreso in UDP e TCP, consiste, tramite delle socket e delle porte, di gestire più
flussi di traffico in una singola connessione di rete. Questo consente al livello di trasporto, anche se apriamo
connessioni multiple, di gestirle tutte assieme.
Al contrario il demultiplexing prende questi segmenti di pacchetti che sono stati portati all’interno di un singolo
flusso e gli spacchetta nei vari flussi. Il multiplexing quindi avviene quando ad un server arrivano più dati e li
impacchetta, poi quando arrivano al client vengono spacchettati dal demultiplexing.
I numeri di porta di TCP e UDP sono definiti statici (se associati a applicazioni standard di rete) o dinamici (se
assegnati al sistema quando viene aperta una connessione), le porte di partenza e arrivo non sono mai le stesse.
Il socket del UDP è identificato da due parametri: l’indirizzo IP di destinazione e la relativa porta. Le
socket TCP, invece, sono identificate da 4 parametri: gli indirizzi IP di destinazione e origine e le relative
porte.
13
• ACK indivuale: inindica la ricezione corretta di un pacchetto ACK(n) (ricevuto il paccehtto n).
• ACK cumulativo: prende in considerazione un insieme di ACK, ACK(n) (in questo caso ha ricevuto tutti
i pacchetti fino a n escluso).
• Piggybacking: inserimento di un ACK nel pacchetto di dati.
Altri tipi di pipeline possono essere possono essere go-back-n, che sfrutta ACK cumulativi o il selective repeat,
che sfrutta ACK individuali dei singoli pacchetti.
Nel primo caso viene associato un timer all’ultimo pacchetto senza ACK e se il timer scade prima che l’ACK
arrivi al mittente, tutti i pacchetti vengono rispediti. Mentre nel secondo caso il timer viene posto nei pacchetti
dove l’ACK non è stato trasmesso e allo scadere del timer se ha ricevuto tutti gli ACK riinvia i pacchetti con
ACK mancante.
4.5 TCP
Il suo formato è uguale dagli anni 80, è formato da un protocollo punto-punto con relativo mittente e desti-
natario, consente un flusso di byte affidabile e in ordine, sfruttando: il pipelining e dei meccanismi controllo
per la congestione, sfruttando degli ACK comulativi. Il controllo della congestione evita di saturare la rete,
sfruttando in full duplex, un flusso bidirezionale nella stessa connessione, con dimensione massima chiamata
MSS. È orientato alla onnessione, infatti lo scambio di dati avviene tramitehandshaking, dato che inizializza sia
lo stato del mittente e del destinatario, prima di effettuare lo scambio di dati.
IL TCP ha una dimensione della finestra di ricezione (RNWD) di 16 bit, che indica il numero massimo di byte
che il ricevitore può immagazzinare, di conseguenza definisce anche la massima quantità di dati trasferibili ogni
RTT.
La procedura di setup del TCP è detta THREE-WAY-HANDSHAKE, dove abbiamo 3 host:
• Host A: host di partenza con sorgente A e destinatario B, con un numero sequenzale x, forinsce un segmento
SYN=1
• Host B: host mediano con porta sorgente B e destinataria A, ritorna un segnmento con SYN e ACK = 1,
con un numero sequenziale y e ACK = x + 1.
• Host A: ritorno della connessiona al mittente, porta un ACK = 1 e numero di ACK = y +1.
La lunghezza massima di un segmento TCP (come detto in precedenza) è definita dalla Maximum Segment
Size (MSS ). Dato che TCP lavora in byte, non vieme mai mandato un singolo byte alla volta, a meno che non
sia forzato. Per quest ol’MSS va scelto bene, per favorire al meglio la fluidità della rete.
L’MSS dipende da un paramentro del livello di rete sottostante (come l’indirizzo IP ad esempio) detto Maximum
Transfare Unit (MTU), che a sua volta dipende dal livello inferiore. L’MSS definisce solo la lunghezza dei singoli
pacchetti (payload) trasportati nel flusso.
La scelta della MSS dipende dalla velocità della pila protocollare, servirebbe infatti che i vari livelli parlino fra
loro, ma è impossibile, solitamente il default value del MSS è 1460 byte, se non funziona si diminuisce fino ad
un minimo di 536 byte.
14
• un router e che riceve un buffer finito e il mittente trasmette tutti i pacchetti finiti in timeout.
• Controllo di congestione end-to-end: che non coinvolge direttamente la rete e capisce se c’è congestione
da dalla presetnza di perdite di paccehtti e ritardi.
• Controllo di congestione assistito dalla rete: i router forniscono un feedback agli host di rete sullo
stato.
– Slow Start
– Congestion Avoidance
• Con perdite
– Fast retransmit
– Fast recovery
Per Slow start per ogni ACK valido si aumenta di un MSS la CWND, facendola aumentare esponenzialmente.
M SS
Nel Congestion Avoidance invece per ogni ACK ricevuto si aumenta la CWND di M SS · CW ND .
Per evitare la congestione possiamo agire su 4 parametri principali:
• Finestra di congestione: la possiamo aumentare se la rete ha possibilità di gestire il traffico
• Slow start threshold: la possiamo diminuire per ridurre la dirate del slow start e passare più velocemente
al congestion avoidance
• Retransmission timeout: lo possimao aumentare per dare più tempo alla rete di consegnare i pacchetti
• WLOW e WU P : possiamo ritardare lo spostamento
Possiamo sfruttare poi il fast retransmit che gli ACK diplicati in fondo ci dicono che la rete funziona, dando
fiducia alla rete e alla ricezione del terzo ACK duplicato ritrasmetto il pacchetto che non arriva e entro in fast
recovery, il processo nel quale abbasso il threshold e se arrivano altri ACK duplicati abbasso anche la CWND,
quando poi mi arriva un ACK valido posso regolare threshold=CWND.
Con questi metodi possiamo riscontrare problemi di equità. Questo è il motivo per il quale le applicazioni
multimediali sfruttano spesso UDP e non TCP. Le applicazioni parallele (che possono aprire varie connessioni)
invece sfruttano molto spesso TCP.
15
4.9 Metodi odierni di Soluzione alla Congestione
Ad oggi con le nuove connessioni TCP sfruttano le sole indicazioni dei pacchetti persi per attivare degli algoritmi
”anti-congestione”.
Alcune soluzioni sono:
• CUBIC: algoritmo di controllo per la congetione. In paricolare varia la lunghezza della CWND secondo
una funzione cubica nel tempo:
q
CW N Dmax (1−β
CW N Dcubic (t) = C(t − K)3 + CW N Dmax , con K = 3
C , con C = 0.4 e β = 0.7
• BBR: risponde alla congestione effettiva, non alla perdita di pacchetti, incentrandosi sul miglioramento
delle prestazioni della rete. Agisce in server side e sfrutta il concetto di pacing, che invece di inserire
nella CWND i tutti pacchetti consentiti, gli inserisco al ritmo con il quale li invia il nodo più lento. BBR
consente le riduzioni significative nella latenza.
• QUIC: progettato da Google nel 2012 e evita fenomeni di Head-of-Line Blocking, dato che usa TUDP
e riduce la latenza delle connessioni TCP. In QUIC il processo di handshake è incorporato, eliminando la
necessità di incorporare una connessione TCP.
5 Livello di Rete
5.1 Obbiettivo Principale
L’obbiettivo principale del livello di rete è quello di spostare pacchetti dal mittente al destinatario. Il
mittente incapsula i segmenti in datagrammi (poi in frame nel livello 2) e il ricevente li recupera e li consegna
al livello di trasporto.
Ci sono protocolli di livello di rete in tutti gli host e router. Gli ultimi ispezionano tutti gli header dei datagrammi
in base alle decisioni di inoltro.
Le due funzioni principali del livello di rete sono:
• Inoltro (o Forwarding): dove un’operazione locale sposta il pacchetto da inviare dall’ingresso all’uscita
del router
• Instradamento (o Routing: un’operazione con scala globale, che determina il percorso tramite degli
algoritmi di routing.
Le due funzioni sono definite da due funzioni principali, la prima è descritta dal Data Plane, una funzione locale
a ogni router che determina come inoltrare un datagramma da una porta di arrivo ad una di uscita tramite fun-
zione di forwarding. La seconda è definita dal Control Plane, che determina come creare un percorso end-to-en
dal mittente al destinatario.
• un livello di ling che consente la ricezione dei dati all’interno del router
• un sistema di commutazione che in base ai campi dell’header trova il destinatario e con esso la porta di
uscita corretta
Il sistema di commutaione ha un tasso di commutazione, differente per ogni router, che identifica la frequenza
con quale i pacchetti vengono spediti e può avere più strutture:
16
• Commutazione a Memoria: la prima generazione di router formati da porte di ingresso, una memoria
(direttamente del computer) dove venivano copiati i pacchetti, con una commutazione limitata dalla banda
di rete.
• Commutazione a Bus: si usa un bus di dati condiviso interno al router per trasmettere i datagrammi
dagli ingressi alle uscire, dove la velocità è limitata ”solamente” dalla banda del bus stesso (la sua velocità
di trasferimento).
• Commutazione a Matrice: formato da una matrice di punti di interconnessione tra l’ingresso e l’uscita,
sueprando cosı̀ i limiti della commutazione a bus tramite un design avanzato, arrivando ad una commu-
tazione fino a 60 Gbit/s.
In tutti questi casi esiste però ancora il problema del limite di pacchetti che può sostenere il buffer, che solitamente
richiede una memoria raccomandata di: M emoria = RT√TN·C , dove C è la velocità di trasporto (Gbit/s) e N è il
numero di fussi.
Per ovviare agli accodamenti si è deciso di implementare un meccanismo di scheduling, che decide che pacchetti
mandare secondo un algoritmo FIFO (First-Input-First-Output).
5.3 Il protocollo IP
IL protocollo IP è il protocollo fondamentale all’interno del livello di rete che definisce l’indirizzo del desti-
natario di un pacchetto di dati, tramite 4 numeri a 16 bit.
Il protocollo IP è definito da molti campi:
• VER: numero di versione IP (solo 4 o 6).
• Lunghezza Header: indica quante parole a 32 bit sono presenti nell’header del pacchetto.
• Tipo di Servizio/TOS: indica la calsse di servizio del datagramma.
• Lunghezza Totale: indica il numero di byte nel datagramma, includendo l’header.
• Identificazione (ID) del Datagramma: numeri sequenziale assegnato al dataframma in caso di raccolta
di specifici frammenti per riassemblare il datagramma.
• FLAG: campo in cui si specifica se il pacchetto è un datagramma intero o un singolo frammento.
• Offset del Frammento: indica in quale punto del datagramma va inserito quel frammento.
• Time To Live (TTL): numero intero definito dal mittente, diminuisce di 1 per ogni hop che il frammento
fa di router in router. Se raggiunge 0 il pacchetto viene scartato.
• Protocollo Superiore: specifica il protocollo nel livello di trasporto viene usato (UDP o TCP).
• Checksum dell’Header: come in UDP.
Ciascun tipo di hardware specifica un limite di dati Maximum Transmission Unit (MTU), dove ciascun
datagramma deve contenere un numero di Byte pari al MTU di quel router, se no l’hardware non reisce ad
incapsularlo. Ogni rete ha il suo MTU.
Se vengono persi dei pacchetti nella rete il datagramma non può essere più ricomposto, il ricevitore continuerà
a ricercare i pacchetti, non finendo ma. Per evitare ciò viene specificato un tempo massimo di trasmissione
nel protocollo IP, che se viene superato la trasmissione viene tagliata.
Gli host e router devono usare le stesse convenzioni di indirizzo e ogni indirizzo deve essere UNICO, anche se
ogni interfaccia può contenere più indirizzi. Quando si invia un pacchetto il mittente specifica il suo indirizzo IP
e quello del ricevitore, poi i router prendono decisione di inoltro in base a solo l’indirizzo IP di destinazione.
Genericamente un indirizzo IP è diviso in 2 parti:
• Un prefisso che identifica a quale host la rete è attaccato, detto NetID, unico per ogni rete al mondo in
base alla loro Local Area Network (LAN ).
• Un suffisso che indentifica l’interfaccia a cui è allacciata quella rete, detto HostID, unico per ogni dispos-
itivo nella rete.
17
Il NetID e l’HostID vengono identificati da diverse classi, definite come:
Le classi più affollate sono le prime 3, dato il numero di Host che contengono. Le ultime 2 sono quelle meno
usate.
L’assegnazione di questi indirizzi è definita dalla Internet Corporation for Assigned Names and Numbers (ICANN),
che assegna indirizzi alle aziende o ai singoli per evitare dispute. Non gli assegna direttamente, ma sfrutta dei
registar che danno degli ISP di rete per prendersi direttamente dei blocchi di indirizzi, mai un singolo host.
Il problema che ora abbiamo però è quello di conoscere il limite tra NetID e HostID, per farlo sfruttiamo 32 bit
di memoria, dove quelli a 1 sono quelli del prefisso. In IP questa informazione è chiamata Subnet Mask,
definita mascherà perché permette di estrarre il prefisso e perendere delle decisioni in base a quello (basta solo il
NetID al protocollo IP).
Per identificare questo tipo di scrittura possiamo usare la notazione detta Notazione CIDR che oltre alla solita
notazione decimale dell’indirizzo IP (xxx.xxx.xxx.xxx) aggiunge alla fine un /n dove n indica la quantità di 1
nella maschera:
Il client può fornire all’host più porte sulle quali connettersi, questo manda in confusione l’host stesso, quindi
viene sfruttata una nuova maschera detta netmask, che se ”sommata” all’indirizzo IP ritorna l’IP preciso del
dispositivo al quale connettersi. Esempio:
18
5.5 NAT
Per mandare pacchetti attraverso la rete con indirizzi IP, gli host sfruttano due organismi principali:
• Proxy: definito da un computere che mantiene un indirizzo pubblico e uno privato e ”media” la connessione
tra applicativi specifici
• NAT: apparato allacciato sia alla rete privata sia ad internet che effettua una mappatura tramite gli
indirizzi IP dei pacchetti spediti:
La procedura di NAT o Network Address Translation è stata la soluzione principale al periodo di mancanza di
indirizzi pubblici, che ad oggi è risolta tramite l’IPv6, il nuovo modello di indirizzo IP.
A volte il NAT è l’unico modo di connettere due reti, solo se non si controllano tutti i router tra due host.
Questo processo viene fatto solo per comunicazioni punto-punto sulla stessa rete, dato che gli indirizzi IP sorgente
e destinazione non cambiano durante il percorso.
I messaggi ARP sono incapsulati all’interno del datagramma da spedire, definiti da un campo Type nell’header.
Per evitare che un messaggio ARP venga ripetuto per ogni singolo pacchetto, quest’ultimo fornisce un servizio
di caching che mantiene in memoria le risposte ARP ricevute, cancellandole circa ogni 30 secondi.
Più avanzato del semplice ARP è il proxy ARP, dove una vera propria macchina restituisce gli indirizzi MAC
facendo le veci di un host anche se presente in una rete diversa.
19
con un DHCP ACK.
L’indirizzo IP fornito da DHCP rimane valido per un tempo limitato, che quando finsice il DHCP riposiziona
l’indirizzo tra quelli utilizzabili. Il client può anche richiedere a DHCP di estendere il prestito o di cambiare
indirizzo IP.
DHCP usa UDP anche se poco affidabile, per ovviare il client memorizza l’indirizzo in una cache per evitare
richieste simultanee.
Il messaggio DHCP è formato da:
5.10 IPv6
IPv6 inizialmente era utilizzato per ampliare la quantità degli indirizzi disponibili (dato che stavano finendo quelli
di IPv4). Oggi IPv6 velocizza l’elaborazione dei datagrammi, con una lunghezza fissa di 40byte.
IL datagramma di IPv6 è formato:
20
• N’: insieme dei nodi per cui il cammino è il minimo.
L’algoritmo si definisce:
Esempio:
5.13 Intra-AS
Intra-AS: definiti dal protocollo OSPF (Open Shortest Path First), che dissemina pacchetti con lo stato dei
link e calcola i percorsi migliori sfruttando l’algoritmo di Dijkstra. Implementa 3 procedure:
• Protocollo Hello: manda messaggi di mantenimento per controllare che i link siano funzionanti e a cascata
acnhe quello controllano i link vicini
21
• Protocollo Exchange: informa i router vicini che si sono ”appena conosciuti ” sulla topologia della rete.
• Protocollo Flooding: informa tutti i router di eventuali cambi di stato nella rete.
Il flooding è detto flooding controllato e invia i messaggi ricevuti su un’interfaccia a tutte le altre. Se esitono
connessioni dirette tramite dei messaggi link, se invece è una rete broadcast usa un messaggio di dominio broad-
cast. OSPF è di tipo gerarchico, infatti viene usato in reti con molti router e si divide in dorsale e reti di area.
I messaggi con i link state circolano nelle reti di area, la dorsale conta come una vera e propria area e quindi i
router fanno girare OSPF solo sulla dorsale. I router di bordo si occupano invece delle connessioni con gli altri AS.
22
Ongi interconnessione tra AS è controllata da policies, definite Ingress Policies per quelle applicate alle rotte
che voglio importare nel mio sistema, oppure Egress Policies per le rotte prima che vengano esportate.
Il best path per BGP è diverso da quello di OSPF o RIP, che cercavano il percorso più breve, infatti abbiamo
un concetto di ”preferito” in BGP molto vago che dipende dalle policy degli AS. Il best path può variare in
base anche ad un solo cambiamento nelal policy. Ogni speaker BGP condivide solamente il proprio best path
per raggiungere una destinazione, anche se non è detto che il best path di BGP sia il più veloce.
BGP usa 4 messaggi principali:
• Open: usato epr aprire una connessione BGP. Se viene accettato viene madnato un messaggio di conferma
con un hold time che definisce il tempo di validità della connessione.
• Notification: se ci sono errori invia 6 error codes in base al tipo di errore e 20 error subcodes in base
a dove avviene l’errore.
• KeepAlive: sono i messaggi di conferma inviati da OPEN e devono essere inviati entro il tempo dell’hold
time. Possono essere disattivati impostando un hold timer = 0.
• Update: contengono le informazioni di raggiungibilità e sono responsabili della disseminazione di infor-
mazioni. Le informazioni sono definite aditive se portano info riguardo a nuovi percorsi, o sottrattive se
le informazioni sono sulla rimozione di percorsi.
• Withdraw: l’azione di rimozione di una rotta, che viene effettuata quando non c’è più nessun percorso
disponibile verso un certo AS. Nel caso in cui un nodo BGP conoscesse un percorso alternativo viene
mandato un update + withdraw che elimina il percorso e lo sostituisce con quello definito in update.
• Implicit Withdraw: si sostituisce alla coppia di pacchetti update+withdraw, mandando un singolo mes-
saggio di aggiornamento del percorso migliore.
Per risparmiare informazioni all’interno dei pacchetti generalmente le rotte vengono aggregate. Abbiamo poi
l’uso di filtri che controllano ingressi e uscite della connessione BGP, possono essere generici o molto precisi.
Un pacchetto che non supera i filtri viene scartato.
BGP sfrutta 3 tabelle per le rotte:
• una per contenere le rotte accettate in ingresso e valutare vari percorsi alternativi
• una per contenere i best path attuali
• una per contenere le rote cha hanno superato i filtri
Queste tabelle sono le informazioni base per BGP e sono dette Routing Information Base o RIB.
• Creazione di un frame di livello 2 (accesso al link), che incapsula un datagramma in un frame aggiun-
gendoci header o trailer, fornendo un meccanismo di accesso al canale tra dispositivi tramite indirizzi
di livello 2 (detti indirizzi MAC) negli header dei frame.
• Consegna affidabile tra nodi adaicenti, tramite un basso tasso di errore se usiamo un collegamento fisico,
alto se usiamo un collegamento wireless
• COntrollo di flusso che adatta la velocità di trasmissione alle possibilità del ricevitore
• Rilevamento di errori, solitamente causati da atenuazione del segnale. Rileva la presenza di errori e
avverte il mittente o scarta il pacchetto.
• Half-duplex e Full-duplex che collegano i nodi, cosı̀ da farli passare informazioni da entrambi i lati
Il livello di data link è implementato da tutti gli host, solitamente sulle schede ethernet di questi, dato che sono
collegate direttamente al bus di sistema dell’host.
La comunicazione fra due adattatori di rete è definita da un lato dal mittente che ha il compito di incapsulare il
datagramma in un frame, mentre il destinatario, oltre a dover estrarre il datagramma deve anche cercare
eventuali errori durante il passaggio.
23
6.2 Rilevamento e Correzione di Errori
Gli errori vengono rilevati tramite dei bit ridondanti inseriti nel datagramma, detti EDC che definiscono se c’è
stato un errore o no. Non sono affidabili al 100%, perchè il protocollo potrebbe non accorgersi dell’errore, ma
maggiore è la ridondanza, migliore è la cattura degli errori.
Per definire quando un errore c’è stato all’interno di una sequenza di data bits, il numero di 1 deve essere pari,
se è dispari è probabilmente avvenuto un errore durante il passaggio di dati.
Per correggere eventuali errori si applica una procedura di interleaving, che consiste nel riordinamento dei bit
e fornisce una protezione contro errori a raffica (burst).. Più efficiente è l’algoritmo di Cyclic Redoundancy
Check (CRC), che considera i bit di dati come un numero binario di e sceglie una sequenza di r+1 bit (detta
generatore) e numero G, componendo il CRC scegliendo r bit in modo da:
• I dati d siano divisibili per G (modulo 2) con resto R
• Il ricevitore conosce G, quindi se divide < D, R > per G e ha resto !=0, allora c’è stato un errore
• A ”turni” intelligenti: i nodi accedono al canale a turno. I nodi che trasportano più dati avranno più
turni degli altri.
24
6.5 Protocolli ad Accesso Casuale
Quando un nodo ha un pacchetto da trasmettere deve farlo con un data rate massimo R e senza coordinarsi con
gli altri nodi.
Se due o più nodi trasmettono contemporaneamente si verifica una collisione che possono esserr rilevate e i dati
persi verranno recuperati.
Esistono molti protocolli ad accesso casuale, il più famoso è ALOHA dove quando un nodo ha qualcosa da
inviare lo passa immediatamente al successivo e se non ci sono collisioni anche questo lo passerà al successivo e
cosı̀ via. Se c’è collisione il nodo ritrasmette il pacchetto finché non avrà successo. I vantaggi di questo tipo di
connessione sono sicuramente la semplicità e la decentralizzazione, ma anche che se un nodo è attivo può usare
sempre il canale. Gli svantaggi sono ben maggiori, dato che le collisioni sprecano risorse e molti slot potrebbero
rimanere vuoti, si può rilevare la collisione senza aspettare la fine di una trasmissione e richiede un coordinamento
tra nodi.
k −G
Sul piano di calcolo dell’efficienza notiamo dalla formula: P [k] = G k! e
, una distrubuzione di Poisson, che
1
otteniamo un throughput massimo pari a e ≈ 0.368.
ALOHA ha una versione ancora più pura nella quale aumenta la semplicità, il frame non viene trasmesso subito
appena arrivo e la probabilità di collisione aumenta. Rifacendo lo stesso calcolo sul piano dell’efficienza abbiamo
1
un throughput pari a ≈ 2e .
Un altro protocollo importante è il CSMA (Carrier Sense Multiple Access) che ha la particolarità di ”ascoltare
prima di parlare”, cioè se il canale è vuoto si trasmette in un frame, se è occupato aspetta e ritarda la trasmissione.
CSMA ha diverse versioni:
• non-persistente: il tempo di attesa quando il canale è occupato è molto più lungo di quello di trasmissione.
• 1-persistente: il tempo di attesa quando il canale è occupato è definito dalla sola attesa fino a che si
libera, poi trasmette subito.
• p-persistente: se il canale è occupato aspetta e quando si libera ha una probabilità p di trasmettere il file
e con una probabilità 1-p attende un tempo casuale molto più lungo del tempo di trasmissione.
Nel CSMA esiste un periodo di vulnerabilità che dipende dal tempo di propagazione τ , definito come:
Tv = τ + Ta , con τ << T . Anche il CSMA ci possono essere delle collisioni, infatti due nodi potrebbero
dilevare in ritardo i rispettivi segnali. La collisione sprega il tempo di trasmissione, quindi tutto il peso del
trasporto va in mano alla distanza, che gioca un ruolo importante nel determinare le probabilità di colli-
sione. Per evitare la collisione esiste un collision detector, il CSMA/CD, che posticipa le trasmissioni come
in CSMA, ma permette di rilevare le collisioni in breve tempo e interrombe le trasmissioni quando è sicuro di
queste, facendo risparmiare un sacco di tempo. La collision detection è molto semplice nelle LAN cablate, infatti
si confronta semplicemente la potenza ricevuta con quella trasmessa dal nodo e si capiscono le eventuali perdite,
in reti wireless è più complicato.
25
Ethernet diventa uno standard di rete con IEEE 802, con una velocità di 10Mbit/s e come mezzo di comuni-
cazione viene usato un cavo coassiale con estensione massima fino a 4 trasmettitori. I doppini all’interno del
cavo ethernet sono incrociati e si dividono in shielded, unshielded e foiled. Permettono di risolvere molti problemi
legati alla gestione e alla installazione.
Un frame passato per ethernet è definitop da indirizzi a 6 byte per indirizzi MAC di sorgente e destinazione. Se
la scheda di rete riceve un frame diretto a se o diretto ad un indirizzo di broadcast passa tutte le informazioni al
livello di rete, altrimenti scarta il frame. Il tipo indica il protocollo di livello superiore (solitamente IP) utulizzato
ed è definito infine da una CRC (cyclic redundant check) che rileva gli errori.
La connessione ethernet è connectionless, non c’è nessuno scambio di messaggi tra interfacce di rete di mittente
e destinatario e è una connessione non affidabile, dato che non si usano ACK o NACK, solo il CRC, quindi i
dati nei payload se vanno perduti si recuperano solo con protocolli di livelli più alòti (come TCP).
Ethernet usa un algoritmo di CSMA/CD nel quale la scheda di rete dopo aver ricevuto il datagramma comincia a
trasmettere solo se il canale non è occupato, se la trasmissione termina senza rilevare altre trasmissioni il processo
è terminato con successo. Se si rileva una collsisione si riceve un messaggio abort, e per ogni collisione la scheda
di rete sceglie a caso il backoff.
26