Reti_mattia.pdf
Document Details
2021
Tags
Related
- Computer Networking: A Top-Down Approach PDF
- Computer Networking: A Top-Down Approach PDF
- Computer Networking: A Top-Down Approach 8th Edition PDF Chapter 1
- Computer Networking: A Top-Down Approach 8th Edition Chapter 1 PDF
- Computer Networking (8th Edition) Chapter 1 PDF
- Chapter 7: Network Technologies PDF
Full Transcript
Reti di Calcolatori Mattia Ceron VR457240 Anno scolastico 2021-2022 Contents 1 Reti di calcolatori ed Internet 4 1.1 Internet..................................
Reti di Calcolatori Mattia Ceron VR457240 Anno scolastico 2021-2022 Contents 1 Reti di calcolatori ed Internet 4 1.1 Internet........................................... 4 1.1.1 Le basi di internet................................. 4 1.1.2 tipi di ISP..................................... 4 1.1.3 Protocollo..................................... 5 1.2 Tipi di commutazioni................................... 5 1.2.1 Commutazione di Circuito........................... 5 1.2.2 Commutazione di Pacchetto.......................... 6 1.2.3 Differenze tra Commutazione di Pacchetto e Circuito............ 6 1.3 Diversi tipi di ritardo che il pacchetto subisce..................... 6 1.3.1 Perdita di pacchetti................................ 8 1.3.2 Load Bouncing.................................. 9 1.3.3 Throughput di rete................................ 9 1.4 Architettura a livelli.................................... 9 1.4.1 Stratificazione di protocolli........................... 10 1.4.2 Modello ISO/OSI................................. 10 1.4.3 Modello TCP/IP................................. 10 2 Livello Applicativo 14 2.1 Caratteristiche....................................... 14 2.1.1 Socket....................................... 14 2.2 Servizi di trasporto.................................... 14 2.2.1 HTTP........................................ 15 2.2.2 Connessioni persistenti e non persistenti................... 15 2.2.3 Codici comuni................................... 18 2.2.4 Cookie....................................... 18 2.2.5 Web Caching................................... 18 2.2.6 GET condizionale................................. 19 2.3 DNS............................................. 20 2.3.1 Gerarchia dei server............................... 21 2.3.2 DNS Caching................................... 22 2.4 Servizio di Posta Elettronica............................... 22 2.4.1 Architettura.................................... 22 2.4.2 SMTP........................................ 23 3 Livello di trasporto 24 3.1 TCP............................................. 24 3.1.1 Struttura dei segmenti TCP........................... 24 3.2 Acknowledge e Sequence Number........................... 25 3.3 Checksum......................................... 26 1 CONTENTS 2 3.4 Gestione delle connessioni................................ 27 3.4.1 Apertura connessione TCP........................... 27 3.4.2 Chiusura di una connessione TCP....................... 28 3.4.3 Timeout e stima del tempo di andata e ritorno................ 28 3.5 Trasferimento dati affidabile............................... 29 3.5.1 Raddoppio dell’intervallo di timeout..................... 31 3.5.2 Ritrasmissione rapida.............................. 31 3.5.3 Controllo del flusso................................ 32 3.5.4 Controllo di congestione............................. 33 3.6 UDP............................................. 35 4 Livello di Rete 37 4.1 Router........................................... 37 4.2 IP.............................................. 38 4.2.1 Header IPv4.................................... 38 4.2.2 Frammentazione dei datagrammi....................... 39 4.3 DHCP............................................ 40 4.4 ICMP............................................ 42 4.5 Indirizzi Privati e Pubblici................................ 42 4.6 IPv6............................................. 43 4.7 Routing/Instradamento................................. 44 4.7.1 Instradamento distance vector......................... 46 4.8 Routing inter e intra-ISP................................. 49 4.8.1 BGP......................................... 49 5 Livello Data Link 52 5.1 Introduzione........................................ 52 5.2 Gestione del mezzo Condiviso............................. 52 5.2.1 ALOHA...................................... 52 5.2.2 CSMA....................................... 54 5.3 Ethernet.......................................... 56 5.3.1 Indirizzo MAC.................................. 56 5.3.2 Struttura dei frame Ethernet........................... 57 5.4 Protocollo ARP...................................... 57 5.5 Switch........................................... 58 5.5.1 Autoapprendimento............................... 59 5.6 Wifi............................................. 59 5.6.1 Architettura di 802.11.............................. 60 5.6.2 CSMA/CA.................................... 60 5.6.3 Terminali nascosti: RTS e CTS.......................... 62 5.6.4 Network allocation Vector............................ 63 5.7 Framing.......................................... 63 6 Esercizi 65 6.1 Subnetting......................................... 65 6.1.1 Esercizio 1..................................... 65 6.1.2 Esercizio 2..................................... 66 6.1.3 Esercizio 3..................................... 66 6.1.4 Esercizio 4..................................... 69 6.1.5 Esercizio 5..................................... 70 6.2 TCP............................................. 71 6.2.1 Esercizio 1..................................... 71 CONTENTS 3 6.2.2 Esercizio 2..................................... 73 6.2.3 Esercizio 3..................................... 74 6.2.4 Esercizio 4..................................... 75 6.3 Livello di rete....................................... 76 6.3.1 Esercizio 1..................................... 76 Chapter 1 Reti di calcolatori ed Internet 1.1 Internet 1.1.1 Le basi di internet I sistemi periferici che si connettono ad internet prendono il nome di end host oppure sistemi periferici. Questi dispositivi sono connessi tra di loro attraverso una rete di collegamenti e commutatori di pacchetti. Quando due calcolatori vogliono comunicare, l’informazione trasmessa è suddivisa in piccole parti che prendono il nome di pacchetti a cui è ulteriormente aggiunta una intestazione di informazioni aggiuntive(header). I due principali commutatori di pacchetto sono il router e switch, il primo dispositivo permette di comunicare con l’esterno della propria rete, invece lo switch collega tra loro i calcolatori. 1.1.2 tipi di ISP I sistemi periferici che accedono a Internet lo fanno attraverso gli ISP(Internet Service Provider) che si distinguono in 1. Livello 1: la cui rete spazia geograficamente su più nazioni; 2. Livello 2: operano sul territorio nazionale; 3. Livello 3: lavorano sul territorio locale; Gli ISP forniscono ai sistemi periferici svariati tipi di accesso alla rete e attraverso accordi commerciali più ISP possono collegarsi fra di loro sfruttando i router di bordo. 4 CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 5 Figure 1.1.1: Componenti base di Internet 1.1.3 Protocollo Un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o più entità in comunicazione, cosı̀ come le azioni intraprese n fase di trasmissione e/o di ricezione di un messaggio o di un altro evento. 1.2 Tipi di commutazioni 1.2.1 Commutazione di Circuito Nelle reti a commutazione di circuito le risorse richieste lungo un percorso per consentire la comunicazione tra sistemi periferici sono riservate per l’intera durata della sessione di comu- nicazione. Quando la rete stabilisce un circuito, riserva anche una velocità di trasmissione con- tinua. Questa tecnologia offre un ritardo contenuto nel caso in cui la quantità di informazioni da trasmettere è costante, invece nel caso di informazioni prodotte in modo discontinuo lo spreco di risorse è più elevato. Dato che per questa connessione dal mittente al destinatario è stata riservata una certa larghezza di banda, il mittente può trasferire i dati a velocità costante garantita. CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 6 Figure 1.2.1: Rete a commutazione di circuito 1.2.2 Commutazione di Pacchetto La sorgente suddivide l’informazione in pacchetti e questi pacchetti viaggiano attraverso col- legamenti e commutatori di pacchetto(router, switch). I pacchetti vengono trasmessi su cias- cun collegamento a una velocità pari alla velocità del collegamento stesso. La maggior parte dei commutatori utilizza lo store-and-forward. Ciò significa che il router deve aspettare di ricevere l’intero pacchetto prima di poterne cominciare a trasmettere sul collegamento in us- cita. Per riuscire ad adoperare lo store-and-forward ogni router ha al suo interno un buffer di output per conservare i pacchetti che sta per inviare, inoltre i pacchetti subiscono ritardi di ac- codamento nei buffer di output. Dato che il buffer ha una dimensione limitata, nel caso in cui due dispositivi generano pacchetti nello stesso momento c’è una perdita di pacchetti poiché solo un pacchetto dell’end-host può uscire dal router, in questo caso i pacchetti verranno rin- viati. Il router per determinare il percorso più veloce per instradare un pacchetto utilizza la tabella di inoltro(forwarding table) che mette in relazioni gli indirizzi di destinazione con i collegamenti di uscita. Quanto un pacchetto giunge ad un router, questo esamina l’indirizzo e consulta la propria tabella per determinarne l’uscita. Figure 1.2.2: Rete a commutazione di pacchetto 1.2.3 Differenze tra Commutazione di Pacchetto e Circuito Nella commutazione di circuito il ritardo è rappresentato dall’instaurazione del circuito che è preallocata indipendentemente dalla richiesta; La commutazione di pacchetto, invece, seguendo la modalità store-and-forward ha un rallentamento ogni qual volta un pacchetto raggiunge il router poiché deve essere salvato totalmente nel buffer prima di essere inviato; 1.3 Diversi tipi di ritardo che il pacchetto subisce Ricordiamo che ad ogni tappa, il pacchetto subisce vari tipi di ritardo a ciascun nodo del tragitto: CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 7 Ritardo di elaborazione: il tempo richiesto per esaminare l’intestazione del pacchetto e per determinare dove dirigerlo. Nei router ad alta velocità questi ritardi sono solitamente dell’ordine dei microsecondi o inferiori; Ritardo di accodamento: una volta in coda, il pacchetto subisce un ritardo mentre at- tende la trasmissione del collegamento. La lunghezza di tale ritardo dipenderà dal nu- mero di pacchetti che sono in coda. I ritardi di accodamento possono essere dell’ordine dei microsecondi o dei millisecondi; Ritardo di trasmissione: dipende dalla velocità di trasmissione e dalla dimensione del dim pacchetto pacchetto ttram = Vtram. Ritardo nell’ordine dei microsecondi o millisecondi; Ritardo di propagazione: è data dal tempo per percorrere la distanza verso il router successivo Figure 1.3.1: Ritardo router A Siano delab , d acc , dtram , d prop i ritardi di elaborazione, accodamento, trasmissione e propagazione; il ritardo totale di nodo è allora: dnodo = delab + d acc + dtram + d prop Il contributo di queste componenti del ritardo può variare in modo significativo. Il tempo d prop può essere trascurato per un collegamento che connette due router all’interno della stessa LAN; è, invece, di centinaia di millisecondi per due router interconnessi tramite un satellite geostazionario e può risultare dominante in dnodo. dtrasm è trascurabile per velocità trasmissive di 10MBps o superiori; invece, può risultare di centinaia di millisecondi per grandi pacchetti inviati su collegamenti a bassa velocità. Il ritardo di elaborazione, delab , è spesso trascurabile, ma può influenzare il throughput massimo di un router, che rappresenta la velocità massima quale il router può inoltrare i pacchetti. Il ritardo di accodamento, invece, a differenza degli altri tre ritardi può variare da pacchetto a pacchetto. Per esempio, se in una coda vuota ar- rivano 10 pacchetti contemporaneamente, il primo pacchetto trasmesso non subirà ritardo di accodamento, mentre l’ultimo subirà un ritardo di accodamento piuttosto elevato (dovendo attendere la trasmissione dei restanti 9 pacchetti). Denotiamo con a la velocità media di arrivo dei pacchetti nella coda allora il rapporto La/R, detto intensità di traffico, gioca un importante ruolo nella stima dell’entità di ritardo di accodamento: La/R > 1: la velocità media di arrivo dei bit nella coda supera la velocità alla quale i bit vengono ritrasmessi in uscita da essa. In questa situazione, la coda tenderà a crescere senza limiti e il ritardo di coda tenderà all’infinito; La/R ≤ 1: se i pacchetti arrivano a cadenza periodica (un pacchetto ogni L/R secondi), ciascun pacchetto troverà una coda vuota e non ci saranno ritardi di accodamento. Se invece i pacchetti arrivano a raffiche periodiche si possono verificare dei significativi ritardi medi di accodamento. CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 8 Figure 1.3.2: Ritardo medio di accodamento in funzione dell’intensità di traffico 1.3.1 Perdita di pacchetti Le code hanno capacità finita perciò i ritardi dei pacchetti non tendono all’infinito quando l’intensità di traffico si approssima a 1, ma un pacchetto può trovare la coda piena. Non es- sendo possibile memorizzare tale pacchetto, il router lo eliminerà e il pacchetto andrò perduto. Comandi per misurare il ritardo Per poter misurare il tempo, esistono dei comandi implementati nativamente nelle linee di comando dei sistemi operativi. Il primo di cui parleremo è il ping Figure 1.3.3: Comando Ping La sintassi è molto semplice: dopo aver scritto ping basta soltanto dichiarare l’host di desti- nazione che può essere un indirizzo IP oppure un nome di un sito web. Ping fornisce come output il tempo di risposta in millisecondi(ms) e il ttl(time to live) che viene decrementato ogni qual volta un hop(si raggiunga ad un router) si incontri. L’altro comando è il traceroute che oltre a fornire il tempo di risposta, descrive il percorso fatto dai pacchetti, descrivendo ogni incontro con un router CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 9 Figure 1.3.4: Comando Traceroute 1.3.2 Load Bouncing Dopo aver capito come i pacchetti viaggiano, è opportuno domandarsi cosa succede se vi sono dei cammini equivalenti, ovvero dei cammini in cui il tempo di percorso è equivalente. La tecnica utilizzata è il Load Bouncing: in caso di un solo pacchetto da inviare il percorso viene scelto a caso; se vi sono più pacchetti da inviare vengono smistati nei vari percorsi equivalenti cosı̀ riducendo il carico all’interno della rete; 1.3.3 Throughput di rete La quantità di informazione che si può trasmettere tra una sorgente e destinazione su un sin- golo collegamento prende il nome di banda di trasmissione e si misura in bps. Figure 1.3.5: Throughput per il trasferimento da server a client Prendiamo d’esempio la figura 1.3.5 ci sono percorsi con più link. La velocità di trasmissione END-TO-END è chiamata Throughput ed è il risultato della bottleneck ovvero la velocità di trasmissione più piccola fra i collegamenti(min(R1 , R2 ,... , R N )). 1.4 Architettura a livelli Un’architettura a livelli è formata da più livelli che fornisce il proprio servizio effettuando determinate azioni all’interno del livello e utilizzando informazioni di un livello inferiore. CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 10 1.4.1 Stratificazione di protocolli La comunicazione tra due livelli omologhi (peer) avviene attraverso un protocollo1 , esso definisce: il formato dell’header; il comportamento dello scambio dei messaggi; I protocolli dei vari livelli sono detti pila di protocolli. 1.4.2 Modello ISO/OSI La prima pila di protocolli Internet ideata prende il nome di ISO/OSI (International Organi- zation for Standardization/Open System Interconnection) e prendeva vita quanto i protocolli di Internet erano ai loro esordi ed erano ancora in via di sviluppo Applicazione Presentazione Sessione Trasporto Rete Collegamento Fisico Table 1.4.1: Modello ISO/OSI Il modello prevedeva l’utilizzo di 7 livelli, ognuno con le sue caratteristiche e protocolli, tut- tavia rimaneva soltanto un’idea teorica mai progettata. 1.4.3 Modello TCP/IP TCP/IP prende il nome dai 2 protocolli principali:Transmission Control Protocol e Information Protocol, il suo scopo era quelli di permettere a più entità di comunicare fra di loro e basandosi sul modello ISO/OSI si riuscı̀ a creare un modello pratico, utilizzato tutt’ora nella rete Internet. 1 Insieme di regole che sovraintendono alla comunicazione tra entità dello stesso livello CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 11 Applicazione Trasporto Rete Collegamento Fisico Table 1.4.2: TCP/IP I livelli sono 5: Applicazione: è dove risiede l’applicazione utilizzata dall’utente; Trasporto: trasferisce i messaggi del livello di applicazioni tra punti periferici gestiti dalle applicazioni; Rete: si occupa di trasferire i pacchetti a livello di rete; Collegamento: invia i pacchetti tra i nodi; Fisico: trasferire singoli bit da un nodo a quello successivo; Incapsulamento L’approccio utilizzato è quello DIVIDE ET IMPERA: viene effettuata un’elaborazione a di- versi livello che trasformano l’informazione. Ogni livello aggiunge un proprio header(intestazione) che fornisce informazioni ulteriori sul pacchetto. Messaggio H H H H H H H H H Figure 1.4.1: Incapsulamento dell’informazione Ogni livello si focalizza sull’header del proprio livello e lo passa al livello superiore fino all’ultimo. Alla fine i pacchetti verranno inviati tramite un protocollo del livello fisico. Quindi, a ciascun livello, il pacchetto ha due tipi di campi: quello di intestazione e quello di payload (il carico utile trasportato). Indirizzo IP Gli indirizzi IP sono identificativi univoci di un host all’interno della rete, la loro dimensione è di 32 bit. I campi principali di questo protocollo sono: IP Sorgente: è l’indirizzo IP del dispositivo sorgente che ha inviato il messaggio; IP Destinazione: è l’indirizzo IP del dispositivo destinatario che riceverà il messaggio; CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 12 In una comunicazione fra due entità A e B, IP sorgente ed IP destinazione si scambieranno in base a chi invierà il messaggio e a chi lo riceverà, figura 1.4.2. Ogni pacchetto ha sempre i campi IP sorgente e destinazione. Un esempio di indirizzo da 32 bit è 1010110 1010011 0001011 10011001 Per facilitare la lettura degli indirizzi, si utilizza una notazione che separa la sequenza di bit in 4 blocchi da 1 byte e ognuno di questi è tradotto in intero. RIPrendendo la sequenza di bit precedente possiamo provare a convertire in decimale i 4 blocchi: 1. 27 + 25 + 22 + 21 =165; 2. 27 + 25 + 21 + 20 =163; 3. 23 + 21 + 20 =11; 4. 27 + 24 + 23 + 20 =153; La convenzione utilizzata è la decimale puntata e quindi l’indirizzo è: 165.163.11.153 Figure 1.4.2: Scambio di IP destinatario e sorgente Ora che abbiamo definito cosa è un indirizzo IP è giusto domandarsi se alcune cifre sono più importanti delle altre. La risposta è si, ci sono due categorie: il prefisso e il suffisso, il primo permette di identificare geograficamente la rete, mentre il secondo permette di riconoscere l’host all’interno della rete. Il numero di bit occupati dal prefisso dipendono dalla grandezza della rete: più è grande la rete, meno bit occuperà il prefisso e più dispositivi potranno essere riconosciuti dal suffisso. La notazione che specifica il numero di bit per il prefisso è la notazione barrata 157.27.176.3/16, 16 bit saranno per il prefisso, mentre per il suffisso la restante parte 32- 16=12. Per identificare il numero di bit per il prefisso, i calcolatori utilizzano una sequenza di 32 bit in cui tutti i bit associati al prefisso sono posti a 1 e gli altri a 0, riutilizziamo la /16: 1111111111111110000000000000000 Anche per questa sequenza di bit si utilizza la notazione puntata decimale e il risultato sarà: 255.255.0.0 Subnetting Il subnetting è un processo di suddivisione di una rete in sottoreti, consideriamo il seguente indirizzo IP: 180.190.0.0/16, la maschera è di 16, quindi gli host disponibili sono 232−16 = 216. Scrivendo l’indirizzo in binario si avranno i primi 16 bit per il prefisso e gli altri 16 per il suffisso CHAPTER 1. RETI DI CALCOLATORI ED INTERNET 13 1011010010111110 | {z } 0000000000000000 | {z } prefisso suffisso Creo 2 sottoreti di pari dimensioni: 1. 101101001011111 0 000000000000000/17 2. 101101001011111 1 000000000000000/17 Si prende il bit dopo il prefisso e per la prima rete si pone uguale a 0, nella seconda ad 1, cosı̀ facendo si creano due sottoreti da 216 /2 = 215. Un tempo la notazione utilizzata era quella in classi: Classe A:se l’indirizzo IP inizia con il primo bit a 0 allora il prefisso è di 8 bit, 224 host disponibili; Classe B: nel caso in cui non fosse di classe A, controllo il secondo bit, se è uguale a 0 il prefisso è di 16 bit, 216 host disponibili; Classe C: se il primo e secondo bit sono ad 1 e il terzo a 0, allora il prefisso è di 24 bit 28 host disponibili; Questa notazione portava ad uno spreco di bit considerevole, ad esempio se avessi bisogno di 1000 host dovrei utilizzare una classe B sprecando 216 − 1000 = 65536 − 1000 = 64k host. Gli indirizzi IP riservati sono indirizzi che non possono essere assegnati agli host indirizzo di rete; broadcast: i bit che appartengono al suffisso sono tutti posti ad 1; indirizzo IP con tutti 0; indirizzo IP con tutti 1; Chapter 2 Livello Applicativo Le applicazioni sono costituite da una coppia di processi che si cambiano messaggi su una rete. Per ciascuna coppia di processi comunicanti, ne etichettiamo due: client: è il processo che avvia la comunicazione ed ha un IP dinamico; server: processo che attende di essere contattato per iniziare la sessione; 2.1 Caratteristiche 2.1.1 Socket Un’ applicazione che intende comunicare con un’altra applicazione che gira su un altro host dovrà aprire un socket che è un’astrazione software che identifica una connessione attraverso i seguenti parametri: IP sorgente; IP destinatario; Porta sorgente; Porta destinazione; Un numero di porta permette di identificare un processo all’interno di un host. I numeri di porta sono di 16 bit e vanno da 0 a 65535, quelli che vanno da 0 a 1023 sono chiamati numeri di porta noti e sono. riservati per essere utilizzati da protocolli applicativi ben noti(HTTP, FTP, SMTP,...), mentre quelli che vanno da 1024 a 65535 sono numeri di porta dinamici che vengono assegnate dal sistema operativo lato client quando inizia una connessione. 2.2 Servizi di trasporto Il livello applicativo ha il compito di decidere la tIPologia di servizio del livello di trasporto da utilizzare: TCP(Transmission control Protocol): connection-oriented, affidabile; UDP(User Datagram Protocol: connectionless, non affidabile; Nel caso del TCP il livello di trasporto assicura la consegna alla destinazione, si preoccuperà di recuperare il pacchetto perso e di inviarlo, mentre con l’UDP ciò non avviene, ma per certi tipi di applicazione che tollerano le perdite può essere accettabile. 14 CHAPTER 2. LIVELLO APPLICATIVO 15 2.2.1 HTTP HTTP(hypertext transfer protocol) protocollo a livello di applicazione del Web. Questo proto- collo è implementato in due programmi, client e server, in esecuzione su sistemi periferici di- versi che comunicano tra loro scambiandosi messaggi HTTP. Il protocollo definisce la struttura dei messaggi sia la modalità con cui client e server messaggino. HTTP si appoggia sul TCP. L’HTTP è un formato testuale codificato in ASCII, se si dovesse intercettare un suo pacchetto si vedrebbe un file di testo. HTTP utilizza TCP come protocollo di trasporto. Il client per prima cosa inizia una connessione TCP con il server. Una volta stabilita, i processi client e server accedono a TCP attraverso le proprie socket. Il protocollo HTTP non si deve preoccupare dei dati smarriti o di altre perdite poiché per quelle operazioni ci penserà il TCP. Il client invia richieste e riceve risposte HTTP tramite la propria interfaccia socket, analogamente il server riceve richieste e invia messaggi di risposta attraverso la propria interfaccia socket. Dato che i server HTTP non mantengono informazioni sui client, HTTP è classificato come protocollo senza memoria di stato(stateless protocol). Un web server è sempre attivo, ha un indirizzo IP fisso e risponde potenzialmente alle richieste provenienti da milioni di diversi browser. Figure 2.2.1: Comportamento richiesta-risposta di HTTP 2.2.2 Connessioni persistenti e non persistenti Nelle connessioni persistenti il server lascia la connessione TCP aperta dopo l’invio della risposta, mentre le connessioni non persistenti ad ogni richiesta da parte di un client si aprirà una connessione e finito l’invio dei dati sarà chiusa. Consideriamo il caso di una pagina HTML principale e di 10 immagini JPEG, e che tutti gli undici oggetti risiedano sullo stesso server. L’URL del file HTML è http : //www.someSchool.edu/someDepartment/home.index. Il processo client HTTP inizializza una connessione TCP con il server www.someSchool.edu sulla porta 80, che è la porta di default per HTTP. Associate alla connessione TCP ci saranno un socket per il client e una per il server; Il client HTTP, tramite la propria socket, invia al server un messaggio di richiesta HTTP che include il percorso /someDepartment/home.index; Il processo server HTTP riceve il messaggio di richiesta attraverso la porta socket associ- ata alla connessione, recupera l’oggetto /someDepartment − /home.index dalla memoria, lo incapsula in un messaggio di risposta HTTP che viene inviato al client attraverso il socket; Il processo server HTTP comunica a TCP di chiudere la connessione. Questo, però, non termina la connessione finché non sia certo che il client abbia ricevuto integro il messag- gio di risposta; CHAPTER 2. LIVELLO APPLICATIVO 16 Il client HTTP riceve il messaggio di risposta. La connessione TCP termina. Il messaggio indica che l’oggetto incapsulato è un file HTML. Il client estrae il file dal messaggio di risposta, esamina il file HTML e trova i riferimenti ai 10 oggetti JPEG; Vengono quindi rIPetuti i primi quattro passi per ciascuno degli oggetti JPEG referen- ziati. Figure 2.2.2: Calcolo approssimato del tempo necessario per richiedere e ricevere un file HTML. I passi appena rIPortati illustrano l’utilizzo di connessioni non persistenti, in cui ogni connes- sione TCP viene chiusa dopo l’invio dell’oggetto da parte del server: vale a dire che ciascuna trasporta soltanto un messaggio di richiesta e un messaggio di risposta. Pertanto, in questo esempio, vengono generate 11 connessioni TCP. L’immagine 2.2.2 rappresenta un’apertura di connessione HTTP Le prime due frecce rappresentano l’inizializzazione della connessione TCP. La terza freccia è una richiesta da parte dell’utente di ottenere la struttura della pag- ina(GET) e il server invia la pagina(REPLY) che conterrà l’oggetto richiesto. HTTP con connessioni persistenti Nelle connessioni persistenti il server lascia la connessione TCP aperta dopo l’invio di una risposta, per cui le richieste e le risposte successive tra gli stessi client e server possono essere trasmesse sulla stessa connessione. Queste richieste di oggetti possono essere effettuate una di seguito all’altra senza aspettare le risposte delle richieste pendenti. Formato dei messaggi HTTP Un tipico messaggio di richiesta HTTP è: GET /somedir/page.html HTTP/1.1 host: www.someschool.edu Connection: close User-agent: Mozzila/5.0 Accept-language: en La prima riga è detta riga di richiesta e quelle successive righe di intestazione. La riga di richiesta presenta 3 campi: il campo metodo, il campo URL e il campo versione di HTTP. CHAPTER 2. LIVELLO APPLICATIVO 17 La riga host specifica l’host su cui risiede l’oggetto; La linea di intestazione Connection:close definisce che il browser sta comunicando al server che utilizza una connesione non persistente; User-Agent:Mozilla/5.0 specifica il tIPo di browser che sta effettuando la chiamata; Accept-Language: rappresenta una delle molte intestazioni comprese in HTTP; Figure 2.2.3: Formato generale dei messaggi di richiesta HTTP Messaggio di risposta HTTP HTTP/1.1 200 OK Connection: close Date: Wed, 20 Oct 2021 20:20:20 GMT Server: Apache/2.2.3 (CentOS) Last-Modified: Mon, 18 Oct 2021 11:12:13 GMT Content-Length: 6821 Content-Type: text/html (data data data data data data...) Analizzando in dettaglio questo messaggio di risposta, si osservano tre sezioni: una riga di stato iniziale, sei righe di intestazione e il corpo che contiene l’oggetto richiesta. la riga di stato presenta tre campi: la versione del protocollo, un codice di stato e un corrispettivo messaggio di stato; la riga Date: indica l’ora e la data di creazione e invio da parte del server; Server: indica che il messaggio è stato generato da un web server Apache; la riga Last-Modified: indica l’istante e la data il cui oggetto è stato creato o modificato per l’ultima volta; la riga Content-Type: tIPo dell’oggetto; Figure 2.2.4: Formato generale dei messaggi di risposta HTTP CHAPTER 2. LIVELLO APPLICATIVO 18 2.2.3 Codici comuni 200 OK: la richiesta ha avuto successo; 301 Moved Permanently: l’oggetto richiesto è stato trasferito in modo permanente; 400 Bad Request: si tratta di un codice di errore che indica che la richiesta non è stata compresa dal server; 404 Not Found: il documento richiesto non esiste sul server; 505 HTTP Version Not Supported: il server non dispone della versione di protocollo HTTP richiesta. 2.2.4 Cookie Dato che i server HTTP sono privi di stato per autenticare gli utenti, il protocollo adotta i cookie per poter riconoscere i client che si sono connessi. La prima volta che un utente visita un sito esso può fornire un’ identificazione. Successivamente il browser passa un’intestazione di cookie al server che durante tutte le successive visite al sito identifica l’utente sul server. I cookie possono essere usati per creare un livello di sessione utente al di sopra di HTTP che, come detto in precedenza, è privo di stato. Figure 2.2.5: Memorizzazione dello stato dell’utente con i cookie Per esempio, quando un utente si identifica in un’applicazione di posta elettronica basata su Web, come Hotmail, il browser invia le informazioni del cookie al server, permettendo a quest’ultimo di identificare l’utente attraverso la sessione utente dell’applicazione. La tecnolo- gia del cookie presenta quattro componenti: una riga di intestazione nel messaggio di risposta HTTTP; una riga di intestazione nel messaggio di richiesta HTTP; un file mantenuto nel sistema dell’utente e gestito dal browser; un database sul sito; 2.2.5 Web Caching Una web cache, nota come proxy server, è un’entità di rete che soddisfa le richieste HTTP al posto del web server effettivo. Il proxy ha una propria memoria su disco in cui conserva copie CHAPTER 2. LIVELLO APPLICATIVO 19 di oggetti recentemente richiesti. Una volta configurato il browser, ogni richiesta di oggetto da parte del browser viene inizialmente diretta al proxy. Figure 2.2.6: Client che richiedono oggetti attraverso un proxy server. Supponiamo per esempio che un browser stia richiedendo l’oggetto http : //www.someschool.edu/campus.gi f Ecco cosa succede: 1. Il browser stabilisce una connessione TCP con il proxy server e invia una richiesta HTTP per l’oggetto specificato; 2. Il proxy controlla la presenza di una copia dell’oggetto memorizzata localmente. Se l’oggetto viene rilevato, il proxy lo inoltra all’interno di un messaggio di risposta HTTP al browser; 3. Se, invece la cache non dispone dell’oggetto, apre una connessione TCP verso il server di origine; ossia, nel nostro esempio, www.someschool.edu. Poi, il proxy invia al server una richiesta HTTP per l’oggetto. Una volta ricevuta tale richiesta, il server di origine invia al proxy l’oggetto all’interno di una risposta HTTP; 4. Quando il proxy riceve l’oggetto ne salva una copia nella memoria locale e ne inoltra un’altra copia, all’interno di un messaggio di risposta HTTP, al browser. Il web caching permette di ridurre in modo sostanziale i tempi di risposta alle richieste dei client e in secondo luogo riduce il traffico su internet migliorando le prestazione dell’applicazione. 2.2.6 GET condizionale Sebbene il web caching riduce i tempi di risposta può essere che la copia di un oggetto che risiede in cache possa essere scaduta ( l’oggetto può essere stato modificato rispetto alla copia del client). HTTP presenta un meccanismo che permette alla cache di verificare se i suoi oggetti sono modificati tramite il GET condizionale che a differenza del GET tipico differisce per la riga di intestazione If-modified-since. Il proxy effettua un controllo di aggiornamento in- viando un GET condizionale e cosı̀ aggiorna l’oggetto nella propria memoria. Per mostrare il funzionamento del GET condizionale, consideriamo un esempio. Per prima cosa un proxy invia un messaggio di richiesta a un web server per conto del browser richiedente: GET /fruit/kiwi.gif HTTP/1.1 host: www.exotiquecuisine.com Poi, il web server invia al proxy un messaggio di risposta con l’oggetto richiesto: HTTP/1.1 200 OK Date: Sat, 3 Oct 2015 15:39:29 CHAPTER 2. LIVELLO APPLICATIVO 20 Server: Apache/1.3.0 (Unix) Last-Modified: Wed, 9 Sep 2015 09:23:24 Content-Type: image/gif (data data data data data...) Il proxy inoltra l’oggetto al browser richiedente e pone anche l’oggetto nella cache locale. La cache memorizza con l’oggetto anche l’ultima data di modifica. Poi, una settimana più tardi, un altro browser richiede lo stesso oggetto attraverso il proxy, e l’oggetto si trova ancora nella cache. Dato che tale oggetto può essere stato modificato nel web server durante la settimana trascorsa, il proxy effettua un controllo di aggiornamento inviando un GET condizionale. GET /fruit/kiwi.gif HTTP/1.1 host: www.exotiquecuisine.com If-modified-since: Wed, 9 Sep 2015 09:23:24 Si osservi che il valore della riga I f − modi f ied − since equivale esattamente al valore della riga di intestazione Last − Modi f ied inviata una settimana prima. Questo GET condizionale sta co- municando al server di inviare l’oggetto solo se è stato modificato rispetto alla data specificata. Supponiamo che l’oggetto non sia stato modificato dalle 9:23:24 del 9 settembre 2015. Allora il web server invia un messaggio di risposta al proxy: HTTP/1.1 304 Not Modified Date: Sat, 10 Oct 2015 15:39:29 Server: Apache/1.3.0 (Unix) (corpo vuoto) Notiamo che in risposta a un GET condizionale, il web server invia ancora un messaggio di risposta, ma non include l’oggetto richiesto, in quanto ciò implicherebbe solo spreco di banda e incrementerebbe il tempo di risposta percepito dall’utente, in particolare se l’oggetto è grande. 2.3 DNS Gli host all’interno della rete internet sono identificati tramite l’ indirizzo IP che è univoco. Per accedere ad un sito web si va sulla barra di ricerca di un browser e si scrive il nome del sito, la domanda che ci pone è com’è possibile che un nome identifichi un servizio web? Ciò avviene grazie al DNS(Domain Name System) che traduce i nomi degli host nei loro indirizzi IP. IL DNS è un database distribuito implementato in una gerarchia di DNS Server e un pro- tocollo a livello di applicazione che consente agli host di interrogare il database. Il protocollo DNS utilizza UDP e la porta 53. Consideriamo cosa succede quando un browser in esecuzione sull’host di un utente richiede l’URL www.someschool.edu/index.html. L’host dell’utente, per essere in grado di inviare un messaggio di richiesta HTTP al web server www.someschool.edu, deve come prima cosa ottenere il suo indirizzio IP. Ciò avviene come segue: 1. La stessa macchina utente esegue il lato client dell’applicazione DNS; 2. Il browser estrae il nome dell’host, www.someschool.edu, dall’URL e lo passa al lato client dell’applicazione DNS; 3. Il client DNS invia una interrogazione (query) contenente l’hostname a un DNS server; 4. Il client DNS prima o poi riceve una risposta, che include l’indirizzo IP corrispondente all’hostname; 5. Una volta ricevuto l’indirizzo IP dal DNS, il browser può dare inizio a una connessione TCP verso il processo server HTTP collegato alla porta 80 di quell’indirizzo IP; CHAPTER 2. LIVELLO APPLICATIVO 21 Da questo esempio vediamo che il DNS introduce un ritardo aggiuntivo alle applicazioni Inter- net che lo utilizzano. Il DNS viene anche utilizzato per distribuire il carico tra server replicati, per esempio dei web server. I siti con molto traffico, vengono replicati su più server, ognuno eseguito su un host diverso con un indirizzo IP differente.Quando i client effettuano una query DNS per un nome associato a un insieme di indirizzi, il server risponde con l’intero insieme di indirizzi, ma ne varia l’ordinamento a ogni risposta. Dato che generalmente un client invia il suo messaggio di richiesta HTTP al primo indirizzo IP elencato nell’insieme. Figure 2.3.1: Gerarchia parziale di server DNS 2.3.1 Gerarchia dei server Esistono 3 tipi di DNS Server: root-server: In internet esistono 400 root server, ai fini di sicurezza e affidabilità ciascuno di essi è un cluster di server. I root server forniscono gli indirizzi IP dei server TLD; Top-level domain(TLD) server. Questi si server si occupano dei domini di primo livello quali.com,.org,.net, e tutti i domini di primo livello relativi ai vari paesi,.uk,.fr,.it. Server Locale. Ciascun ISP ha un DNS server locale che risolve il dominio. Un DNS server locale è solitamente “vicino“ all’host. Nel caso di un ISP istituzionale si può trovare sulla stessa rete locale dell’host, mentre negli ISP residenziali sono abitualmente sepa- rati da un numero limitato di router. Esempio www.univr.it it→ TLD server, dominio principale; univr→DNS locale, dominio locale; www→DNS locale, macchina specificata all’interno della rete locale; Si legge da destra verso sinistra. Un’interazione tra client e server DNS può essere la seguente: CHAPTER 2. LIVELLO APPLICATIVO 22 Figure 2.3.2: Esempio DNS 1. Il server locale DNS non riconosce l’URL; 2. Il server locale DNS chiede al root-server il TLD di.org; 3. Il root-server ritorna il TLD; 4. il DNS Locale richiede il server di site.org; 5. Un altro DNS Locale che è il server di site.org risponderà col proprio Indirizzo IP; 6. il DNS Locale richiede l’IP di www.site.org; 7. Il server ritorna la risposta al DNS Locale; 8. Indirizzo IP richiesto dal client è arrivato; 2.3.2 DNS Caching Il DNS sfrutta in modo estensivo il caching per migliorare le prestazioni. Nell’internet ci sono una serie di cache vicino all’utente che viene rigirato alla cache più vicina. Se una coppia hostname/indirizzo IP è nella cache di un DNS server e giunge al server un’altra richiesta con lo stesso hostname, il DNS server può fornire l’indirizzo IP desiderato, anche se non è autoritativo per tale indirizzo. Dato che gli host e le associazioni tra nome e indirizzo IP non sono in alcun modo permanenti, i DNS server invalidano le informazioni in cache dopo un periodo di tempo fissato. 2.4 Servizio di Posta Elettronica Per l’invio di email si utilizza il protocollo SMTP(simple mail transfer protocol), mentre per la ricezione ne cito alcuni IMAP,HTTP,POP che non è più utilizzato. Tutti questi protocolli si appoggiano al protocollo TCP, sono di tIPo client-server. 2.4.1 Architettura Un server di posta è costituito da: coda di messaggi in uscita; un’insieme di caselle, ciascuna per un utente; CHAPTER 2. LIVELLO APPLICATIVO 23 Figure 2.4.1: Esempio invio di un’email 2.4.2 SMTP SMTP trasferisce i messaggi dal mail server del mittente a quello del destinatario. Il client SMTP fa stabilire a TCP una connessione sulla porta 25 verso il server SMTP (in esecuzione sul mail server in ricezione). Se il server è inattivo, rIProva più tardi. Una volta stabilita la connessione, il server e il client effettuano qualche forma di handshaking a livello applicativo. Durante questa fase, il client indica l’indirizzo e-mail del mittente e quello del destinatario. Se andato a buon fine, il client invia il messaggio. Figure 2.4.2: Esempio SMTP Il client ripete il processo sulla stessa connessione TCP se ha altri messaggi da inviare al server altrimenti ordina a TCP di chiudere la connessione. Il protocollo SMTP viene definito come un protocollo di push: il mail server di invio spinge i file al mail server in ricezione. HTTP, invece, è un protocollo pull: qualcuno carica informazioni su un web server e gli utenti usano HTTP per attirare a sé dal server. Chapter 3 Livello di trasporto Internet mette a disposizione del livello di applicazione due diversi protocolli. Uno è UDP(user datagram protocol), che fornisce alle applicazioni un servizio non affidabili e non orientato alla connessione, l’altro è TCP(transmission control protocol), che offre un servizio affidabile e orien- tato alla connessione. 3.1 TCP TCP è un protocollo che opera a livello di trasporto. Una delle sue caratteristiche è l’essere orientato alla connessione, in quanto prima di scambiarsi dei dati, viene stabilita una connes- sione punto a punto tra un client ed un server nel quale stabiliscono dei parametri che carat- terizzeranno la connessione. La cosa interessante è che la quantità massima di dati prelevabili e posizionabili in un segmento viene limitata dalla dimensione massima di segmento(MSS,maximum segment size). Questo valore viene impostato sottraendo la lunghezza degli header alla lunghezza del frame più grande che può essere inviato a livello fisico/data link, la cosiddetta unità trasmissiva massima(MTU,maximum transmission unit). MSS = MTU − Headers Può capitare che in una connessione TCP debbano essere inviati segmenti di dimensione più grande dell’Maximum Segment Size, ciò che viene fatto è suddividere l’informazione in più segmenti di dimensione inferiore alla MSS. TCP accoppia ogni blocco di dati del client con un’intestazione TCP, andando pertanto a formare segmenti TCP. Questi vengono passati al sottostante livello di rete dove sono incapsulati separatamente nei datagrammi IP a livello di rete che vengono poi immessi nella rete. 3.1.1 Struttura dei segmenti TCP Il segmento TCP consiste di campi intestazione e di un campo contenete un blocco di dati proveniente dall’applicazione. TCP, quando deve inviare un file di grandi dimensioni, di solito frammenta in file in porzioni di dimensione MSS (a parte l’ultima che sarà più piccola). La dimensione dell’Header TCP è di 20byte. 24 CHAPTER 3. LIVELLO DI TRASPORTO 25 Figure 3.1.1: Struttura Header TCP L’intestazione dei segmenti TCP comprende i seguenti campi: Porta sorgente(16 bit): è la porta che identifica il processo del client che ha iniziato la connessione. Esistono 2 tipi di porte 1. statiche: sono fisse e riservate, assegnate ad applicazioni standard lato server (HTTP 80,HTTPS 443, SMTP 25) vanno da 0 a 1023; 2. dinamiche: sono create dal sistema operativo lato client quando inizio una connes- sione. Vanno da 1024 a 65356; Porta destinazione(16 bit): porta che identifica il processo del server; Sequence Number(16 bit): è il numero di sequenza per un segmento, quando il messag- gio è spezzato tramite il MSS in segmenti, ognuno di questi viene identificato tramite un identificativo sequenziale; Acknowledge Number(16 bit): è un numero di riscontro; checksum(16 bit): permette di controllare se ci sono stati errori nell’header TCP; Window(16 bit): viene utilizzato per il controllo del flusso; flag(6bit) il bit ACK viene usato per indicare che il segmento contiene un acknowledg- ment per un segmento che è stato ricevuto con successo. I bit SYN, e FIN vengono utiliz- zati per impostare e chiudere la connessione. I bit RST, PSH, URG non li tratteremo nel corso degli appunti; 3.2 Acknowledge e Sequence Number TCP vede i dati come un flusso di byte non strutturati, ma ordinati.Il campo Sequence Number per un segmento è pertanto il numero nel flusso di byte del primo byte del segmento. Per esempio, supponiamo che un processo nell’host A voglia inviare un flusso di dati a un processo sull’host B su una connessione TCP. TCP sull’host A numera implicitamente ogni byte del flusso di dati. Ipotizziamo che il flusso di dati consista in un file da 500.000 byte, che MSS valga CHAPTER 3. LIVELLO DI TRASPORTO 26 1000 byte e che il primo byte del flusso sia numerato con O. Il numero totale dei segmenti è dato da 500k/1000 = 500. Quindi il primo segmento sarà numerato con 0, il secondo dato che il primo segmento ha dimensione 1KB (0 − 999) sarà assegnato il sequence number 1000, il terzo 2000 e cosı̀ via. Figure 3.2.1: Divisione di un file di dati in segmenti TCP Il numero di acknowledgement che l’host A scrive nei propri segmenti è il numero di se- quenza del byte successivo che l’host A attende dall’host B. Supponiamo che l’host A abbia ricevuto da B tutti i byte numerati da 0 a 99 e che A stia per mandare un messaggio all’host B. L’host A è in attesa del byte 100 e dei successivi byte nel flusso di dati di B, pertanto l’host A scrive 100 nel campo del numero di acknowledgment del segmento che spedisce a B. Figure 3.2.2: Numeri di sequenza e di acknowledgement Come ulteriore esempio, supponiamo che l’host A abbia ricevuto un segmento dall’host B contenente i byte da 0 a 99 e un altro segmento contenente i byte da 200 a 300. Per qualche motivo l’host A non ha ancora ricevuto i byte da 100 a 199. In questo esempio, l’host A sta ancora attendendo il byte 100 (e i successivi) per ricreare il flusso di dati di B. Perciò il prossimo segmento di A destinato a B conterrà 10 nel campo del numero di acknowledgement. Dato che TCP effettua l’acknowledgment solo dei byte fino al primo byte mancante nel flusso, si dice che tale protocollo offre acknowledgement cumulativi (cumulative acknowledgement) TCP utilizza la tecnica Positive ACK with Retrasmission 3.3 Checksum 1. Header e segmento vengono utilizzati come input per una funzione f; 2. Il risultato della funzione f viene inserito all’interno del checksum; 3. si invia il segmento ad un altro host; CHAPTER 3. LIVELLO DI TRASPORTO 27 4. L’host che riceve il segmento utilizza il segmento e l’header senza checksum come input della funzione f ; 5. se l’output della funzione e il campo checksum coincidono allora non ci sono stati errori 3.4 Gestione delle connessioni 3.4.1 Apertura connessione TCP Come citato inizialmente, quando un processo client vuole comunicare con un server con TCP, ha bisogno di scambiare parametri con il server per aprire la connessione e per configurarla. Il modo standard per instaurare una connessione TCP è il seguente: TCP lato client invia un segmento formato solamente dall’Header (non contiene pay- load). Nei 6 bit di flag c’è un campo denominato SYN che è impostato ad 1, per tale motivo il segmento viene detto segmento SYN. Questa configurazione è riconosciuta dal server come una richiesta di aprire una connessione. Nel campo SN(sequence number) il client inserisce un numero di sequenza iniziale casuale (client isn) che verrà salvato sia sul client che sul server, ciò avviene per difendersi da probabili attacchi hacker. Il server ha bisogno di salvare nel proprio spazio RAM alcuni parametri per gestire tale connessione; Quando il datagramma TCP SYN raggiunge il server, il server alloca i buffer e le vari- abili TCP alla connessione, legge il segmento ed invia una risposta formata anche questa solamente dall’header. Il segmento che invia ha tre caratteristiche importanti: – il bit SYN è impostato ad 1; – il campo ACK assume il valore client isn+1; – il server sceglie il proprio numero di sequenza iniziale (server isn) e lo pone nel campo del numero di sequenza.1 Il segmento di connessione inviato prende il nome di segmento SYNACK. Alla ricezione del segmento SYNACK, anche il client alloca buffer e variabili alla connes- sione. L’host client invia un segmento senza payload ponendo nel campo ACK server isn + 1. Tale procedura prende il nome di handshake a tre vie. Figure 3.4.1: Handshake a tre vie di TCP 1 Ho ricevuto il tuo pacchetto SYn per iniziare una connessione con il tuo numero di sequenza iniziale, client isn.Sono d’accordo nello stabilire questa connessione. Il mio numero di sequenza iniziale è server isn CHAPTER 3. LIVELLO DI TRASPORTO 28 3.4.2 Chiusura di una connessione TCP Ciascuno dei due processi(client, server) che partecipano alla connessione può terminarla e le risorse allocate in memoria vengono deallocate. Il processo che vuole chiudere la connessione dovrà inviare un segmento con bit FIN impostato ad 1. Il client TCP, quindi, attende dal server un segmento TCP con un acknowledgement. Successivamente il client aspetta un altro seg- mento TCP da parte del client con bit FIN impostato ad 1 e all’arrivo di tale pacchetto il client invia un segmento TCP con acknowledgement per confermare la chiusura della connessione. Figure 3.4.2: Chiusura di una connessione TCP 3.4.3 Timeout e stima del tempo di andata e ritorno TCP crea un servizio di trasporto dati affidabile, si assicura che vengano ricevuti i segmenti in- viati alla destinazione. Se invio un segmento e non ricevo l’ACK riguardante il segmento invi- ato, ritrasmette il segmento. Il tempo che il client attende per una risposta è il RTO(Retrasmission Timeout) che ad ogni invio di segmento è settato da parte dell’inviante, se entro questo tempo non riceve la risposta, rimanda il segmento.L’RTO dipende dal valore del RTT(tempo che in- tercorre tra l’invio di una richiesta e la ricezione della risposta) chiamato anche SampleRTT. TCP non misura il SampleRTT per ogni segmento, ma effettua una sola misurazione alla volta. I campioni ricevuti sono variabili perciò per avere una stima reale, si calcola una media dei valori di SampleRTT che è l’EstimatedRTT. Quando si ottiene un nuovo SampleRTT, TCP ag- giorna EstimatedRTT secondo la formula: EstimatedRTT = (1 − α) EstimatedRTT + α SampleRTT In base al valore che prende α (standard è 18 ) do peso alla media oppure al nuovo RTT calco- lato.EstimatedRTT è una media ponderata dei valori SampleRTT e questo calcolo è denomi- nato EWMA(exponential weighted moving average. L’RTO invece era calcolato2 come RTO = βSRTTattuale 2 Questa formula era utilizzata precedentemente, ora è deprecata poiché insieme alla media ponderata viene anche utilizzata la varianza per determinare la stima CHAPTER 3. LIVELLO DI TRASPORTO 29 Figure 3.4.3: Rtt medio e stima Oltre ad avere una stima di RTT, è anche importante possedere la misura della sua variabilità. DevRTT, definisce la variazione RTT, come una stima di quanto SampleRTT generalmente si discosta da EstimatedRTT: DevRTT = (1 − β) × DevRTT + β × |SampleRTT − EstimatedRTT | Quali valori andrebbero usati per l’intervallo di timeout di TCP? L’intervallo non può essere inferiore a quello di EstimatedRTT, altrimenti verrebbero inviate ritrasmissioni non necessarie. Ma l’intervallo stesso non dovrebbe essere molto maggiore di EstimatedRTT, altrimenti TCP non ritrasmetterebbe rapidamente il segmento perduto, il che comporterebbe gravi ritardi sul trasferimento dei dati. Quindi l’intervallo di timeout di ritrasmissione(RTO) è: TimeoutInterval = EstimatedRTT + 4 × DevRTT Viene raccomandato un valore iniziale di TimeoutInterval pari a 1 secondo. Inoltre, quando si verifica un timeout, TimeoutInterval viene raddoppiato per evitare un timeout prematuro riferito a un segmento successivo per cui si riceverà presto un acknowledgement 3.5 Trasferimento dati affidabile TCP crea un servizio di trasporto dati affidabile al di sopra del servizio inaffidabile e best- effort di IP, assicurando che il flusso di byte che i processo leggono non sia alterato, non abbia buchi, non presenti duplicazioni e rispetti la sequenza originaria; in altre parole, il flusso di dati è esattamente quello spedito. Esistono tre eventi principali relativi alla trasmissione e ritrasmissione dei dati: dati provenienti dall’applicazione: TCP incapsula i dati che gli giungono dall’applicazione in un segmento e lo passa a IP. Ciascun segmento include un numero di sequenza che rap- presenta il numero del primo byte di dati del segmento nel flusso di byte. Inoltre, se il timer non è già in funzione per qualche altro segmento, TCP lo avvia quando il segmento viene passato a IP. L’intervallo di scadenza per il timer è TimeoutInterval; timeout: TCP risponde ritrasmettendo il segmento che lo ha causato e quindi riavviando il timer; acknowledgement: TCP confronta il valore y di ACk con la propria variabile SendBase. La variabile di stato TCP SendBase è il numero di sequenza del più vecchio byte che non ha ancora ricevuto un acknowledgement. Di conseguenza SendBase - 1 è il numero di sequenza dell’ultimo byte che si sa di essere stato ricevuto correttamente nell’ordine CHAPTER 3. LIVELLO DI TRASPORTO 30 giusto. Se y è maggiore di SendBase, allora l’ACK si riferisce a uno o più segmenti che precedentemente non avevano ancora ricevuto conferma. Quindi, il mittente aggiorna la propria variabile SendBase e poi riavvia il timer; Alcuni scenari interessanti Supponiamo che l’host A spedisce un segmento all’host B, questo segmento abbia un numero di sequenza 92 e contenga 8 byte di dati. Dopo aver inviato il segmento, A attende un seg- mento da B con numero di acknowledgement 100. Sebbene il segmento in questione sia stato ricevuto da B, l’acknowledgement sul percorso inverso viene smarrito. In questo caso si veri- fica l’evento di timeout e l’host A ritrasmette lo stesso segmento. Ovviamente, quando l’host B riceve la ritrasmissione, rileva dal numero di sequenza che il segmento contiene dati che sono già stati ricevuti. Quindi, l’host B scarta i byte del segmento ritrasmesso. Figure 3.5.1: Ritrasmissione dovuta alla perdita di un ack L’host A invia due segmenti. Il primo ha numero di sequenza 92 e 8 byte di dati, il secondo ha numero di sequenza 100 e 20 byte di dati. Supponiamo che entrambi arrivino intatti a B e che questo invii due acknowledgement separati per i segmenti, il primo numerato 100, il secondo 120. Supponiamo ora che nessuno degli acknowledegment arrivi all’host A prima del timeout. Quando si verifica il timeout, l’host A rispedisce il primo segmento con numero di sequenza 92 e riavvia il timer. Fino a quando l’ACK del secondo segmento non arriva prima del nuovo timeout, il secondo segmento non sarà ritrasmesso. Figure 3.5.2: Segmento 100 non ritrasmesso Supponiamo infine che l’host A invii due segmenti. L’acknowledgement del primo segmento CHAPTER 3. LIVELLO DI TRASPORTO 31 viene perso nella rete ma, appena prima dell’evento di timeout, l’host A riceve un acknowl- edgement con numero 120.È, pertanto, a conoscenza che l’host B ha ricevuto tutto fino al byte 119; quindi non rispedisce nessuno dei due segmenti. Figure 3.5.3: Acknowledgement cumulativo che evita le ritrasmissioni del primo segmento. 3.5.1 Raddoppio dell’intervallo di timeout Ora vediamo alcune varianti utilizzate nel TCP. La prima riguarda al raddoppio dell’intervallo di timeout. Con questa modifica, in tutti i casi in cui si verifica un timeout, TCP, ritrasmette il segmento con più basso numero di sequenza che non abbia ancora ricevuto un acknowl- edgment. Ogni volta che ciò si verifica, TCP imposta il successivo intervallo di timeout al doppio del valore precedente. Questa modifica offre una forma limitata di controllo di con- gestione poiché la scadenza del timer viene probabilmente causata dalla congestione nella rete e nei periodi di congestione se le sorgenti continuano a ritrasmettere pacchetti peggiorano la situazione. 3.5.2 Ritrasmissione rapida Uno dei problemi legati alle ritrasmissioni è che il periodo di timeout può rivelarsi relativa- mente lungo. Quando si smarrisce un segmento, il lungo periodo di timeout impone al mit- tente di ritardare il nuovo invio di segmenti. Dato che in molti casi il mittente invia un gran numero di segmenti, se uno di questi viene smarrito ci saranno probabilmente molti ACK duplicati. Nel caso in cui siano stati ricevuti tre ACK duplicati, il mittente TCP effettua una ritrasmissione rapida (fast retransmit), rispedendo il segmento mancante prima che scada il timer. CHAPTER 3. LIVELLO DI TRASPORTO 32 Figure 3.5.4: Ritrasmissione veloce: il segmento perduto viene ritrasmesso prima che il suo timer scada 3.5.3 Controllo del flusso TCP offre controllo di flusso facendo mantenere al mittente una variabile chiamata finestra di ricezione(receive window) che, in sostanza, fornisce al mittente un’indicazione dello spazio libero disponibile nel buffer del destinatario. Supponiamo che l’host A stia inviando un file di grandi dimensioni all’host B su una connessione TCP. Quest’ultimo alloca un buffer di ricezione per la connessione, la cui dimensione è denotata come RcvBu f f er. Di tanto in tanto, il processo applicativo nell’host B legge dal buffer. Definiamo le seguenti variabili: LastByteRead: numero dell’ultimo byte nel flusso di dati che il processo applicativo in B ha letto dal buffer; LastByteRcvd: numero dell’ultimo byte, nel flusso di datti, che proviene dalla rete che è stato copiato nel buffer di ricezione di B; Dato che TCP non può mandare in overflow il buffer allocato, dovremo avere LastByteRcvd − LastByteRead ≤ RcvBu f f er La finestra di ricezione, indicata con rwnd, viene impostata alla quantità di spazio disponibile nel buffer: rwnd = RcvBu f f er − [ LastByteRcvd − LastByteRead] Dato che lo spazio disponibile varia col tempo, rwnd è dinamica. Come viene usata la variabile rwnd da parte della connessione per offrire il servizio di controllo di flusso? L’host B comunica all’host A quanto spazio disponibile sia presente nel buffer della connessione, scrivendo il valore corrente di rwnd nel campo apposito dei segmenti che manda ad A. L’host B inizializza rwnd con il valore RcvBu f f er e, ovviamente, deve tenere traccia di variabili specifiche per ogni connessione. A sua volta, l’host A tiene traccia di due variabili, LastByteSent e LastByteAcked, il cui significato è rispettivamente “ultimo byte mandato“ e “ultimo byte per cui si è ricevuto acknowledgement“. CHAPTER 3. LIVELLO DI TRASPORTO 33 Figure 3.5.5: Finestra di ricezione (rwnd) e buffer di ricezione (RcvBuffer) Si noti che la differenza tra i due esprime la quantità di dati spediti da A per cui non si è ancora ricevuto un acknowledgement. Mantenendo la quantità di dati senza acknowledgement al di sotto il valore di rwnd, si garantisce che l’host A non mandi in overflow il buffer di ricezione dell’host B. Quindi l’host A si assicura che per tutta la durata della connessione sia rispettata la disuguaglianza: LastByteSent − LastByteAcked ≤ rwnd 3.5.4 Controllo di congestione L’approccio scelto da TCP nel gestire le congestioni consiste nell’imporre a ciascun mittente un limite alla velocità di invio sulla propria connessione in funzione della congestione percepita. Il meccanismo di controllo congestione TCP fa tener traccia alla variabile finestra di conges- tione(congestion window), indicata con cwnd, che impone un veicolo alla velocità di immissione di traffico sulla rete da parte del mittente. Come fanno i mittenti TCP a determinare la loro velocità di trasmissione in modo da non congestionare la rete, ma allo stesso tempo utilizzare tutta la banda disponibile? TCP si basa su 2 principi guida: Un segmento perso implica congestione, quindi ad ogni segmento perso si decrementa la congestion window. Ricordiamo che un segmento perso significa che durante l’ RTO il segmento di risposta del server ACK non è stato ricevuto. Un acknowledgement indica che la rete sta consegnando correttamente i segmenti dal mittente al ricevente, senza ricevere ACK duplicati, quindi aumenta la congestion win- dow. Il segmento ACK è stato ricevuto dal mittente durante l’RTO; Con queste due regole da seguire, il mittente TCP aumenta la sua velocità di trasmissione per rilevare a che tasso trasmissivo comincia a verificarsi la congestione, rallenta e quindi inizia di nuovo la fase di rilevamento per trovare se il punto di inizio della congestione è cambiato. Pos- siamo ora concentrarci sugli algoritmi di controllo di congestioni di TCP: slow start, congestion avoidance, fast recovery. Slow Start Quando si stabilisce una connessione TCP il valore cwnd è inizializzato a 1 MSS, il che com- porta una velocità di invio iniziale di circa MSS/RTT. Si incrementa di 1 MSS ogni volta che un segmento trasmesso riceve un acknowledgement. Consideriamo il seguente esempio: CHAPTER 3. LIVELLO DI TRASPORTO 34 Figure 3.5.6: Slow Start TCP Se il segmento riceve un acknowledgement prima che si verifichi un evento di perdita, il mit- tente incrementa la finestra scorrevole(cwnd) di 1 MSS e invia due segmenti di dimensione massima.Questi segmenti ricevono a loro volta degli acknowledgment e il mittente incrementa la finestra di congestione di 1 MSS per ciascuno di essi portandola a 4 MSS e cosı̀ via. Questo processo ha come effetto il raddoppio della velocità trasmissiva a ogni RTT. Quindi, in TCP, la velocità di trasmissione parte lentamente, ma cresce in modo esponenziale durante la fase di slow start. Se ci dovesse essere un evento di perdita, il mittente TCP pone il valore di cwnd pari a 1 e inizia di nuovo il processo slow start. Inoltre pone ssthresh(slow start threshold) a cwnd/2: metà del valore che aveva la finestra di congestione quando è stata rilevata la perdita del segmento. La fase di slow start finisce quando la cwnd raggiunge il valore della sstresh e si entra in congestion avoidance. Figure 3.5.7: Grafico Slow Start CHAPTER 3. LIVELLO DI TRASPORTO 35 Congestion Avoidance Quando TCP entra nello stato congestion avoidance, il cwnd è incrementato di 1 MSS per ogni 1 RTT. Per fare ciò il mettente TCP incrementa la propria cwnd di cwnd (oltre a far scorrere la finestra di 1 segmento a destra). Qui dopo l’invio di W segmenti, la finestra aumenta di 1: MSS cwndnew = cwndold + MSS ∗ cwnd Quando si verifica un timeout si comporta nello stesso modo di slow start: il valore di cwnd è posto a 1 MSS e il valore di ssthresh è impostato alla metà del valore di cwnd al momento del timeout. Figure 3.5.8: Congestion Avoidance Grafico A differenza dello Slow Start, Congestion Avoidance ha un andamento lineare3.5.8. Fast Recovery Durante la fase di fast recovery il valore di cwnd è incrementato di 1 MSS per ogni ACK dupli- cato ricevuto relativamente al segmento perso. Infine quando arriva un ACk per il segmento perso, TCP entra nello stato di congestion avoidance dopo aver ridotto il valore di cwnd. In poche parole viene trasmesso solamente il segmento perso, a differenza del Vanilla che ri- trasmette tutti i segmenti da quello perso, portando a duplicati. 3.6 UDP Il protocollo UDP è un protocollo connectionless, ovvero che non instaura una connessione per inviare dei segmenti e non affidabile cioè non si occupa del recupero dei segmenti persi. Questa sua caratteristica gli consente di essere molto più veloce nella trasmissione dei dati rispetto al protocollo TCP poiché non deve instaurare una connessione(Three way Handshake) con il ricevente e non deve chiuderla quando ha finito di trasmettere i dati. Questo protocllo è principalmente utilizzato nelle piattaforme di streaming oppure nell’invio di file multimediali. CHAPTER 3. LIVELLO DI TRASPORTO 36 Figure 3.6.1: Header UDP Chapter 4 Livello di Rete Il ruolo principale del livello di rete può essere identificato da due importanti funzioni: Inoltro: quando un router riceve un pacchetto, lo deve trasferire sull’appropriato col- legamento di uscita. Instradamento: il livello di rete deve determinare il percorso che i pacchetti devono seguire tramite algoritmi di instradamento. Per inoltrare i pacchetti, i router utilizzano delle tabelle salvate nelle proprie memorie che indicano l’interfaccia di uscita dove i pacchetti devono essere inviati in base all’indirizzo di destinazione. Queste tabelle vengono chiamate tabelle di inoltro e verranno trattate successi- vamente. Il livello di rete mette a disposizione un solo servizio, noto come best-effort che non garantisce l’ordinamento dei pacchetti, né la consegna. 4.1 Router Figure 4.1.1: Architettura di un router Un router può essere identificato da quattro componenti: Porte di ingresso. Svolgono le funzioni a livello fisico di terminazione di un collega- mento in ingresso al router, svolgono funzioni a livello di collegamento, necessarie per inter-operare come le analoghe funzioni all’altro capo del collegamento di ingresso. Svol- gono inoltre la funzione di ricerca, in modo che il pacchetto entrante esca sulla porta di uscita corretta; 37 CHAPTER 4. LIVELLO DI RETE 38 Struttura di commutazione: connette fisicamente le porte di ingresso a quelle di uscita, è interamente contenuta all’interno del router; Porte di uscita: memorizzano i pacchetti che provengono dalla struttura di commu- tazione e li trasmettono sul collegamento in uscita; Processore di instradamento: nei router tradizionali, esegue i protocolli di instrada- mento, gestisce le tabelle di inoltro e le informazioni sui collegamenti attivi ed elabora la tabella di inoltro per il router. 4.2 IP Attualmente sono in uso due versioni di IP. Esamineremo prima la versione 4, ampiamente adottato nell’infrastruttura odierna e successivamente tratteremo della versione IPV6. 4.2.1 Header IPv4 Il pacchetto a livello di rete è noto come datagramma. I principali campi dei datagrammi IPv4 sono i seguenti: Numero di Versione: indica la versione del protocollo utilizzato (IPv4 o IPv6); Lunghezza header: dato che un datagramma IPv4 può contenere un numero variabile di opzioni, questi 4 bit indicano dove iniziano effettivamente i dati del datagramma. Se un datagramma non dovesse contenere opzioni, la sua intestazione sarebbe di 20 byte; Service Type: è un codice che identifica la classe di servizio di datagrammi(per esempio, quelli che richiedono basso ritardo, alto throughput o affidabilità); Lunghezza del datagramma: rappresenta la lunghezza totale del datagramma IP, in- testazione più dati, misurata in byte. Dato che questo campo è di 16 bit, la massima dimensione dei datagrammi IP è 216 − 1 = 65535 byte. TTL: è stato incluso per assicurare che i datagrammi non restino in circolazione per sem- pre nella rete. Questo campo viene decrementato di un’unità quando il datagramma attraversa un hop(router), se arriva a 0 il pacchetto non.è più valido e viene inviato un messaggio di errore; Type: indica lo specifico protocollo a livello di trasporto al quale vanno passati i dati del datagramma; Protocollo: Questo campo è usato quando il datagramma raggiunge la destinazione fi- nale. Il valore del campo indica lo specifico protocollo a livello di trasporto ai quale vanno passati i dati del datagramma. Ad esempio il valore 6 indica che i dati sono desti- nati a TCP, il valore 17 designa UDP; Indentification,flag,Fragment Offset: questi tre campi servono per la frammentazione. Checksum dell’header: consente ai router di rilevare gli errori sui bit nei datagrammi ricevuti. È calcolato trattando ogni coppia di byte dell’intestazione come numeri che sono poi sommati in complemento a 1. Il risultato verrà salvato nel campo checksum. In ogni datagramma IP il router calcola il relativo checksum e rileva una condizione di errore se il checksum trasportato nell’intestazione del datagramma non corrisponde a quello calcolato; CHAPTER 4. LIVELLO DI RETE 39 Indirizzi IP sorgente e destinazione: quando un host crea un datagramma, inserisce il proprio indirizzo IP nel campo indirizzo IP sorgente e quello della destinazione nel campo indirizzo IP di destinazione. Figure 4.2.1: formato header IP 4.2.2 Frammentazione dei datagrammi Non tutti i protocolli a livello di data link sono in grado di trasportare pacchetti della stessa dimensione a livello di rete. Il protocollo Ethernet può trasportare fino a 1500 byte di dati, mentre ce ne sono altri che hanno capacità minori. La massima quantità di dati che un frame a livello di collegamento può trasportare è la Maximum Trasmission Unit(MTU, unità massima di trasmissione). Il MSS è basato su MTU del livello data link ed è concordato tra gli end host. Nel caso in cui il pacchetto trovasse MTU più piccole rispetto a quelle degli host è necessaria una frammentazione dei pacchetti. Figure 4.2.2: Esempio frammentazione Ethernet Il pacchetto originario è suddiviso in più pacchetti con MTU compatibile con il link di uscita. Solo per quel segmento IP dovrà inserire delle informazioni aggiuntive per permettere all’end host di riunire i pacchetti quando arrivati a destinazione. Vi sono 3 campi nell’intestazione che permettono di identificare l’ordine di un frammento: Identification: è un numero intero dato dalla sorgente ad ogni pacchetto. Offset: è la posizione del frammento rispetto al pacchetto originario diviso per 8; Flag: vi sono 3 flag: W, D, M. Il primo è vuoto, il secondo(Do Not Fragment)se posto ad 1 indica che il pacchetto non può essere frammentato. Infine il terzo(More Fragment) se posto ad 1 indica che il frammento è intermediario, se a 0 che è l’ultimo. Consideriamo il caso in cui un pacchetto di dimensione 4 KB con intestazione di 20B, debba attraversare un percorso di rete con MTU=1420 Byte. Il pacchetto originario viene suddiviso CHAPTER 4. LIVELLO DI RETE 40 in 3 frammenti e supponiamo inoltre che il secondo frammento trovato debba percorrere un collegamento con MTU uguale a 820KB. La figura mostra questo scenario. Figure 4.2.3: Esempio ulteriore frammentazione Il riassemblaggio avviene sempre all’host di destinazione, poiché ciascun pacchetto è indipen- dente e può essere che vi siano percorsi diversi che vengono intrapresi. L’end host quando riceve il primo frammento fa partire un timer(200-500 ms) e se non riceve tutti i frammenti entro lo scadere del timer scarta tutti i frammenti ricevuti. La procedura di frammentazione è identificata da tre momenti diversi: 1. L’host contrassegna il datagramma appena creato con un numero identificativo e con gli indirizzi di sorgente e destinazione. Generalmente l’host di invio incrementa l’identificativo di ciascun datagramma che invia e procede a spedirlo. 2. Quando il router frammenta il datagramma, contrassegna i frammenti con gli indirizzi sorgenti e destinazioni e con l’identificatore numerico del datagramma originario; 3. Quando la destinazione riceve una serie di datagrammi dallo stesso host mittente, esam- ina gli identificatori per individuare i frammenti di uno stesso datagramma. Dato che IP non garantisce l’invio dei datagrammi, il dispositivo di destinazione controlla il campo flag di ogni frammento: se ha l’ultimo campo (M) a 0 è l’ultimo, mentre in tutti gli altri è posto a 1. Infine utilizza il campo offset per specificare l’esatto ordine che i frammenti avevano originariamente all’interno del datagramma IP; 4.3 DHCP Gli indirizzi IP che appartengono ad una rete possono essere configurati manualmente, ma più spesso questo compito è svolto utilizzando il DHCP(dynamic host configuration protcol).DHCP è un protocollo client-server: un client è di solito un host appena connesso alla rete che desidera ottenere informazioni sulla rete e colui che può dare queste risposte è il DHCP server. Questo protocollo viene spesso detto plug-and-play o zero-conf per la sua capacità di automatizzare la connessione degli host alla rete. CHAPTER 4. LIVELLO DI RETE 41 Client Server DHCP 0.0.0.0 157.27.10.12 DHCP Discov er Offer DHCP DHCP Reques t ck DHCP A Quattro passi compongono il processo di scambio di informazioni della rete 1. DHCP DISCOVER: un client invia un pacchetto con i seguenti campi: IP Sorgente:0.0.0.0 che è un indirizzo IP speciale che significa “qualsiasi host“; IP Destinazione: 255.255.255.255 che è l’indirizzo di broadcast che permette di in- viare questo pacchetto a qualsiasi host all’interno della rete. Type: DHCP, solo il server DHCP risponderà a questo pacchetto, mentre gli altri host lo scarteranno. Transaction ID: numero scelto dal client per riconoscere la transazione DHCP. 2. DHCP OFFER: Un server DHCP che riceve un messaggio di identificazione, risponde al client con un messaggio. Dato che ci potrebbero essere più server DHCP diversi, ciascun messaggio di offerta server contiene l’ID di transazione del messaggio di identificazione. I campi dell’header IP sono: IP sorg: IP del server, in questo caso 157.27.10.12. IP dest: IP di broadcast. Transaction ID: quella del DHCP DISCOVER. Type:DHCP. Oltre all’indirizzo IP offerto, il server DHCP fornisce anche la subnet mask, l’indirizzo di default del router e l’IP del server di DNS, inoltre è affidato un tempo massimo per cui l’indirizzo IP fornito ha validità(lease time). 3. DHCP Request: il client appena collegato sceglierà tra le offerte dei server e risponderà al DHCP che gli interessa. I campi dell’header IP sono: IP sorg: 0.0.0.0. IP dest: 255.255.255.255. Transaction ID: una nuovo ID poiché una transazione è formata da un messaggio inviato ed uno ricevuto. Type:DHCP. 4. DHCP ACK: Il server risponde al messaggio di richiesta DHCP confermando i parametri ricevuti. L’header IP è composto da CHAPTER 4. LIVELLO DI RETE 42 IP sorg: 157.27.10.12. IP dest: 255.255.255.255. Transaction ID: Identica alla DHCP Request. Type:DHCP. Quando il client riceve il DHCP ACK, l’interazione è completata e il client può utilizzare l’indirizzo IP fornito da DHCP 4.4 ICMP Il protocollo ICMP(Internet control message protocol) viene usato da host e router per scambiarsi informazioni a livello di rete: il suo scopo è quello di inviare messaggi di errori oppure infor- mazioni relative al livello stesso. 4.5 Indirizzi Privati e Pubblici Il protocollo IPv4 se sfruttato al massimo ha 232 indirizzi possibili da assegnare alle reti. Negli anni e con l’introduzione dei dispositivi IOT, telefoni e altri dispositivi connessi alla rete gli indirizzi IP sono diventati una risorsa molto importante e per cercare di ridurre il numero di indirizzi utilizzati sono stati identificati due gruppi di indirizzi: privati e pubblici. Gli indirizzi privati sono: 10.0.0.0/8. 172.16.0.0/16. 192.168.0.0/24. 169.254.0.0/16. e possono solamente funzionare all’interno della stessa rete, mentre gli indirizzi sono tutti quegli indirizzi al di fuori di questi sottogruppi e possono comunicare all’esterna della rete LAN. NAT Da ciò che è stato detto nella sezione precedente gli indirizzi privati hanno significato solo all’interno di una data rete, il NAT(Network Address Translation) permette a questi dispositivi di comunicare con l’esterno. I router abilitati al NAT non appaiono come router al mondo esterno, ma si comportano come un unico dispositivo con un unico indirizzo IP, in sostanza il router nasconde i dettagli della rete domestica al mondo esterno. Consideriamo il seguente esempio: Figure 4.5.1: Topologia di esempio CHAPTER 4. LIVELLO DI RETE 43 C’è un PC con IP 192.168.10.3 che vuole comunicare con un server che è locato in un’altra rete LAN e il suo IP è pubblico: 80.70.60.2. Lungo il percorso del pacchetto alcuni suoi campi dell’Header IP verranno cambiati: IP sorgente e destinazione Figure 4.5.2: NAT L’unico dispositivo che ha attuato una modifica è il router NAT attraverso l’utilizzo di una tabella di traduzione NAT che permette di riconoscere l’associazione dell’ indirizzo IP pri- vato che aveva generato il pacchetto associato alla risposta ricevuta. La tabella è formata da 5 parametri: IP sorgente IP destinazione Porta sorgente Porta destinazione Nuova porta sorgente 192.168.10.3 80.70.60.2 16412 80 1900 192.168.10.4 80.70.60.2 4673 80 1901 Table 4.5.1: Tabella NAT IP sorgente rappresenta il dispositivo all’interno della LAN che ha generato il messaggio. IP destinazione: colui che deve ricevere il messaggio. Porta sorgente: identifica l’applicazione che ha generato il messaggio. Porta destinazione: è sempre aperta, in ascolto ed è del server. Nuova porta sorgente: dato che il massimo numero di porte sorgenti è 216 , il router NAT senza questo parametro potrebbe avere soltanto 65k connessione aperte, quindi ad ogni indirizzo IP viene associato una nuova porta che sostituirà quella sorgente per evitare che vi siano doppioni. IP destinazione colui che dovrà ricevere il messaggio. Le porte servono per identificare l’applicazione all’interno dei dispositivi che devono comunicare e infine c’è un parametro nuova porta sor- gente, ciò avviene perché il numero di porte sorgente sono limitate e il router può riconoscere solo 64k connessioni univoche attive perciò può capitare che alcune porte sorgenti siano uguali e l’aggiunta di una nuova porta sorgente permette di risolvere questo problema. 4.6 IPv6 Per soddisfare l’esigenza di un grande spazio di indirizzamento venne sviluppato un nuovo protocollo: IPv6. CHAPTER 4. LIVELLO DI RETE 44 32 Bit Classe di Versione Flow Label traffico Lunghezza del Playload Next Header Hop Limit 40 Byte IP sorgente IP destinazione Dati Figure 4.6.1: Formato Header IPv6 I cambiamenti più importanti rispetto alla versione 4 sono: Indirizzamento esteso: gli indirizzi totali disponibili non sono più 232 , ma 2128. Per descrivere un indirizzo IPv6 non viene utilizzata una codifica decimale, ma una esadeci- male. Quindi un IPv6 è formato da 8 gruppi di 16 bit. Intestazione ottimizzata di 40 byte: non c’è più il campo opzioni perciò la lunghezza dell’intestazione è fissa. Etichettatura dei flussi: attraverso il campo Flow label il flusso viene identificato da un’etichetta. L’RFC 2460 afferma che ciò consente “l’etichettatura di pacchetti che ap- partengono a flussi particolari per i quali il mittente richiede una gestione speciale, come una qualità di servizio diversa da quella di default o un servizio in tempo reale“. Next Header: ha un doppio significato: 1. nel caso in cui non ci fossero estensioni contiene un codice che identifica il protocollo trasportato nel payload. 2. se ci dovesse essere un header aggiuntivo quel codice rappresenta il tipo di header extension. Un header extension è un header aggiuntivo, ce ne possono essere più messi assieme, ma hanno tutti 2 campi in comune: Next Header e Header Lenghth, rispettivamente il primo funziona come i due casi citati precedentemente, mentre il secondo indica la lunghezza dell’header aggiuntivo. 4.7 Routing/Instradamento Esistono due tipi di consegne dei pacchetti: Diretta: i dispositivi che vogliono comunicare sono nella stessa LAN, cioè hanno lo stesso prefisso. L’host sorgente controlla l’indirizzo di destinazione, controlla la pro- pria maschera, successivamente confronta i bit del suo prefisso e i bit del prefisso della destinazione, se sono uguali fanno parte della stessa rete; Indiretta: il pacchetto viene consegnato al router che si occuperà di inviarlo all’host des- tinatario indicato; I router implementano i algoritmi di instradamento il cui scopo è determinare i percorsi tra le sorgenti e i destinatari, attraverso la rete di router. Il routing è il processo di scoperta del cammino migliore da una sorgente a tutte le possibili destinazioni. Il cammino migliore può essere considerato in base a diversi criteri: Distanza(cammino più corto): chilometri che impiega il pacchetto ad arrivare a desti- nazione oppure il numero di router che deve passare; CHAPTER 4. LIVELLO DI RETE 45 Velocità del collegamento; prezzo; Per i nostri scopi, considereremo i costi degli archi come dati, senza preoccuparci di come siano stati determinati. Per formulare i problemi di instradamento si utilizza un grafo: un router è un nodo di un grafo, mentre i collegamenti fra i router sono archi del grafo. Figure 4.7.1: Modello astratto di grafo di una rete di calcolatori Agli archi posso associare un peso che caratterizza l’arco stesso: se mi interessa minimizzare il numero di hop, allora il peso è uguale per tutti gli archi; se mi interessa la velocità di trasmissione, il peso è proporzionale all’inverso della banda( se la banda è grande, il peso è piccolo) Dato un grafo ed un criterio, il routing rappresenta il problema del calcolo del cammino min- imo su un grafo. Definiamo il costo di un arco il suo peso. Il costo dell’arco dal nodo i al nodo j può essere scritto come C (i, j) = w Il costo di un cammino è la somma dei costi degli archi che compongono quel cammino. D (i, k ) = ∑ C (l, m) l,m∈ Cammino. Esistono due categorie di algoritmi di routing: centralizzato: calcola il percorso a costo minimo tra una sorgente e una destinazione avendo una conoscenza completa della rete. In altre parole, l’algoritmo riceve in ingresso tutti i collegamenti tra i nodi e i loro costi. Ciò richiede che l’algoritmo ottenga quelle informazioni prima di effettuare il calcolo. Questi algoritmi sono spesso detti algortimi link-state(LS) dato che l’algoritmo deve essere conscio del costo di ciascun collegamento della rete; decentralizzato: il percorso a costo minimo viene calcolato in modo distributivo e it- erativo. Nessun nodo contiene informazioni complete sul costo di tutti i collegamenti di rete, inizialmente i nodi conoscono soltanto i costi di collegamenti a loro adiacenti, poi attraverso un processo iterativo e lo scambio di informazioni con i nodi adiacenti, un nodo gradualmente calcola il percorso a costo minimo verso una destinazione o un insieme di destinazioni. L’algoritmo di instradamento che studieremo è chiamato algo- ritmo distance-vector(DV) poiché ogni nodo elabora un vettore di stima dei costi verso tutti gli altri nodi della rete Un secondo criterio per classificare gli algoritmi riguarda alla staticità della rete : Algoritmi di instradamento statici: i percorsi cambiano molto raramente e spesso per mezzo di un intervento umano (modifica manuale di una tabella di inoltro di un router). CHAPTER 4. LIVELLO DI RETE 46 Algoritmi di instradamento dinamici: determinano gli instradamenti al variare del vol- ume del traffico o della topologia di rete. Un algoritmo dinamico può essere eseguito periodicamente o come conseguenza di un cambiamento nella topologia o nel costo di un collegamento. Esiste anche una terza categoria che è principalmente usata nei data center ed è SDN. 4.7.1 Instradamento distance vector L’algoritmo distance-vector è iterativo, asincrono e distribuito. È distribuito nel senso che cias- cun nodo riceve parte dell’informazione da uno o più dei suoi vicini direttamente connessi, a cui, dopo aver effettuato il calcolo, restituisce i risultati. È iterativo nel senso che questo pro- cesso si rIPete fino a quando non avviene un ulteriore scambio di informazioni fra nodi vicini. È asincrono nel senso che non richiede che tutti i nodi operino al passo degli altri. Definiamo in- oltre il criterio di consistenza: una porzione del cammino minimo è anche il cammino minimo tra i nodi che delimitano tale porzione. Figure 4.7.2: Cammino minimo fra nodi Se la distanza da i a k è minima passando da m, allora la distanza D(m,k) è minima. Il nodo i calcola la distanza verso il nodo k, considerando tutti i vicini: D (i, k ) = min{c(i, l ) + D (l, k ), c(i, m) + D (m, k ), c(i, j) + D ( j, k)} (4.1) Dove D(i,k) prenderà il minore fra i vari percorsi. Le distanze D(l,k),D(m,k), D(j,k) sono calco- late dai router vicini. La formula può essere riscritta come D (i, k ) = min{c(i, v) + D (v, k)} con v ∈ Vicini di i. Ogni router al suo interno ha una tabella di routing: per ogni destinazione il next-hop ha il next-hop(l’interfaccia da prendere) e il costo per raggiungere tale destinazione. Dest Next hop costo k Rα D(i,k) w Rb D(i,w) l Rc D(i,l) Table 4.7.1: tabella di Routing di un IPotetico router i L’algoritmo Distance Vector è formato da due parti: Inizializzazione: per ogni destinazione, se si tratta di un vicino diretto, allora la distanza D(i,v)=c(i,v), questa distanza non è fissa, ma potrebbe cambiare nel tempo. Altrimenti D(i,v)=∞; CHAPTER 4. LIVELLO DI RETE 47 Ciclo periodico: il nodo manda ai propri vicini il proprio distance vector e con i DV ricevuti dei vicini il router aggiorna la propria tabella di routing. Si può dimostrare che, se il grafo è completamente connesso e i pesi sono > 0, l’algoritmo DV converge alla soluzione ottimale. Figure 4.7.3: Esempio Distance Vector Ci concentreremo sui 3 nodi A,B,E: A B E A A 0 A A 7 A A 1 B B 7 B B 0 B B 5 C - ∞ C C 1 C - ∞ D - ∞ D - ∞ D D 2 E E 1 E E 5 E E 0 Table 4.7.2: Tabelle di Routing all’inizio Il nodo A riceve dai sui vicini i DV da B e da E e calcola i vari percorsi minimi cioè per il nodo a e il nodo E con i dati delle tabelle ricevuti: per andare da A al nodo B: D ( A, B) = c A, B + D B, B E E Da cui si ricava che – B → 7+0=7 – E →1+5=6 quindi A aggiorna la riga corrispondente a B con il valore 6 e next hop E; per andare da A al nodo C: D ( A, C ) = c A, B + D B, C E E – B → 7+1=8; – E → 1+∞ = ∞ Quindi scegliendo il percorso minore, A aggiorna la riga corrispondente a C con il valore 8 e next hop B; CHAPTER 4. LIVELLO DI RETE 48 Dopo aver ricalcolato i rispettivi vettori delle distanze, i nodi li inviano in versione aggiornata ai propri vicini. Se nella topologia della rete non sono avvenuti aggiornamenti l’algoritmo DV entra in uno stato quiescente. Quando un nodo che esegue l’instradamento DV rileva un cambiamento nel costo dei collegamenti con un vicino aggiorna il proprio vettore delle distanze, e, se si verifica un cambiamento un cambiamento nei propri calcoli con i risultati precedenti, invia il vettore aggiornato ai vicini. Prendiamo ora in considerazione cosa può avvenire quando il costo di un collegamento au- menta. Supponiamo che il costo del collegamento tra x e y passi da 4, a 60: Figure 4.7.4: Variazione nel costo dei collegamenti 1. Prima che il costo dei collegamenti cambi, Dy ( x ) = 4, Dy (z) = 1 e Dz ( x ) = 5. All’istante t0 y rileva un cambiamento nel costo del collegamento, è passato da 4 a 60 e calcola il suo nuovo percorso a costo minimo verso x: Dy ( x ) = min{c(y, x ) + Dx ( x ), c(y, z) + Dz ( x )} = min{60 + 0, 1 + 5} = 6 Possiamo rilevare che questo nuovo costo attraverso z è errato. Ma l’unica informazione che il nodo y possiede è che il costo diretto verso x è 60 e che z ha ultimamente detto a y di essere in grado di giungere a x con un costo di 5. Pertanto al fine di arrivare a x, y ora farebbe passare il percorso per z, aspettandosi che questo sia in grado di giungere a x con un costo pari a 5. All’istante t1 , abbiamo un instradamento ciclico: al fine di giungere a x, y fa passare il percors