PDF MIO-pagine-2.pdf
Document Details
Uploaded by HarmlessOnyx3693
University of Naples Federico II
Tags
Full Transcript
Risssuns a punti officin studentit YouTube PANORAMICA GENERALE: una rete di calcolatori è una collezione di dispositivi eterogenei connessi tra loro. Si distinguono in: Terminali: host, end system, posti ai lati della rete (pc, smartphone); dispositivi intermedi: si occupano...
Risssuns a punti officin studentit YouTube PANORAMICA GENERALE: una rete di calcolatori è una collezione di dispositivi eterogenei connessi tra loro. Si distinguono in: Terminali: host, end system, posti ai lati della rete (pc, smartphone); dispositivi intermedi: si occupano dei vari servizi di comunicazione (hub, switch, router); Metodi di connessione: fisici (cavi) o non fisici. La velocità di trasmissione delle sequenze di bit lungo i canali di trasmissione viene misurata come velocità di trasmissione. Quando un sistema vuole inviare dei dati, lo fa tramite modello a commutazione di pacchetto. Le informazioni vengono trasmesse in pacchetti formati da header: contiene le informazioni di controllo relative ai dati; payload: effettivi dati del pacchetto. I dispositivi intermedi funzionano con un modello di store and forward: ogni pacchetto viene ricevuto, ispezionato e ritrasmesso. Esistono due modi per implementare il modello a commutazione di pacchetto: reti di datagrammi: non garantisce un ordine di arrivo dei pacchetti e nè l’arrivo in se per se, in quanto i pacchetti vengono inviati senza aver prestabilito percorsi, indirizzati dunque dai dispositivi intermedi che decidono il percorso; reti a circuito virtuale: il percorso da A a B viene configurato prima dell’inizio della comunicazione (necessaria dunque una fase di configurazione) e garantisce un ordine di arrivo. Nel modello a commutazione di pacchetto viene definita la QoS (quality of service): dipende da diversi indici di prestazione: end to end delay: ritardo nella consegna dei pacchetti (dipende da tempo di elaborazione, di trasmissione, di attesa e di propagazione); Packet delay variation: Variazione temporale dei pacchetti; Troughput: quantità di bit al secondo che la rete è in grado di trasferire tra i due terminali; loss-rate: probabilità di perdita del pacchetto. La tipologia di reti cambia anche in base all’estensione geografica: LAN (local area network): connette pochi terminali in un’area geografica ristretta (tipo stella, bus, anello); WAN (wide area network): connette due o più lan in un’area estesa. Le LAN sono connesse tramite Gateway. Vi sono 2 topologie: full connected mesh: N LAN connesse ad N-1 LAN, problemi di scalabilità e di utilizzo; partially connected mesh: due o più nodi comunicano attraversando nodi intermedi che assumono capacità diverse a seconda del traffico di dati; MAN /metropolitan area network): Infrastrutture di comunicazione delle grandi città. Le reti sono progettate a strati, ogni livello si occupa di qualcosa, ogni strato comunica con gli adiacenti e fornisce/utilizza i servizi del successivo/precedente. I due livelli bassi sono implementati a livello hardware, i restanti 3 software. Abbiamo: livello fisico: trasmette sequenze binarie sul canale di comunicazione, specificando i connettori e le caratteristiche elettriche dei segnali; livello Data-Link: si occupa della trasmissione dei pacchetti dati garantendone solo l’inoltro. Vengono effettuati check di errori; livello Rete: gestisce instradamento dei messaggi (calcola i percorsi); livello di trasporto: fornisce i servizi per il trasferimento dei dati da terminale a terminale. Si possono effettuare frammenti, gestire gli errori e controllare il flusso; livello applicativo: consente all’utente di utilizzare la rete. Un protocollo è un insieme di regole che gestiscono la comunicazione tra entità di pari livello esistenti in due dispositivi della rete che comunicano tra di loro. Il tipo di protocollo specifica come mandare e come è fatto un messaggio. Questo messaggio solitamente è un PDU (protocol data unit) formato sempre da Header e Payload. Il PDU di un livello viene passato al livello inferiore inserito nel payload. Si viene a creare un WRAPPER in modo da inviare un pacchetto unico. Una volta arrivato al ricevente, in ogni livello di va ad estrarre L’header facendo un UNWRAP passando al livello superiore. Protocollo IP: la maggior parte del livello di rete è occupata da questo protocollo. Offre un servizio detto di best effort di pacchetti di datagrammi, senza garanzie in termini di integrità e ricezione dei dati, ma garantendo la fairness dei pacchetti, ovvero una distribuzione equa delle risorse di rete tra diversi flussi di dati o utenti in un sistema di comunicazione. Viene implementato sia negli end system sia nei router. Non garantisce la prevenzione di: pacchetti duplicati o persi, dati corrotti, consegna ritardata o fuori ordine. Un datagramma IP è formato da: Versione: indica se IP4 o IP6; Header Lenght: lunghezza dell’header, variabile viste le opzioni facoltative che possono essere inserite; type of service: servizio richiesto alla rete; total datagram lenght: lunghezza header+payload; 16 bit identifier: serve ad associare un frammento al pacchetto originario; Flags D/M: indicano se il pacchetto può essere frammentato o meno; Fragment offset: indica la posizione del frammento nel pacchetto originario; Time to live TTL: indica quanti router possono essere ancora attraversati; protocol: viene usato per sapere qual è il protocollo di livello superiore associato al payload; header checksum: identifica l’integrità dell’header; 32 bit source IP address: indirizzo IP del mittente; 32 bit destination IP address: Indirizzo IP del destinatario. Un indirizzo IP è fatto da 32 bit divisi in fasce da 4 byte, assumendo valori da 0-255, separati da un punto. Serve ad identificare univocamente un’interfaccia di rete di un dispositivo: un end system ha una sola interfaccia, un router ne ha 2+, i terminali moderni ne hanno diversi. Un’interfaccia di rete è una componente fisica o logica che permette a due o più sistemi elettronici di comunicare e interagire. Gli indirizzi IP sono assegnati in modo gerarchico, principalmente da IANA. Gli indirizzi ip sono composti da due parti: Network: identifica la rete di appartenenza; Host: identifica il terminale all’interno della rete. Abbiamo una distinzione in classe degli indirizzi IP. La classe A ha i primi 8 bit per network, gli altri host; la classe B ha 16 bit per network e altri host; la classe C ha 24 bit network e altri host; la Classe D serve a identificare gruppi multicast; la classe E è conservata per il futuro. Abbiamo poi degli indirizzi speciali: 0.0.0.0. Indica all’interno di un host “qualunque indirizzo assegnato alle proprie interfacce, 0.x.y.z riservato alla classe A e non può essere assegnato ad un’interfaccia specificamente, 127.0.0.0 to 127.x.y.z associati alle interfacce virtuali presenti in tutti i sistemi. Il 127.0.0.1 è detto interfaccia di loopback ovvero una funzione che consente ai dispositivi di inviare e ricevere dati a se stessi: serve per testare la funzionalità di rete del proprio dispositivo senza coinvolgere altri dispositivi, molto utile negli esami di autodiagnosi; 255.255.255.255 indica il broadcast a tutti gli host nella rete locale del mittente, se ho tutti 0 nel campo host sto identificando la rete, se ho tutti 1 nel campo host sto identificando come destinatario tutti gli host della rete nel campo network. Il problema delle classi è il poco spazio di indirizzamento. Per ovviare a ciò si utilizza una stringa ausiliaria di 32 bit detta netmask: è una sequenza di 1 che identifica il network, mentre gli 0 indicano l’host. È rappresentata con /k dove k è il numero di bit che identifica la rete. Esistono diversi modi per gestire la netmask: Gestione CIDR: le reti vengono suddivise in sottoreti identificate sottraendo il campo subnet al campo host. Gli host della stessa subnet hanno stessa netmask, e possono comunicare direttamente al livello data link. Per comunicare con host in internet utilizzo la NAT; Fixed lenght subnet mask: ripartisco un blocco di N indirizzi in M sottoinsiemi formati da N/M - 2 indirizzi consecutivi (subnet). Il -2 perché due indirizzi sono riservati per scopi speciali (tutti 0 indica la subnet, tutti 1 indica il broadcast alla subnet); Variable lenght subnet mask: si ripartisce il blocco N di indirizzi consecutivi in M sottoinsieme aventi dimensione differente, con un minimo di 4 indirizzi almeno poiché 2 sono dedicati a scopi speciali. La subnet minore è /30, ovvero 255.255.255.252. ROUTER: un router è un dispositivo intermedio che ha due o più interfacce di rete e serve a collegare due o più reti tra loro. Ha due funzioni fondamentali: Forwarding data plane: consiste nell’inoltrare il pacchetto da un’interfaccia ad un’altra. Operazione molto rapida svolta a livello hardware. Per ciascun pacchetto si determina l’interfaccia d’uscita con l’indirizzo ip del destinatario, si decrementa il TTL, se 0 il pacchetto viene scartato altrimenti viene inoltrato, e ad ogni decremento si ricalcola il checksum; Routing control plane: Determina il percorso, operazione svolta da una CPU a livello software. La scelta del percorso avviene tramite le regole di instradamento. Molto utile è la tabella di routing, in cui vi è l’indirizzo del next hop e l’identificativo locale dell’interfaccia tramite la quale si raggiunge il next hop. Poiché ogni indirizzo IP può avere una regola di instradamento, conviene compattare in: indirizzi con stesso prefisso e stesso next hop, e settare una regola di default per quegli indirizzi privi di regola. Il miglior modo di costruire una tabella di routing è attraverso la topologia della rete con l’uso dei grafi e dei link. Ogni link avrà un costo determinato da: bandwidth: capacità di trasmissione del router; delay: tempo necessario per spedire un pacchetto da una sorgente ad una destinazione; load: misura del carico di un link; reliability: legato all’Loss-rate di un link; hop count: numero di router che serve attraversare per arrivare a destinazione. La scelta del percorso dipende pertanto dal costo dei link. Abbiamo due tecniche di routing: routing by network address: l’indirizzo IP contenuto nel pacchetto viene usato come chiave per accedere alla tabella di routing (utilizzato nella rete a datagrammi); Label swapping: viene utilizzata nelle reti a circuiti virtuali, e serve a fare l’associazione tra un pacchetto ed un circuito. L’etichetta identifica la connessione e viene usata come chiave per determinare l’instradamento. Pertanto, tornando alla panoramica generale delle reti a circuiti virtuali, vi è la fase preliminare in cui il mittente dichiara il terminale con cui vuole dialogare, si individua il percorso e si fissa. Una volta fatto i router associano il pacchetto al circuito virtuale, non avrò più quindi un destinatario ma un identificatore di circuito. La costruzione della tabella di routing avviene in tre modi: Routing statico: conveniente solo se la rete è piccola e già vi si conoscono gli abbinamenti sorgente destinazione; routing dinamico centralizzato: un controller acquisisce le informazioni sulla topologia della rete e calcola i percorsi configurando i router. Il vantaggio è che le scelte vengon fatte dai router, riuscendo ad ottenere grandi ottimizzazioni; routing dinamico a controllo locale: i router si scambiano informazioni sulla rete e sul suo stato. Ogni singolo router partecipa alla determinazione dei percorsi. Si scambiano messaggi tra loro attraverso i protocolli di routing; il problema principale di tali protocolli è che le informazioni devono essere memorizzate per essere inserite nella tabella di routing. Tali info non devono essere enormi, ma bisogna minimizzare lo spazio. Lo scambio delle informazioni avviene dunque in due modi: Periodico: i router trasmettono info tra intervalli regolari di tempo. Questo approccio può portare però ad una memorizzazione di informazioni inutili, e se l’intervallo di tempo è troppo lungo ad una propagazione troppo lenta; evento: gli update avvengono solo a seguito di un evento. Questo approccio genera però un problema legato al fatto che se perdo un aggiornamento perdo le informazioni. La determinazione dei percorsi viene fatta invece con algoritmi di calcolo quali: ALGORITMO LINK STATE: ogni router conosce lo stato del link a cui sono direttamente collegati. Le informazioni vengono acquisite con trasmissione broadcast di pacchetti LSP, che messi in un database vanno a mappare tutta la rete. Dopodiché, in modo indipendente, ogni router esegue un algoritmo che consente di determinare l’instradamento dei pacchetti. Un LSP è un pacchetto in cui vi è contenuto: stato del link connesso al router; identità di ogni vicino connesso; costo del link; numero di sequenza per l’LSP; checksum; life time. Questi sono i pacchetti che vengono generati periodicamente o tramite evento. Viene trasmesso in broadcast all’interno dell’AS tramite flooding, ovvero trasmette a tuitti i link tranne a quello da cui è arrivato. Quando il pacchetto riceve l’LSP compie le seguenti azioni: 1) se non ha mai ricevuto l’LSP o è più recente di quello che si ha, lo memorizza e lo ritrasmette in flooding; 2) se LSP ha lo stesso numero di sequenza, allora non viene ritrasmesso per evitare duplicazioni; 3) se LSP è più vecchio di quello che si ha, si ritrasmette il più recente. Dopodiché il router elabora il database per poi fare il forwarding database costituendo una struttura ad albero avente il router stesso come radice. Viene calcolato quest’albero con tutti i router e successivamente si calcola la tabella di instradamento: per ogni possibile destinazione, determina il next hop router. Nella tabella ogni riga avrà la coppia (path, vicino). L’algoritmo che permette questa operazione è quello di Dijkstra: ogni nodo ha a disposizione il grafo della rete: i nodi sono i router; gli archi sono le linee di collegamento a cui è associato un costo. Ad ogni nodo si assegna un certo valore che man mano verrà minimizzato, perché l’algoritmo è di tipo iterativo e si divide in due parti: inizializzazione: per tutti i nodi adiacenti viene assegnata come distanza il costo del link. Per tutti gli altri la distanza è posta all’infinito; Loop: ad ogni iterazione si seleziona un nodo per cui la distanza è minima, e questo nodo non potrà esser più scelto in quanto viene posto all’interno dell’albero. Si aggiorna l’albero, si fa una stima e si ripete il procedimento. Al termine avrò i percorsi più brevi dal sono sorgente a tutti gli altri nodi. Il costo dei link viene assegnato in base al traffico su ognuno di essi. Se il link è scarico metto 0, se è molto carico tendo a mettere un costo elevato per scoraggiarne l’uso; ALGORITMO DISTANCE VECTOR: ogni router mantiene una tabella di tutti gli instradamenti a lui noti, che inizialmente è formata solo da quelli a lui noti. Ogni riga di tabella avrà: una rete raggiungibile, next hop, numero di hop necessari per raggiungere la destinazione. Periodicamente ogni router invia a tutti i vicini un messaggio di distance vector che contiene le info della propria tabella. I router riceventi aggiornano le loro tabelle con le nuove info. Un router effettua il ricalcolo dei percorsi se riceve un distance vector da un nodo adiacente o se cade una linea attiva. In sostanza l’algoritmo si descrive in 5 punti: 1) inizializzazione, il nodo aggiorna la tabella solo con i costi di tutti i suoi nodi adiacenti (gli altri tendono a infinito); 2) aspetta un messaggio distance vector; 3) quando arriva ricalcola la distance table; 4) se il cammino con minor costo varia, manda un distance vector; 5) torna al punto 2. Questo algoritmo è di facile implementazione ma offre una serie di svantaggi: Ogni messaggio contiene una tabella di routing, se lo stato della rete cambia rapidamente possono innescarsi dei loop, è difficile implementarlo in rete grandi senza conoscere la topologia, e vi è una lenta propagazione delle informazioni. Le buone notizie (costo diminuito) viaggiano molto rapidamente, al contrario delle cattive che viaggiano molto lentamente. Uno svantaggio importante è il count to infinity ed avviene quando uno dei router muore. Ciò che accade, è un “non aggiornamento” dei router adiacenti ad un altro router collegato direttamente al router che muore, che elimina dalla sua distance table ma che successivamente viene reinserito perché crede di poterci arrivare passando per i router adiacenti. Pertanto si innesca un loop che aggiorna costantemente la tabella del router e degli adiacenti portando il costo fino all’infinito. Per risolvere tale problema abbiamo due approcci differenti: Split Horizon: non si invia ad un vicino l’informazione della distanza quando è proprio tramite quel vicino che si raggiunge la destinazione; Poisoned reverse: consiste nell’impostare il peso del nodo che diventa irraggiungibile ad infinito. Questi approcci però non sono infallibili e sottolineano una mancanza di informazione topologica alla radice di tali problemi. I protocolli di routing che implementano gli algoritmi link state e distance vector sono: Protocollo RIP: il più diffuso di IGP (interior gateway protocol), utilizzato all’interno degli AS, è basato su trasmissione broadcast e implementa il distance vector. Non vi è distinzione tra reti e host singoli, ma si divide il tutto in: entità attive: possono ricevere e spedire messaggi (router); entità passive: possono solo ricevere (host). Le attive mandano un broadcast ogni 30 secondi ed ogni info ha un time-out allo scadere del quale la info viene eliminata ed il link muore. Questo è un protocollo di livello 3 e utilizza il protocollo UDP in quanto sono piccoli messaggi che non necessitano di grandi controlli. Viene fissata una distanza max di routing di 15 (16 rappresenta infinito) e per tale motivo è un protocollo preferito per piccole reti. Tutti i vantaggi e svantaggi sono identici a quelli del distance vector; Protocollo IGRP e EIGRP: supportano il multipath routing, ovvero se esistono più rotte per la stessa destinazione, non si sceglie sempre la stessa ma si divide il carico per alleggerire il traffico. Protocollo OSPF: protocollo che utilizza un algoritmo di tipo link state. La rete viene partizionata in aree diverse con un identificativo. I router si distinguono in: internal router: router aventi le interfacce di rete all’interno di una sola area; area border router: condividono le interfacce in due o più aree; backbone router: hanno almeno un’interfaccia nell’area backbone; AS boundary router: almeno un’interfaccia utilizza un diverso protocollo di routing o appartiene ad un altro AS, mettendo in comunicazione la rete con il resto del mondo. Partizionare la rete porta ad una conoscenza limitata della topologia di rete, dipendente quindi dagli area border router che hanno informazioni limitate, quindi si può ricorrere in errore. È un protocollo di livello 4. Lo scambio di messaggi avviene tramite incapsulamento nei datagrammi IP. Essendo un protocollo di trasporto non può essere basato su UDP o TCP e quindi affidabilità della comunicazione spetta al protocollo stesso. Anche qui viene adottato il multipath routing. Ogni router manda periodicamente un messaggio ad ogni vicino per verificare se è raggiungibile. I router all’interno della stessa rete si scambiano info tramite pacchetti LSP sulla topologia di rete e propagano info in flooding. TECNICHE DI TRASMISSIONE BROADCAST: 1)Source duplication: un router conosce tutti gli indirizzi IP degli altri router e manda pacchetti in unicast. È un approccio possibile solo se si conoscono a priori gli indirizzi dei destinatari; 2) In-network duplication: approccio che prevede l’indirizzamento broadcast di un pacchetto, affidando poi la duplicazione ai router che si trovano nella rete. Diverse tecniche per la duplicazione: flooding (che conosciamo già); controlled flooding: ottimizzazioni con numero di sequenza (che conosciamo già) oppure con un reverse path forwarding, che consiste nell’istruire i router a inoltrare un pacchetto solo se il pacchetto arriva dal link che utilizzerebbe se fosse lui il mittente ed il pacchetto avesse come indirizzo di destinazione il mittente del pacchetto broadcast che gli è arrivato; spanning tree: nota la topologia della rete, si costruisce un albero fatto da un sottoinsieme di link, scegliendo un nodo come radice che manda ad altri nodi un messaggio di join, costruendolo progressivamente. Questo fa si che la trasmissione broadcast abbia massima efficienza. TECNICHE DI TRASMISSIONE MULTICAST NELLE RETI IP: il multicast, a differenza del broadcast, ha come destinatario una parte dei riceventi del broadcast. Distinguiamo: multicast via unicast: solo se si conoscono i destinatari; network multicast: ci si affida ai router che possono identificare la trasmissione tramite un indirizzo speciale e utilizzarlo per identificare un tot di destinatari. Il protocollo IP mette a disposizione degli indirizzi speciali per il multicast. Ad ogni gruppo viene assegnato un indirizzo di classe D. Per accedere ad un gruppo bisogna dichiarare di voler partecipare tramite messaggi di join o protocollo IGMP. La gestione dei gruppi è dinamica: ogni host può appartenere a più gruppi, entrare ed uscire in qualunque momento; non è necessario appartenere ad un gruppo per inviare messaggi. Il router multicast si occupa dello smistamento dei datagrammi al di fuori della rete locale. Visto che non vi sono limitazioni sul posizionamento dei destinatari, bisogna mantenere tutte le info di stato, e possiamo farlo con due meccanismi: Protocollo IGMP: fornisce ad un host i mezzi per informare il router multicast che ci si vuole unire ad un determinato gruppo ed è quindi interessato a ricevere pacchetti. Il problema di tale protocollo è capire se c’è almeno un destinatario interessato a ricevere pacchetti per un determinato gruppo. Dopodiché il numero dei destinatari non fa differenza. I pacchetti IGMP vengono incapsulati in datagrammi IP e si distinguono in: membership query generale: inviato dal router ed ha scopo di conoscere a quali gruppi multicast gli host sono interessati a ricevere; specifico: mandato dal router ad uno specifico gruppo multicast. Utilizzato per conoscere quali host sono collegati a quali gruppi; report: inviato dall’host per far sapere che ci si vuole unire. Grazie ad esso il router conosce che vi è almeno un destinatario. Leave group: inviato dall’host. Il protocollo segue 2 fasi: 1) quando un host si unisce ad un gruppo, invia un IGMP report ad un indirizzo multicast. I router multicast stabiliscono i meccanismi di routing e propagano le informazioni del gruppo attraverso la rete; 2) si gestiscono i gruppi in modo dinamico, interrogando periodicamente i gruppi con messaggi generali per aggiornarsi delle informazioni, a cui gli host, tramite sistema di back off, rispondono (basta solo una risposta perché è importante che almeno un router multicast stia richiedendo il permesso, non importa il numero) con un report; Routing multicast: deve consentire ai pacchetti inviati da una qualsiasi sorgente di inoltrarli in modo da farli arrivare ai vari destinatari. Questo lo si fa attraverso uno spanning tree. Ho due approcci: group shared tree: mira a creare un unico albero condiviso su tutto il gruppo di mittenti. Il processo di creazione dell’albero è identico a quello di broadcast, con la differenza che si vuole arrivare solo ad una parte del gruppo. Source based tree: ogni router multicast a cui è collegato un mittente, si colloca come radice dell’albero. Si vengono a creare alberi distinti che non tendono a sovrapporsi. La rete MBONE è una rete virtuale costituta da collegamenti punto a punto tra router. I router sono in grado di costruire tabelle per i multicast, che fanno da working station creando una topologia logica. Lo scopo è quell di far viaggiare pacchetti multicast in aree non adibite al multicast, tramite un incapsulamento in pacchetti unicast tramite utilizzo di tunnel multicast. ROUTING A LIVELLO GLOBALE: Oggi internet è strutturata come un insieme di autonomous system AS: collezioni di reti amministrate da un’unica autorità. All’interno di essi, ognuno detta le proprie regole. La scelta dei percorsi dipende da: routing interno: le tabelle di routing sono mantenute dall’IGP, ed i messaggi vengono scambiati tra i router che appartengono allo stesso AS, utilizzando protocolli RIP, OSPF, IGRP; routing esterno: Le tabelle di routing esterne sono mantenute dal BGP (border gateway protocol). I messaggi vengono scambiati dai border area router. Esistono diversi tipi di AS: single border router: hanno un unico link di collegamento con il resto del mondo. AS per piccole aziende; multi border router: si dividono in quelli disposti a far attraversare flusso di traffico che non terminano al loro interno, oppure no. Gli AS si differenziano anche per la posizione nella rete: Tier-1: costituiscono la rete di backbone, si trovano al centro della rete e sono tutti collegati tra loro; transit core: sono coloro che si interfacciano con gli AS del tier-1; regional ISPs: offrono connettività regionale e nazionale, come ad esempio Telecom; Stub ASes: sono gli utenti che usufruiscono degli altri AS per la connettività ad internet; il BGP supporta il routing tramite path vector, quando il router annuncia tramite questo protocollo la raggiungibilità di un certo numero di reti, specifica l’AS dal quale proviene. Dopodiché utilizza l’algoritmo distance vector. Quando due AS si scambiano traffico, esiste una relazione commerciale di qualche tipo: customer/provider: il provider fornisce un servizio ad un costumer che paga; peer to peer relationship: è una relazione che si instaura quando le reti devono svolgere delle azioni simili. Il traffico tra i vari AS è gestito da tabelle di routing implementate dall’effetto combinato di protocolli intra dominio (OSPF) e inter dominio (BGP). PROTOCOLLO ARP: di livello 3. Quando un host deve trasmettere un pacchetto IP, questo viene incapsulato in un frame di livello 2 e viene mandato. Abbiamo bisogno di avere un indirizzo a livello di rete (IP) ed uno a livello di collegamento (MAC). L’indirizzo MAC è un tipo di indirizzo che non può essere modificato perché dipende dalla scheda di rete, ed è anche univoco. Il protocollo ARP permette una conversione tra indirizzo IP e MAC. L’ARP agisce solo sulla sua sottorete. Per uscirne necessita di un router. Distinguiamo due casi: 1) l’host vuole inviare un datagramma ad un host appartenete alla stessa sottorete. A però conosce solo l’IP di B ma non il suo MAC. A manda in broadcast a tutti gli host della rete un pacchetto che contiene l’indirizzo IP di B in modo da poter conoscere il suo MAC; B riconosce il suo IP e risponde ad A; A conosce il MAC di B e gli invia il datagramma. Inoltre A sa che B è nella stessa sottorete grazie alla netmask. Il computer che manda la richiesta esegue una AND bit a bit tra indirizzo di destinazione e netmask. Se coincidono allora va bene, altrimenti significa che il destinatario non è nella stessa subnet IP del mittente; 2) nell’altro caso i due indirizzi non fanno parte della stessa subnet, si utilizza quindi un router per comunicare. Il primo hop sarà all’interfaccia del router che appartiene alla subnet di A, che specifica come destinatario l’indirizzo IP del router. Ogni host mantiene una cache con corrispondenza tra indirizzi logici e fisici, in modo che prima di spedire il messaggio di richiesta ARP va a controllare nella cache, riducendo il traffico sulla rete. Esiste anche il protocollo Reverse ARP per conoscere l’indirizzo IP avendo il MAC. PROTOCOLLO DHCP: ha lo scopo di assegnare automaticamente indirizzi IP agli host richiedenti. Per comunicare, un host ha bisogno di configurare indirizzo IP e Subnet Mask, che possono essere configurati automaticamente da questo protocollo. Ciò implica la presenza di un server DHCP nella rete che dispone di una lista di indirizzi ip agli host di più reti che ne fanno richiesta. La modalità di assegnazione di IP può essere: dinamica, ovvero il server assegna un IP, che alla scadenza del periodo di lease viene poi assegnato ad altri host che ne fanno richiesta; automatica: il server assegna un IP ed anche se il lease scade, riassegnerà all’host lo stesso IP quando ne farà nuovamente richiesta; statica: niente periodo di lease, l’IP è assegnato all’host in modo permanente. Il protocollo si articola in 4 punti: 1) il client invia una richiesta a tutti gli host della rete (broadcast) con un messaggio DHCP discovery che serve per trovare almeno un server DHCP che risponda e possa fornire una configurazione IP all’host richiedente; 2) i server DHCP presenti nella rete ricevono il discovery e rispondono inviando una configurazione al solo client (unicast) con un messaggio DHCP offer; 3) ricevuto l’offerta, il client invia un messaggio in broadcast indicando il server DHCP selezionato (DHCP request). Il pacchetto raggiunge tutti i server presenti nella rete ma solo uno corrisponderà a quello selezionato dal client; 4) il server selezionato risponde al DHCP request con un messaggio di conferma della configurazione IP proposta (DHCP ack). NAT: è una tecnica che consente ad un router di agire come intermediario tra internet (rete pubblica) e le reti private. Tutto il traffico che lascia il router domestico verso internet, ha lo stesso indirizzo IP, e tutto il traffico che entra, anche se ha diversi host di destinazione, ha comunque lo stesso indirizzo IP. Il router, per sapere a quale host interno deve inviare il datagramma, utilizza una tabella di traduzione NAT interna al router, che include la coppia Number Port - indirizzo IP. Quando il router riceve un pacchetto dalla rete privata a rete esterna, salva nella tabella l’indirizzo IP privato ed il number port del mittente tenendone traccia in una tabella di traduzione. Quando un pacchetto di risposta arriva dall’esterno all’indirizzo IP pubblico, il router NAT utilizza la tabella di traduzione per determinare quale indirizzo IP privato è associato a quell’indirizzo IP pubblico e (se applicabile) numero di porta. Il router NAT sostituisce l’indirizzo IP pubblico con l’indirizzo IP privato corrispondente e inoltra il pacchetto al dispositivo corretto nella rete privata. Il NAT presenta due problemi: 1) i numeri di porta dovrebbero essere utilizzati per indirizzare i processi e non per individuare gli host. La cosa può causare problemi ai server in esecuzione; 2) i router dovrebbero elaborare i pacchetti solo fino al livello 3, mentre il NAT invece viola il principio end to end, ovvero gli host dovrebbero comunicare tra loro direttamente, senza intromissione o modifica di indirizzi IP. PROTOCOLLO IP V6: la dimensione degli indirizzi passa da 4 a 16 byte per supportarne molti di più; alcuni campi dell’header sono resi opzionali o eliminati; esistono molte più opzioni, efficienti e flessibili; viene introdotta una funzionalità che permette di etichettare i pacchetti appartenenti a flussi di dati particolari per i quali si richiede un trattamento non di default; viene migliorata la privacy e la sicurezza. L’header è divisa in due parti: min header, la parte principale, ed una parte di estensione introdotta per ospitare eventuali opzioni. Per questo c’é un campo next header che serve a far capire cosa c’è dopo il min header, se delle opzioni o direttamente il payload. Gli altri campi presenti sono: Version: indica la versione del protocollo; Traffic class: indica la priorità del pacchetto (simile a type of service in IP4); Flow label: associa il pacchetto ad un flusso; Payload lenght: lunghezza del payload; Next Header; Hop limit: sarebbe il TTL di IP4. Le principali differenze con IP4 sono: rimozione del checksum per ridurre il tempo di processamento nei router ad ogni hop; le opzioni sono previste ma non nell’header; le opzioni, se presenti, devono apparire secondo un ordine prestabilito. Può esserci il caso in cui il payload del pacchetto IP sia ICMP. Gli indirizzi sono formati da 128 bit e sono scritti in 8 gruppi di due byte ciascuno dei quali è rappresentato in 4 cifre esadecimali, separate da “:”. Ci sono due regole di semplificazione: 1) gruppi di zeri agli inizi di un gruppo possono essere omessi; 2) uno o più gruppi di tutti zeri vengono sostituiti dal simbolo “::”; ci sono vari tipi di indirizzi: Unicast: trasmissione uno ad uno, identificano una sola interfaccia di rete e se ne distinguono di 4 tipi: Global Unicast: sono simili agli indirizzi IPv4 pubblici, vengono utilizzati in reti pubbliche e sono divise in due sottocampi subnet ID che identifica la sottorete e l’interfaccia ID (interfaccia nella sottorete). Quest’ultima viene generata dal MAC address; Unique local: utilizzati nelle reti private ed utilizzati dai router per connettere gli indirizzi locali, ma sono in una rete non collegata ad Internet; Link local: utilizzati per inviare i pacchetti esterni nella sottorete locale. Consentono la comunicazione tra gli host all’interno della rete locale. Ogni interfaccia di rete deve avere un indirizzo link-Local. Comprende tutti i dispositivi in comunicazione diretta tramite una LAN o tramite collegamento punto a punto (connessi senza router). Ogni interfaccia di rete che supporta IPv6 deve obbligatoriamente avere un indirizzo link local. Come viene assegnato? Prefisso di 10 bit seguito da 54 bit di zeri mentre ultimi 64 bit sono di interfaccia. Il modo in cui l’interface ID viene prodotto cambia a seconda del SO. In alcuni casi è calcolato a partire da MAC address, in altri in maniera pseudo random. Non c’è garanzia sul fatto che sia univoco; Site Local: comprende un insieme di link gestiti da un’unica entità. È una rete fatta di tante reti locali collegate tra router con un unico gestore; Anycast: trasmissione uno al più vicino: identificano più interfacce di cui ne viene selezionata solo una; Multicast: trasmissione uno a molti; Indirizzi speciali: Unspecified address: assenza di indirizzo; Loopback: è l’analogo di 127.0.0.1 IPv4; non è prevista invece la trasmissione broadcast. La trasmissione anycast può esser fatta anche in IPv4 ma non vi è un blocco di indirizzi assegnato ad essa, mentre in IPv6 si. Esistono diversi modi per attribuire un indirizzo IPv6 ad un’interfaccia host: 1) static address configuration: configurazione fatta manualmente dall’amministratore; 2) stateless address auto-configuration: viene assegnato in maniera automatico; 3) Stateful DHCP address configuration: configurazione dinamica fatta tramite un server DHCP v.6; PROTOCOLLO ICMP V4/6 (INTERNET CONTROL MESSAGE PROTOCOL): il protocollo viene utilizzato dagli host e dai router per scambiarsi informazioni a livello di rete: il suo utilizzo più tipico è la notifica di errori. Nonostante sia spesso considerato parte di IP, dal punto di vista architetturale si trova al di sopra, visto che i suoi messaggi vengono trasportati nei datagrammi IP. Se un host riceve un datagramma IP che specifica ICMP come protocollo superiore allora si effettua il demultiplexing come per TCP e UDP. I messaggi ICMP sono individuati da un tipo ed un codice. Esistono due applicazioni: Ping: viene utilizzato per verificare la connettività a livello di rete tra due host. L’host A invia un pacchetto echo request, e l’host B lo riceve rispondendo con un messaggio echo reply; Traceroute: utilizzato per scoprire il percorso per raggiungere una certa destinazione. Gli indirizzi IPv6 che sono formati da un prefisso fatto di 96 bit di zero e poi hanno i successivi 32 bit vengono detti indirizzi compatibili con IPv4. Questi vengono utilizzati da dispositivi a doppio stack che comunicano con IPv6 tramite un’infrastruttura IPv4. Se un indirizzo compatibile con IP4 viene utilizzato come destinazione IP6, il traffico viene incapsulato automaticamente con un’intestazione IPv4 e inviato alla destinazione tramite l’infrastruttura IPv4. Un indirizzo costituito da 80 bit di zero, 16 bit di 1 e 32 bit corrispondenti ad un IPv4 viene detto Indirizzo mappato su indirizzo IPv4 e sono utilizzati per mettere in comunicazione dispositivi IPv6 con dispositivi IPv4. Se la destinazione è ne formato di indirizzo mappato, il mittente genera un pacchetto IPv4. Se durante un percorso un pacchetto dati IPv6 non può passare lungo un tratto non adibito all’IPv6, questo viene incapsulato in un pacchetto IPv4 che, una volta raggiunto il router, si rimuove L’header e si riprende il percorso verso destinazione. Questa tecnica è definita Tunneling. LIVELLO DI TRASPORTO: Questo livello consente alle varie applicazioni di un end system lo scambio di informazioni. Questo livello agisce solo negli end system. I diversi programmi in esecuzione all’interno di un end system sono i processi. Bisogna quindi smistare i vari messaggi contenuti nei pacchetti ognuno al processo a cui è destinato. Questa funzione di smistamento è detta di Demultiplexing ed è fatta grazie ad un’informazione contenuta nell’header dei protocolli di livello trasporto: il Port Number. In entrambi gli header di TCP e UDP avrò due campi in comune che sono: 1) source Port number: scelto dall’host mittente, determinato sul momento dal SO in base a quelli non utilizzati; 2) Destination port number: scelto dall’host destinatario; per le azioni di multiplexing e demultiplexing viene utilizzata la coppia IP, port number, per associare due flussi di comunicazione distinti anche se la sorgente e la destinazione è la stessa. La connessione può essere: connectionless: lo scambio di dati a pacchetto tra mittente e destinatario non richiede una precostruzione di un circuito; connection-oriented: prima di ogni trasmissione si stabilisce una connessione tra i due endpoint attraverso una procedura di connection establishment. PROTOCOLLO UDP: si occupa della gestione per lo smistamento del pacchetto nel processo che lo deve eseguire. Offre, al livello applicativo, un servizio di consegna best effort senza garanzie. Rispetto al livello IP aggiunge il servizio di demultiplexing attraverso il port number e può effettuare facoltativamente un controllo sulla checksum (se negativo si scarta il pacchetto). Le applicazioni che implementano UDP devono usare meccanismi per evitare la perdita di pacchetti e consegna fuori ordine. È un protocollo, inoltre, di tipo connectionless. UDP viene introdotto in quanto: 1) basso overhead (si adatta a protocolli che devono avere un’interazione veloce senza tempi extra; 2)è un protocollo semplice; 3) non c’è controllo della congestione, quindi le applicazioni possono inviare alla velocità desiderata. La checksum contiene delle info di controllo che verificano se nel datagramma ci sono bit alterati: il mittente prende il datagramma che vuole trasmettere e lo trasmette come sequenza di 16 bit, per ognuno dei quali calcola il complemento ad 1 della somma (Somma in colonna ed eventuale riporto), successivamente il destinatario ricalcola la somma del complemento a 1 con tutta la checksum. Se fa 1 c’è un errore altrimenti ok. La checksum viene fatta su un datagramma con pseudo- header che contiene indirizzi IP sorgente e destinazione e la lunghezza del datagramma, che non viene trasmesso ma solo messo in conto quando si fa il calcolo TECNICHE DI TRASMISSIONE AFFIDABILE DEI DATI: ho due approcci per rendere affidabile una trasmissione: 1) correggo l’errore senza coinvolgere il mittente; 2) notifico al mittente l’errore, che non correggo, ma faccio la ritrasmissione del pacchetto. In questo caso il destinatario invia dei messaggi di ACK quando il pacchetto è stato ricevuto correttamente, e dei messaggi di NAK quando sono stati rilevati degli errori. Supponendo che i messaggi siano corretti, quando il destinatario manda la richiesta di trasmissione, non può sapere se è arrivata al mittente, e quindi quando riceve il pacchetto, non sa se deve interpretare quello che ha appena ricevuto come una ritrasmissione oppure come un pacchetto contenente dei nuovi dati. Per risolvere tale problema si inserisce nell’header il numero di sequenza. È un’informazione di controllo che viene incrementato ogni volta che si manda un pacchetto. Se due pacchetti hanno stesso numero, saprò che è una ritrasmissione. Dal momento in cui implemento il numero di sequenza, posso rimuovere il messaggio di NAK, mandano un ACK per l’ultimo pacchetto ricevuto correttamente. In questo caso si introduce un timer. Se allo scadere del timer il mittente non ha ricevuto l’ACK di conferma, significa che o il pacchetto o l’ACK sono andati persi e quindi li ritrasmette. Se il timer è troppo breve però si crea una duplicazione di pacchetto prima ancora che l’ACK arrivi. La stima del timer deve prevedere il round trip time RTT. In queste tecniche abbiam sempre utilizzato lo stop&wait: il mittente non manda un altro pacchetto finché non ha ricevuto una risposta di ACK dal destinatario. Visto che questa tecnica è lenta, si può utilizzare il Pipelining: il mittente invia altri pacchetti anche prima di ricevere il riscontro dei precedenti. Ho due alternative: Go-back-N: in questo caso i numeri di sequenza non possono essere rappresentati con un singolo bit, poiché possono inviare un certo numero di pacchetti consecutivi, quindi ci devono essere k-bit riservati. Si basa su ACK accumulativi, ovvero quando mando un ACK significa non solo che è arrivato il pacchetto n-esimo, ma anche tutti i precedenti. Anche qui utilizzo il timer, e se non viene ricevuto l’ACK di conferma si ritrasmette non solo il pacchetto “scomparso”, ma anche i successivi in modo che il destinatario non accumuli pacchetti che non può utilizzar; Selective repeat: il ricevente invia messaggi di ACK per tutti i singoli pacchetti ricevuti, ma ciò obbliga il ricevente a tenere un buffer nel caso ci siano pacchetti fuori ordine che però non vengono scartati, ma che non possono essere consegnati. Anche qui viene utilizzato un timer. Le due finestre di trasmissione e ricezione possono essere disallineate nel tempo. Il numero di bit che dedico per i numeri di sequenza deve essere molto maggiore rispetto alla finestra di trasmissione (se è piccolo non riesco a rappresentare tutti i numeri e posso avere degli errori). PROTOCOLLO TCP: offre un servizio più efficiente, rispettando ordine e consegna. Questo viene garantito tramite un canale di comunicazione tra i due end point. Il servizio è detto di connection oriented. I processi si agganciano agli endpoint di una connessione TCP mediante le socket, delle porte di comunicazione previste dal SO. Concettualmente tra i due end point si crea un tubo, che, senza perdite, fa scorrere sequenze di dati in un ordine tra un end point e un altro. Quando si crea una trasmissione TCP avrò due buffer: buffer mittente: serve per mantenere i dati finché non arriva una risposta di ricezione; buffer destinatario: serve per conservare i dati che sono arrivati fuori ordine. Il servizio è di tipo stream oriented: orientato al flusso di byte. Si trasmettono byte uno dopo l’altro. Il modo in cui il mittente trasmette e il destinatario estrae i byte non è necessariamente lo stesso: dipende dai protocolli applicativi. Un pacchetto ha: n porta sorgente/destinazione; numero di sequenza; numero di riscontro: serve a dare in info su come stanno arrivando i dati. Rappresenta il numero di sequenza del prossimo byte che ci si aspetta di ricevere dalla controparte; Lunghezza intestazione (lunghezza dell’header); ACK (campo di riscontro valido); RST: reset della connessione; SYN: sincronizza i numeri di sequenza (utilizzato nelle fasi di apertura e chiusura della connessione); FIN: il trasmettitore ha raggiunto la fine dello stream di byte; URG: il campo puntatore urgente è valido; finestra di ricezione: specifica la dimensione del buffer che ha TCP per magazziniere i dati in arrivo; PTR a dati urgenti: permette la trasmissione di dati ad alta priorità; Checksum; per consentire la corretta trasmissione dei dati tra A a B, esistono due flussi di dati distinti: dati da A a B; Riscontro da B a A; se un segmento contiene sia dati che riscontro, si dice che il riscontro viaggia a cavalluccio dei dati (Piggy Backing). TCP inizio e fine della connessione - three way handshake & four way handshake: la procedura per stabilire la connessione tra due end point è detta three way handshake, ed avviene tramite scambio di tre segmenti: 1) il client invia al server un segmento con SYN=1, indicando la volontà di stabilire una connessione. Contiene anche numero di sequenza e riscontro. Parte il timeout. Il timer diventa closed se scade, oppure enstablished se la procedura va a buon fine. 2) il server è nello stato di listen per stabilire la connessione, riceve il pacchetto si mette nello stato di SYN_RCV e invia al client due flag SYN=1 e ACK=1, con relativo numero di sequenza e riscontro, aspettando di ricevere il 2 segmento. 3) il client riceve il segmento prima dello scadere del timeout, si mette nello stato di established e manda il segmento al server, che si metterà anche lui nello stesso stato e la connessione sarà stabilita. In questa fase vengono allocati i relativi buffer per i due end point. La fase di terminazione viene detta four way handshake, in cui vi è una distinzione tra parti active e passive closer, visto che sia client che server possono decidere di chiudere la connessione: 1) l’active closer manda un segmento per indicare la volontà di chiudere la connessione, aspettando l’ACK; 2) il passive closer riceve il segmento e manda l’ACK di ricezione; 3) l’active closer si mette nello stato FIN_WAIT in attesa del segmento FIN del passive closer; 4) il passive closer manda il segmento FIN e si mette nello stato di last ack (posso ricevere altri dati che sono in ritardo); 5) l’active closer recepisce il segmento FIN e si mette in uno stato di attesa attiva nel mentr che aspetta l’arrivo di pacchetti in ritardo, impedendo una nuova connessione tra i due end point, dopodiché chiude la connessione. La ritrasmissione dei pacchetti avviene per due motivi: 1) evento di timeout: non si riceve l’ACK in tempo; 2) ACK duplicati: se B continua a mandare lo stesso numero di ACK significa che c’è un buco nella sequenza e quindi un problema di riscontro. Errori tipici in TCP: 1) ritrasmetto il pacchetto visto che è andato perso l’ACK; 2) il timeout è prematuro, il primo massaggio è mandato 2 volte, il secondo no; 3) il timeout è troppo grande, il messaggio di ACK è perso, ma prima che scada il timeout vi è un altro pacchetto e viene ricevuto l’ACK successivo, che sorpassa quello precedente. Non vi è ritrasmissione del pacchetto precedente nonostante il problema. Alcune modifiche per risolvere i problemi sono: raddoppio del timeout per dare un altro po’ di tempo in seguito alla prima scadenza (supponendo una stima sbagliata); Ritrasmissione veloce quando si hanno ACK duplicati, senza attendere il timeout. TCP Controllo del flusso e della congestione: Flusso: il controllo ha lo scopo di evitare che il buffer del ricevitore vada in overflow. I dati si trovano nel buffer per due motivi: 1) i dati non arrivano in ordine e quindi non possono essere consegnati; 2) l’applicazione che svuota il buffer potrebbe avere una velocità irrisoria rispetto alla velocità di arrivo e la quantità di dati da memorizzare. Per far si che il mittente non carichi il ricevente a velocità elevata, viene gestito il tutto dinamicamente, con il ricevente che comunica la dimensione corrente del buffer tramite il campo ReciveWindow, che rappresenta lo spazio libero del buffer. C’è la possibilità che si generi il fenomeno della Silly Window. Per evitare casi di Overhead il ricevente comunica che la finestra è piena fin quando non si svuota parzialmente o metà, oppure invita il mittente ad accumulare prima abbastanza dati per essere mandati in un unico segmento. Congestione: il controllo ha lo scopo di evitare che la rete riceva troppi dati che non riesce a gestire. La capacità di un buffer di ritrasmettere non è infinita, infatti se il buffer inizia a riempirsi potrei avere delle perdite di pacchetti che non possono essere salvati. La ritrasmissione dei pacchetti avviene in due modi: 1) il mittente trasmette dati solo quando il buffer non è pieno; 2) l’evento di perdita viene rilevato allo scadere del timer, dando luogo alla ritrasmissione del pacchetto. Per evitare la congestione c’è bisogno che le sorgenti rallentino il loro tasso di trasmissione. Abbiamo 2 approcci: 1) end to end: non richiede l’utilizzo della rete. A partire dall’osservazione dei ritardi e delle perdite di pacchetti, gli end system capiscono che la rete è in uno stato di congestione; 2) approccio per segnalazione: i router forniscono indicazioni sullo stato della rete agli end system tramite un flag, un bit di notifica. TCP utilizza un approccio end to end: non viene mandato nessun feedback. La frequenza di trasmissione è variabile, dipende dalla finestra di congestione. La velocità con cui trasmettere viene stimata per tentativi: Slow start: si parte da un valore basso che andiamo ad incrementare piano. Si invia un solo segmento riempito a massima capacità MSS, si aspetta l’ACK, di conseguenza un RTT. La seconda volta mando 2 segmenti e attendo nuovamente, la terza volta si mandano 4 segmenti e così via fin quando non si ricevono 3 ACK duplicati o il timeout scade. Se succede, si ritorna all’inizio. AIMD: ad un certo punto si abbandona la fase di slow start definendo un certo valore di soglia che man mano viene aggiustato. Quando si arriva alla congestione, in base all’errore, abbiamo due possibilità: se scade un timeout torno allo slow start; se ricevo 3 ACK: se TCP ha la versione Tahoe torna allo slow start; se ha la versione Reno faccio il fast recovery; Fast recovery: si utilizza quando un evento segnala un avvicinamento di congestione. Induce i dati a rallentare, la finestra di congestione viene posta alla soglia + 3 MSS. Il troughput medio è pari a 3/4 del valore max. Il controllo della gestione ha senso quando si hanno più flussi che si contengono la banda della rete. La situazione delle è che se ho K sessioni TCP che condividono lo stesso collegamento con una banda di trasmissione R, allora ogni flusso dovrebbe avere un tasso di trasmissione medio pari a R/K. In una situazione reale si oscilla rispetto al punto ideale. TRASMISSIONE DEI FLUSSI MULTIMEDIALI IN INTERNET: consiste nella condivisione di informazioni multimediali come audio e video da una sorgente ad uno o più ricevitori attraverso la rete. Per ridurre la quantità di info trasferita, il trasmettitore effettua una compressione (MP3, MPEG..) ed il ricevitore la recupera decodificandola. La tecnica di compressione introduce una degradazione che non deve essere oltrepassata, in quanto possono esserci alterazioni come disturbo audio o glitch nel caso del video. La compressione è effettuata per: 1) informazioni live: fatta da un apparecchio hardware in real time, producendo un flusso continuo che viene spezzato in vari pacchetti trasmessi individualmente con lo streaming; 2) Informazioni preregistrate: la compressione viene fatta una sola volta a monte e poi l’informazione codificata viene messa in un file memorizzato su memoria di massa. Il trasmettitore trasmetterà il file codificato. Esistono due modi di trasferire: File transfer: trasferire tutto il file ed iniziare la riproduzione alla fine. È necessaria una buona capacità di memorizzazione del destinatario. È fatto principalmente da http che si appoggia sul protocollo TCP; Streaming: riproduzione progressiva con un buffer alimentato e svuotato continuamente. La riproduzione inizia quando il buffer è abbastanza pieno. Lo streaming è sensibile al jitter: la variabilità del ritardo. Come posso rendere la trasmissione più robusta? 1) tecniche di codifica che permettono al ricevitore di ricreare le info avute in modo corretto anche se si verificano perdite occasionali; 2) Tecniche sulla ritrasmissione come in TCP (sconsigliato); 3) Si trasmette dopo che un tot d pacchetti arrivino nel buffer, in modo da compensare una eventuale consegna ritardata dei pacchetti. Per capire in che momento riprodurre, si usa il PROTOCOLLO RTP: implementato a livello applicativo, i suoi pacchetti vengono incapsulati nel payload dei pacchetti UDP. Il concetto di tale protocollo è la sincronizzazione che può essere: Intra-media: garantisce che quando arrivano i dati questi vengono riprodotti al giusto istante di tempo; Inter-media: se la trasmissione genera flussi di rete distinti che devono essere riprodotti insieme, questi devono essere coordinati. Questo protocollo supporta sia Unicast che Multicast. L’Header RTP è composto da: PT Payload type: specifica la codifica utilizzata per i dati; Timestamp: contiene il momento in cui è stato generato il primo byte all’interno del payload, e serve ad aiutare la riproduzione (se ad esempio arriva un pacchetto di tempo 0 ed un secondo pacchetto di tempo 1/8 di secondo, la riproduzione deve essere sfasata di 1/8 di secondo); Sequence number: se ho due pacchetti con stesso timestamp ma numero di sequenza diverso, vuol dire che sono 2 frame diversi; SSRC identifier: è un indirizzo sorgente, diverso dall’IP poiché questo resta sempre uguale; CSRC identifier: Sequenza di n campi che identifica la sorgente originaria in un flusso prodotto dalla fusione di più flussi diversi. Insieme ad RTP viene utilizzato anche un protocollo detto RTCP il quale contiene info di controllo. I pacchetti vengono inviati con una certa periodicità e abbiamo 5 messaggi: 1) Source e Receive report che contengono informazioni e statistiche sulla trasmissione; 2) description: Contengono informazioni sui flussi; 3) BYE se si vuole lasciare la sessione; 4) APP: permette all’applicazione di fare dei messaggi customizzati. L’intervallo tra i vari messaggi è proporzionale al numero di partecipanti alla sessione per non occupare troppa banda. Oggi RTP viene usato poco, sostituito da pacchetti HTTP come Netflix. Non viene trasmesso tutto il video dal server al riproduttore, ma vengono utilizzati meccanismi che aggiustano man mano il rate di trasmissione. Abbiamo 2 buffer: 1) uno gestito da TCP che serve a mantenere i dati ricevuti per consegnarli in ordine; 2) L’applicazione prende i dati dal buffer e li accumula in un buffer di riproduzione che viene svuotato man mano durante la riproduzione. Il grado di riempimento del buffer varia poiché la rete non è in grado di mandare pacchetti con una rate di tempo regolare. Lo streaming HTTP utilizza le tecniche DASH: servono per adattare HTTP alla riproduzione: il server frammenta i media da trasmettere in tanti pezzetti; ogni pezzetto viene memorizzato in varie versioni a differenti risoluzioni; il player guarda periodicamente il buffer Se vede che questo è abbastanza pieno allora mantiene la qualità del video, se invece inizia a svuotarsi riduce la qualità, in questo modo ci sono meno dati da inviare garantendo la consegna anche se a risoluzione peggiore. Questo approccio non richiede nulla lato server in quanto necessito solo di repliche dello stesso contenuto opportunamente codificate. LIVELLO APPLICATIVO: Scelta tra TCP e UDP: 1) se le applicazioni si basano su semplici interazioni richiesta-risposta, allora UDP; 2) se le applicazioni devono scambiarsi una grande quantità di dati allora conviene TCP. LIVELLO 5 DNS: è un protocollo che serve per l’associazione di indirizzi IP in dei nomi simbolici (ad esempio www.unina.it viene associato 143.225.229.3; il protocollo si basa sullo scambio di messaggi UDP. Può fare anche: dare un alias ad un nome simbolico (rcsn1.roma.rai.it —> www.rai.it); alias dei server posta. Per usare il protocollo, o si utilizza un unico punto server che realizza la traduzione di tutti i nomi (pessima scelta), oppure si distribuisce il carico su più server, ciascuno dei quali ha il compito di raccogliere, gestire, aggiornare e divulgare le info che la riguardano. L’approccio utilizzato è quello gerarchico: i server più in alto contengono molte informazioni non dettagliate, mentre quelli in basso meno info ma dettagliate. Attraverso un colloquio di questi server si riesce ad ottenere un servizio completo. Supponiamo che un client richieda l’indirizzo IP di www.amazon.com, allora: 1) un client contatta un server radice per avere la lista degli indirizzi IP dei TLD per il dominio com; 2) il client contatta il server TLD che si occupa dei server COM e chiede chi è il server autorizzato per Amazon; 3) il client contatta il server autorizzato Amazon.com che gli restituisce il suo IP. La gerarchia è suddivisa in 3 livelli: Root server: ce ne sono 400 al mondo, e forniscono gli indirizzi IP dei server TLD (top level domain); TLD server: Si occupano dei domini di primo livello, come.com.net.org.. questi server forniscono gli indirizzi IP dei server di competenza; Server di competenza: ogni organizzazione deve averlo, potendo scegliere di implementare il proprio server autoritativo, oppure di pagare un fornitore di servizi per ospitare questi record su un suo server. La risoluzione può essere fatta in 2 modi: Query iterative: Un host contatta un server locale indicando l’indirizzo che vuole richiedere. Il server locale chiede al root dns server dove cercare il TLD. Il server locale chiede quindi al TLD dove cercare l’autoritative. Ritorna successivamente il nome del server da contattare. Non conosco quindi il nome, ma qualcuno a cui chiederlo; Query ricorsive: il server locale chiede al server di competenza, che chiede al TLD che chiede al root server. Il root server manderà un messaggio di risposta al TLD, che cercherà l’indirizzo e manderà il messaggio di risposta a sua volta al server di competenza, che manderà la risposta al server locale. Visto che il numero di richieste che vengono fatte per ottenere un IP è almeno 8, per evitare perdite di temp si utilizza un meccanismo di caching, ovvero si memorizzano localmente le richieste per in certo tot di tempo, dopo il quale vengono eliminate. Un messaggio dns ha come formato: Nome e tipo per una richiesta; RR in risposta ad una richiesta; Records per server authorative; informazioni addizionali utili che possono essere utilizzate. RR è formato dalla quadrupla: nome, valore, tipo, TTL. Il campo nome e valore dipende dal campo tipo. PROTOCOLLO HTTP: definisce la struttura dei messaggi ed il modo in cui client e server scambiano questi ultimi. Definisce in che modo il client richiede le pagine ai web server, e come questi le trasferiscono ai client. Ogni pagina web è costituita da oggetti (testo HTML, foto, video…) che sono dei file indirizzabili tramite URL (Uniform Resource Locator). Ogni URL ha 2 componenti: 1) nome dell’host e del server che ospita l’oggetto (www.unina.it); 2) percorso dell’oggetto (ingegneriainformatica/picture.gif). Esempio: http://www.unina.it/ingegneriainformatica/picture.gif Il client è detto browser web (implementa il lato client HTTP), come Internet Explorer, ed è quello che pone le richieste al server. Il web server, che implementa il lato server HTTP, ospita gli oggetti web indirizzabili tramite URL. È un protocollo testuale: i messaggi sono sequenze di byte, ognuno dei quali rappresenta un carattere ASCII. Esempio di richiest HTTP lot dien : Un richiest è strufusto in blocchi d'informazion: merde URL VERSIONL Meado : Modelis il client inserzio col con cui server #e - - GET fezories /Fina-and-Tricks HTTP/1 7. URL : Trinza di conferi univia che identific la risors richies 07 Host : WWW. itomisso Mes. user-agen: Moril Firk/. Header VERSIONE : Versione HTTin us dal client Accert : Text/Wind - BODY HEADLR: Varie info (nome wel sener punt aplione client , , -me body /body/Wink z.... Boby: Genus dell richiest (le. Compilazione moduli online Il medo stabilisce il tis di richiest da sare del client. HTTP è un protocollo di tipo stateless: non mantiene nessun tipo di informazioni precedentemente inviate, né il server e né il client. La request Line ha 3 campi: 1) METODO può assumere diversi valori, tra cui: GET: usato quando il browser richiede un oggetto identificato dall’URL. Se la risposta è disponibile, il server la invia nel corpo del messaggio di risposta, e può essere: assoluto: la risorsa viene chiesta senza nessuna specifica; condizionale: si richiede la risorsa specificata dall’Header; parziale: si richiede una sottoparte della risorsa. Solitamente vi è la prima riga che è la request Line che è di tipo condizionale, mentre le righe successive sono Header Line e sono tutte condizioni e info che bisogna rispettare; HEAD: si richiede se la risorsa identificata dall’URL è valida, ma a differenza di un GET la risorsa non viene inviata. Serve al client solo per sapere se è accessibile e quali caratteristiche ha; POST: post viene utilizzato quando ad esempio il richiedente compila un form, come ad esempio l’inserimento di voci in un motore di ricerca. Quei contenuti specifici della pagina dipendono solo da ciò che l’utente ha inserito, ed inoltre non viene creata alcuna risorsa. Il server può rispondere in 3 modi: 200 ok: dati ricevuti e sottomessi alla risorsa specificata ed è stata data la risposta; 201 created: dati ricevuti ma la risorsa non esisteva ed è stata creata; 204 no content: dati ricevuti e sottomessi alla risposta ma non è stata data risposta; PUT: serve per trasmettere informazioni dal client al server. Consente agli utenti di inviare un oggetto alla directory sul web. Serve per trasmettere informazioni e può essere: sicuro: non genera cambiamenti allo stato interno del server; idempotente: l’effetto sul server di più richieste identiche è lo stesso di una singola richiesta; 2) URL: URL dell’oggetto da richiedere; Version: versione di http utilizzata. MESSAGGI DI RISPOSTA HTTP: prima riga di status Line, numero di 3 cifre per indicare il tipo di risposta, di cui la prima cifra sta ad indicare la classe della risposta. Le altre righe son sempre Header Line. Alcune risposte possono essere: 200 ok; 400 bad request: errore sintattico nella richiesta; 404 not found: l’oggetto non è presente o l’URL non è valido. Poiché HTTP è di tipo stateless, vengono utilizzati dei meccanismi di cookies, ovvero brevi informazioni scambiate tra client e server. Tramite questi si riesce a mantenere lo stato delle precedenti connessioni. Il cookie viene mandato dal client al server ogni volta che richiede un documento. In questo modo, il server genera risposta anche in base all’analisi sul cookie nelle connessioni successive. In questo modo si definiscono nuovi possibili header. Nella risposta viene mandato un campo cookie al client che decide se vuole memorizzarlo o meno. Nella richiesta il client decide se mandarlo o meno al server. I cookie possono avere anche una durata o scope. Poiché il protocollo HTTP è basato sul protocollo TCP, si hanno due scelte: Connessione non Persistente: in questo caso ogni coppia richiesta/ risposta avviene su una connessione TCP separata. I passaggi da seguire sono: 1) il client stabilisce una connessione TCP con il server; 2) quando è stata creata la connessione, fa una richiesta HTTP con il server; 3) Il server riceve la richiesta, la elabora ed invia un messaggio di risposta; 4) Il server comunica a TCP di chiudere la connessione, che non verrà chiuso finche non si è sicuri che il messaggio è stato inviato; 5) se nel messaggio di risposta ci sono riferimenti ad altri oggetti, si riapre la connessione per ciascuno di essi riseguendo tutti i passaggi. In questo caso avrò 2 round trip time per ciascuna richiesta, ovvero 2 volte il tempo totale impiegato da un pacchetto dati per viaggiare della sorgente alla destinazione e tornare alla sorgente; Connessione Persistente: ogni coppia richiesta/risposta tramite gli stessi client/Server avviene sulla stessa connessione TCP, che è mantenuta nel tempo e viene chiusa solo allo scadere di un timer. Qui il server lascia la connessione TCP. Il server HTTP chiude la connessione quando aperta dopo l’invio di una risposta, per cui le richieste e le risposte successive tra stessi client e server possono essere fatte sulla stessa connessione. Esiste anche la variante di connessione persistente con pipelining, dove non c’è il vincolo di aspettare di ricevere la risposta per inviare una nuova richiesta, velocizzando quindi le interazioni. Il server HTTP chiude la connessione quando questa rimane inattiva per un lasso di tempo. L’ultimo aspetto fondamentale del protocollo è il Web Caching, che si verifica quando le richieste prima di arrivare al server vengono intercettate dalla cache per rendere le richieste che avvengono molto spesso più rapide. La cache è condivisa da più client. Se l’oggetto non è presente, la cache stesso può richiederlo. Posso avere una cache sia lato server che client. Il problema del Web Caching è la gestione della coerenza quando si parla di aggiornamenti degli oggetti nel server, poiché devono essere aggiornati anche quelli contenuti nella cache. Per risolvere tale problema, abbiamo due approcci: TTL: il server quando fornisce un oggetto indica anche dopo quanto tempo scade; GET condizionale: se il TTL scade, il client fa un controllo tramite GET condizionale per verificare se l’oggetto è stato modificato oppure no. CONTENT DELIVERY NETWORK (CDN): Il tempo di caricamento di una pagina web è molto importante. Per velocizzare questo processo, vi è questa infrastruttura (CDN) che si basa sulla distribuzione di repliche dei contenuti dal server principale a molti più server disposti nel mondo. È un servizio a pagamento che utilizzano i gestori dei siti web commerciali. Gli obiettivi di una CDN sono: 1) alleviare il carico ed il traffico dal web master, proteggendolo da picchi improvvisi; 2) Offrire contenuti ai singoli utenti in modo più veloce; 3) Rendere il sistema di distribuzione più affidabile e robusto rispetto a guasti. PROTOCOLLO FTP: dedicato al trasferimento dei file di qualsiasi tipo su due macchine, utilizzando il modello client/server. Viene utilizzato principalmente per copiare un file da una macchina ad un’altra per poterlo utilizzare localmente (file Office, eseguibili, etc). Lavora utilizzando due connessioni parallele, una di dati ed una di controllo. Dati: file che vanno dal client al server e viceversa; Controllo: scambio di comandi, messaggi di risposta tra client e server. Quando si stabilisce una connessione, viene creato prima di tutto il canale di controllo nel quale il client invia comandi al server, che risponde tramite codici di stato. Dopodiché sia il client che server possono creare un canale dati. Ci sono due versioni differenti di FTP: Attivo: il client apre il canale di controllo verso il server. Se il client dovesse essere protetto da firewall, allora il server non potrà inviare risposta, in quanto tutte le connessioni esterne vengono bloccate; Passivo: il server rende nota la porta tramite il quale il client può creare il canale dati. Essendo il client in questo caso ad iniziare la connessione, questa non viene bloccata dal firewall. PROTOCOLLO SMTP (simple main transfer protocol): questo protocollo costituisce il cuore della poste elettronica su internet. SMTP trasferisce i messaggi dal mail server del mittente a quello del destinatario. La codifica di tutto il corpo avviene in ASCII a 7 bit. Ciò significa che non si possono inviare video o audio direttamente, ma richiede che i dati vengano prima opportunamente codificati e una opportuna decodifica in ricezione. Distinguiamo 3 entità: User Agent: è colui che si occupa della scrittura/lettura e modifica dei messaggi (come outlook). I messaggi in entrata ed in uscita vengono memorizzati su un server, detto mail server. Il protocollo viene usato anche tra user agent e server durante l’invio di una mail; Mail server: rappresenta la mail box che contiene tutti i messaggi. Ha una coda di messaggi in uscita che contiene tutti i messaggi non ancora inviati. Funge sia da client che da server in base al ruolo che ricopre lo scambio dei messaggi. Protocollo SMTP: utilizza TCP per consegnare in modo affidabile. Ci sono 3 fasi per il trasferimento: Handshaking; Trasferimento messaggio; Chiusura connessione. Un messaggio SMTP è formato da header (contiene info come mittente, destinatario, nome del messaggio) ed il body (formato da soli caratteri ASCII). Un’estensione utile è MIME che permette di avere più codifiche come audio, video, immagini, che vengono riconosciute e aggiunte nell’header che ne identificano il tipo e il metodo utilizzato per la codifica. PROTOCOLLO POP3: protocollo che entra in azione quando lo user agent apre una connessione TCP con il mail server, esegue 3 fasi: Autorizzazione: durante questa fase lo user agent invia nome e password per identificare l’utente; Transazione: Lo user agent recupera i messaggi, e può fare una serie di operazioni come la cancellazione. Questa fase termina quando il client invia un messaggio quit che chiude la sessione; Aggiornamento: Qui il server di posta rimuove tutti i messaggi marcati per la cancellazione. APPLICAZIONI PEER TO PEER: è un’alternativa al client/server. Ci sono host connessi in modo intermittente, chiamati peer, che comunicano in modo diretto l’uno con l’altro. I peer non sono dei fornitori di servizi ma sono end system controllati dagli utenti. Comunicazione utilizzata per la distribuzione di grandi file da un solo server a molti host. Poiché utilizzato per upload e download, parametro fondamentale è il tempo di distribuzione ad n peer: 1) banda di upload del server U(sorgente); 2) Banda di upload del peer U(iesimo); 3) Banda di download del peer D(iesimo); 4) Dimensione del file (bits); 5) Numero di peer N. Il tempo di distribuzione sarà il tempo richiesto perché tutti i peer ottengano una copia del file. In generale questo tempo viene dato da: (N*F)/Usorgente, cresce linearmente al crescere di peer. Ciascun peer assiste il server nella distribuzione del file: quando il peer riceve alcuni dati, può utilizzare la propria capacità di upload per re-distribuire i dati agli altri peer. In questo caso il tempo è indipendente da N. Abbiamo diversi approcci con cui utilizzare le applicazioni P2P: Directory centralizzata (Napster): Quando un peer si connette alla rete, si collega ad un server centralizzato, a cui fornisce indirizzo IP e oggetti che rende disponibile per la condivisione. In questo modo il server raccoglie le info di tutti i peer e si aggiorna dinamicamente. Il problema di questo approccio è che ha un single point of failure. Il trasferimento del file è decentralizzato, ma la locazione dei contenuti è centralizzata; Directory decentralizzata (Kazaa): l’architettura viene completamente distribuita andandone a realizzare una di rete sovrapposta (overlay), fatta da connessioni TCP tra peer. Ogni peer può essere collegato ad un massimo di altri 10 peer. In Kazaa ogni peer è associato ad un group leader (esso stesso un peer) che ha il compit di memorizzare tutte le info in condivisione dei membri. Ogni group leader è capace di interrogare gli altri group leader. File distribution (Bit Torrent): in bit torrent l’insieme di tutti i peer che partecipano alla distribuzione di un file è detto Torrent, ed i peer in un torrent scaricando dei chunk (pezzi di file di stessa dimensione). Appena entra nel torrent il peer non possiede alcun chunk, ma gli saranno poi assegnati nel tempo, che mentre scarica invierà ad altri peer. Una volta acquisito l’intero file, il peer può scegliere di lasciare il torrent oppure di rimanerci, mandando chunk ad altri peer. In generale, peer differenti possiedono diversi sottoinsiemi di chunk del file. Quindi, per sapere chi ha cosa, periodicamente un peer chiede a tutti i peer vicini la lista dei chunk che hanno, e poi invia le richiede per i chunk che gli mandano. LIVELLO 2 DATA LINK: Questo livello si occupa della comunicazione tra dispositivi fisicamente connessi. Le unità di dati sono dette frame, e sono costituite da header, payload ed eventualmente trailer. I servizi offerti a questo livello sono: A) Framing e accesso ai link: Incapsula i dati dell’unità di trasmissione in frame; B) Trasferimento affidabile dei dati tra due dispostivi fisicamente connessi: Il dispositivo può essere collegato in 2 modi: 1) collegamento punto a punto: non si ha la necessità di indirizzamento in quanto il collegamento è esclusivo; 2) collegamento non esclusivo: si ha la necessità di individuare il destinatario attraverso l’indirizzo MAC. Il trasferimento dei dati può essere: Half duplex: trasmetto un solo dispositivo mentre l’altro è in attesa; Full duplex: La trasmissione avviene in entrambi i versi; C) Controllo del flusso: Per regolare la velocità di trasmissione; D) Rilevazione e correzione degli errori; le funzionalità del livello Data Link sono implementante in dei circuiti elettronici detti schede di rete. È necessario gestire accoppiamento tra scheda di rete e calcolatore attraverso meccanismi di Input/Output. RILEVAZIONE DEGLI ERRORI: La rilevazione di errori si basa sull’idea di aggiungere info di controllo. Si utilizzano dei bit in più, detti EDC che vengono messi nel trailer ed il cui valore è calcolato in funzione dei dati. Grazie a questo, quando il destinatario riceve la frame separa la parte dei dati da quella di controllo e calcola il controllo allo stesso modo in cui l’ha fatto il mittente. Se sono uguali, allora ok. Esistono vari tipi di controllo: Parità ad un bit: si rilevano le informazioni di controllo su un singolo bit (1 se gli 1 sono dispari o 0 se sono pari). Se sbaglio due bit però non è in grado di rilevare l’errore. Rimane comunque un discreto controllo; parità a due bit: ho i bit di controllo sulla colonna che è calcolato sulla parità di riga, ed il bit di controllo di riga che è calcolato sulla parità in colonna. L’errore si trova tra intersezione della riga e della colonna errati. Anche in questo caso si deve ammettere che si sia fatto un solo errore; checksum: usata a livello trasporto, il mittente tratta il contenuto del segmento come una sequenza di interi espressi su 16 bit, viene fatto il complemento ad 1 della somma in complementi a 1 del contenuto del segmento, e la checksum viene inserita all’interno di un campo dell’header del segmento. Il ricevitore calcola la somma in complemento ad 1 dei dati ricevuti, compresa la checksum. Se il risultato è diverso da tutti 1 allora c’è un errore; Codici CRC (cyclic redundancy check): vengono considerati i bit di dati D come un numero binario, viene scelto un opportuno pattern di r+1 bit (generatore) G. L’obiettivo è quello di scegliere r bit di controllo CRC, R, tali che sia divisibile esattamente per G (modulo 2), se il resto della divisione non è nullo allora vi è un errore. Con tale tecnica si possono rilevare tutti gli errori che coinvolgono meno di r+1 bit. TRASFERIMENTO DEI DATI: esistono due tipi di collegamento: collegamento esclusivo oppure broadcast tramite un mezzo condiviso come Wi- Fi, reti cellulari, etc. Nel caso di quest’ultimo bisogna risolvere 2 problemi: 1) a chi sto indirizzando i dati? 2) Stabilire meccanismi di condivisione. A tal proposito vediamo tre famiglie principali di protocolli di accesso multiplo: 1) Channel partitioning: si suddivide il canale in porzioni più piccole, in modo che gli nodo gode dell’utilizzo esclusivo di una di queste porzioni: TDMA (time division multiple access): divisione della capacità trasmissiva del canale. Se vi sono 4 stazioni, ognuna trasmette alla massima velocità consentita ogni quarto di tempo. Con questo algoritmo si evitano le collisioni ma ne risente in throughput, poiché bisogna attendere al proprio turno e tutte le stazioni devono avere un clock sintonizzato; FDMA ( frequency division multiple access): viene associata una banda in modo esclusivo per una trasmissione. Per il resto è uguale allo scorso algoritmo; CDMA (code division multiple access): ad ogni stazione viene associata un codice. Tutte le stazioni utilizzano la stessa frequenza di trasmissione, andando a sovrapporre i segnali. Bisogna quindi utilizzare un’opportuna codifica per evitare ciò. Ad ogni dato viene assegnato un codice unico detto sequenza di chipping e sono ortogonali tra di loro. In questo modo posso far trasmettere a più nodi simultaneamente riducendo al minimo l’ interferenza. Quando devo decodificarle faccio il prodotto scalare del segnale codificato con la sua chipping sequence. 2) Random Access: Si lascia ad ogni stazione la possibilità di prendere anche tutta la capacità trasmissiva del canale: Slotted ALOHA: il tempo per i vari pacchetti è diviso in slot con stessa durata. Se un nodo ha dati disponibili per la trasmissione, inizia a trasmettere al nuovo slot disponibile, senza controllare se è libero oppure no. Possono esserci delle collisioni. Se vi è una, il nodo decide se trasmettere o no. Decide se ritrasmettere con una probabilità p, e continua finché la trasmissione va a buon fine. Il presupposto è che tutti i nodi siano sincronizzati; ALOHA PURO: non vi è sincronizzazione, ogni stazione può trasmettere quando vuole. Si raddoppia la probabilità di collisione e le prestazioni calano; CSMA (carrier sense multiple access) & CSMA/CD: le stazioni, prima di trasmettere, ascoltano per vedere se il canale è libero oppure se c’è una trasmissione in corso. Si ha maggior efficienza, ma si presenta un problema in termini di tempo di trasmissione e distanza tra due nodi. È possibile che una stazione a cui non è ancora arrivato il segnale, trasmetta e vada a creare una collisione, entrando in un probabile loop di ritrasmissioni. Una versione migliora è la /CD dove in caso di collisione le trasmissioni non proseguono ma si arrestano; Taking Turns: l’accesso al canale viene fatto a turni: Polling: vi è un nodo master privilegiato che concede a turno alle varie stazioni di poter trasmettere alla massima potenza. Le stazioni mandano richiesta di trasmettere al master che risponde con un messaggio di ok. I problemi di tale soluzione sono la presenza di un single point of failure ed un tempo di latenza difficile da gestire; Token Passing: non si prevede un master ma il permesso a trasmettere avviene tramite il passaggio di un token da stazione a stazione. Dopo che una stazione finisce, passa il token ad un’altra. Anche qui si presentano problemi di latenza e di single point of failure. RETI LOCALI ETHERNET-LAN: l’ethernet è una tipologia di reti locali che consentono di mettere in comunicazione un certo numero di sistemi. Viene usata per la LAN. Abbiamo diverse tecnologie: Indirizzamento: IP (livello di rete, permettono la consegna del pacchetto ad un destinatario collegato alla rete) oppure MAC (o LAN o fisici, livello data-link cablati all’interno delle schede di rete). Questi indirizzi possono essere Unicast, Multicast e Broadcast. L’associazione tra i due avviene tramite protocollo ARP, poiché in un singolo pacchetto sono presenti entrambi. Ethernet: tecnologia realizzata tramite cavo coassiale. L’accoppiamento tramite stazioni e questo cavo avviene tramite un Transiver, ovvero un componente che ha su un’estremità un’antenna che permette di trasformare il segnale elettromagnetico in segnale elettrico. La frame Ethernet è composta da: 1) Preambolo: utilizzato per sincronizzare i clock del mittente e destinatario; 2) Dest address: la frame è ricevuta da tutti gli adattatori presenti sulla LAN ed è scartata da tutti tranne quella che ha uguale indirizzo di destinazione; 3) Type: Il tipo del payload della trama (solitamente IP); 4) CRC: codice che serve ad effettuare un controllo alla destinazione per verificare se i dati sono integri; la dimensione minima del frame la ottengo quando il payload ha dimensione minima. Se ho una Ethernet che trasmette pacchetti di dimensioni minima, ho più frammentazione di pacchetti e quindi ho un grande overhead. Per la trasmissione di dati Ethernet utilizza la tecnica CSMA/CD con una modifica detta Exponential Backoff ( l’hub non fa nulla per evitare le collisioni, è la scheda di rete dell’End system che implementa CSMA/CD): quando si verifica una collisione, la stazione che trasmette si ferma, e con una probabilità k=0,1 decide se ritrasmettere (0 ritrasmette subito, 1 aspetta un certo tempo); si verifica un’altra collisione. K aumenta di due e ritrasmette solo se esce zero; continua così fino a K uguale 16 dopodiché si rinuncia a ritrasmettere. Come erano strutturati i collegamenti? Prima si utilizzava un cavo Ethernet fine che veniva inserito in una catena di collegamenti che formavano un bus, ognuno dei quali era collegato ad un end system. Si è passati poi ad un cablaggio a stella. Tutto converge nell’Hub che mette in collegamento le varie stazioni. L’hub funge da ripetitore: ripete il segnale che arriva su una porta su tutte le altre porte. Per connettere le cose all’hub si utilizza un Cavo UTP unshilded twisted pern. È detto unshilded perché non ha nulla per schermare i disturbi provenienti da fonti esterne, ed il cablaggio si divide in due parti: cablaggio volante: i fili collegano la scheda di rete ad una presa fissa a muro; cablaggio fisso: sta dentro al muro, e arriva fin dove si carica l’HUB centrale. All’estremità i cavi sono messi dritti, in un certo ordine e possono avere due tipologie: Straight: il cavo alle estremità ha la stessa disposizione di fili. È utilizzato per il collegamento hub/switch; Cross: utilizzato per fare un collegamento diretto tra due computer. La disposizione dei fili alle estremità è differente. HUB: sono ripetitori di bit, che riproducono i bit in ingresso da un’interfaccia su tutte le altre interfacce vengono organizzati in una gerarchia multilivello, tramite un backbone Hub, che si differenzia in quanto è più grande, perché ha un flusso maggiore. Nonostante gli hub permettano di coprire vasti spazi, non isolano i domini di collisione: Le stazioni di una LAN possono subire una collisione per una trasmissione simultanea da parte di qualunque altra stazione presente in qualsiasi altra LAN. I domini di collisione si risolvono con i router o con i bridge; BRIDGE: il principio di funzionamento è simile a quello degli HUB. Operano però con una tecnica di filtraggio, che non richiede una configurazione esplicita dall’amministratore di rete. Quando 1 vuol mandare un pacchetto a 2 viene utilizzato il flooding per capire dov’é. Quando il pacchetto arriva a destinazione viene segnato il MAC address del destinatario, in modo che a parte il primo pacchetto che poteva andare in collisione, il resto è limitato nel loro dominio di connessione. I bridge isolano le collisioni grazie alla capacità di disporre i frame nel buffer. Il problema del bridge è lo spanning tree: quando vi sono 3 hub collegati a 2 bridge può succedere che un pacchetto broadcast venga mandato a vicenda andando a creare un loop. Per risolvere, si taglia un ramo, andando a tagliare il loop. ROUTER: non propagando in broadcast, limita i domini della collisione sui singoli HUB. Che conseguenze porterebbe la sostituzione HUB router? 1) gli Hub operano a livello fisico, è come se i pc operassero su una grande LAN. Gli indirizzi allora hanno stessa Subnet, mentre nei router ho 3 interfacce diverse, ognuna con proprio IP. Se prima avevo un unico blocco di indirizzi, ora dovrò fare un subnetting e dividere il blocco in 3 parti; 2) un Hub ha più o meno una decina di porte, mentre il router di meno; 3) il router ha un costo maggiore. E invece una sostituzione Router Bridge? 1) sono entrambi store and forward; 2) si basano tutti e due sulle tabelle (tabelle di routing e tabelle di Filtering); 3) il bridge opera fino al livello 2 mentre il router fino al livello 3; 4) Le operazioni nel bridge sono più semplici; 5) i router non hanno bisogno dello spanning tree visto che usano il TTL. I bridge vengono utilizzate nelle reti piccole, mentre i router in quelle grandi. SWITCH ETHERNET: logica simile a quella del bridge: inoltra un frame su una porta solo se vi è assegnata una destinazione, in modo da isolare i domini di collisione. Permette a coppie di stazioni diverse di fare una comunicazione temporanea grazie al fatto che al suo interno ha una griglia di fili orizzontali e verticali, che se collegati opportunamente possono avere più connessioni contemporaneamente. Viene consentito l’accumulo di pacchetti. Lo switch, rispetto all’hub, ha un ruolo attivo memorizzando i pacchetti ed esaminando il MAC di destinazione, facendo un’azione selettiva. Se vi è una collisione si opera (come per gli altri) sempre in CSMA/CD. Poiché lo switch è FULL DUPLEX, ovvero utilizza una porta per la ricezione ed una per l’invio, non si generano collisioni. Alcuni supportano il CUT-THROUGH, ovvero la capacità di inoltrate frame anche se il pacchetto non è stato ancora trasmesso. Ciò diminuisce il tempo di latenza ma può generare errori nei frame che verranno visualizzati solo dal destinatario. VIRTUAL LAN - VLAN: le virtual LAN servono per far coesistere sulla stessa infrastruttura di rete due o più reti IP (LAN) distinte. Per evitare che comunicazioni tra LAN diverse (magari 3 SUBNET connesse ad un router) passino dal router, si crea un’infrastruttura basata su un unico switch, ed a ciascuna porta è associata una specifica VLAN. Ad ogni VLAN sono associate delle porte su cui confluiscono gli utenti. Le comunicazioni con la stessa VLAN avvengono tramite switch o router. Ho quindi bisogno ancora di un router a 3 interfacce, ma entrambe collegate ad uno switch. Supponiamo di avere una stessa situazione gestita in modo diverso: caso senza VLAN: l’associazione avviene con identificazione della porta fisica su cui l’utente è collegato allo switch. Senza le VLAN, in caso di pacchetto broadcast, si spedirà a tutte le porte, in quanto non si può differenziarle, aumentando di conseguenza il traffico; Caso con VLAN: a tutte le porte dello switch è associata una VLAN, quando invio l’ARP questa lo trasmetterà in broadcast solo alla LAN di interesse. L’associazione delle LAN viene fatto manualmente dall’amministratore, che deve assegnare coerentemente gli IP agli end system in modo che ci sia coerenza tra VLAN e subnet (Subnet = VLAN). La configurazione VLAN avviene anche dinamicamente tramite MAC. La VLAN di default è la 1 e non può essere eliminata. Se collego un hub e non direttamente dei dispositivi allo switch, tutti i dispositivi di quell’HUB devono fare parte della stesa VLAN: comunicazione nella stessa VLAN: i PC che sono associati alla stessa VLAN possono comunicare tra loro direttamente, a differenza di quelli in VLAN differenti in quanto essendoci basati sul protocollo IP hanno subnet differenti; comunicazione tra VLAN differenti: la comunicazione tra LAN differenti richiede l’utilizzo di un router, esterno allo switch che si collega ad esso tramite due porte, una per ogni interfaccia. In questo modo ho messo in comunicazione due VLAN, ma se ne volessi mettere più di due avrei bisogno di altri router. Questo problema viene risolto implementando nello switch le funzioni di forwarding, in modo che agisca come un router IP a livello 3. Inoltrare un pacchetto tra due subnet diverse comporta anche una capacità di elaborazione del pacchetto. Deve calcolare checksum e cambiare TTL; Comunicazione a livelli superiori - VLAN TRUNKING: supponiamo di voler estendere una VLAN tra più switch distinti. La tecnica di trunking permette di utilizzare un solo collegamento fisico, nel quale viaggeranno tutti i pacchetti di VLAN differenti. Per riconoscere di quale VLAN è il pacchetto, questi vengono etichettati, aggiungendo un identificativo nell’header. Questa operazione viene detta di Tagging. Un’altra soluzione può essere il Router on a stick: il router esterno ha solo un collegamento fisico con lo switch e su di esso i pacchetti vengono marcati anch’essi con il trunking. Esistono due protocolli di trunking: protocolli di incapsulamento: L’header aggiuntivo è messo avanti all’header ethernet; protocolli a piggyback: si modifica proprio L’header Ethernet con un ID di 4 byte. RETI LAN WIRELESS WLAN: come è organizzata una rete wireless? Organizzazione infrastrutturale: terminali collegati ad una rete senza fili, che si collegano a degli elementi infrastrutturali centrali (base station o access point), che offrono connettività ad un certo numero di terminali che sono nel loro raggio di copertura. Queste stazioni sono collegate ad una struttura di rete tradizionale, e la parte di backbone è cablata. Lo scopo di queste base station è fare da Relay: consentono la ricezione e la trasmissione di pacchetti; Organizzazione ad hoc: non vi sono base stations ma direttamente terminali che inviano i pacchetti ad altri terminali al di fuori della zona di copertura solo se gli altri nodi wireless nell’ambiente sono disponibili ad inoltrare pacchetti da uno all’altro, in modo che, attraverso una serie di hop, il pacchetto arrivi al destinatario. Inoltre possono essere: 1) Single hop: infrastruttura: mittente e destinatario sono collegati alla stessa stazione di base, e quindi la trasmissione arriva alla base che ritrasmette al terminale di destinazione; Ad hoc: si utilizzano tecnologie come il bluetooth che consentono di mettere in collegamento diretto 2 dispositivi; 2) multiple hops: infrastruttura: è possibile per un pacchetto fare più viaggi, attraversando varie basi fino ad arrivare a destinazione (come i ripetitori); Ad hoc: non è garantito il poter raggiungere tutte le destinazioni, dipende da quanti terminali disponibili ci sono per fare da intermediari. I collegamenti wireless hanno caratteristiche molto differenti dai cavi cablati: l’intensità del segnale diminuisce molto rapidamente in base alla distanza (molteplici segnali di disturbo), il segnale non essendo cablato viaggia in un mezzo non protetto e può essere soggetto ad interferenze, propagazione multi percorso (cammini multipli per arrivare ad un determinato punto, quindi una radio ricevente riceve lo stesso segnale che ha fatto vari percorsi per arrivare). Le WLAN fanno da mediatore per l’accesso ad un terminale che poi sarà collegato via cavo al resto della rete. Per la trasmissione dei dati nelle bande ISM si utilizzano 2 tecniche, di tipo SPREAD SPECTRUM: invece che concentrare la trasmissione su un’unica banda di frequenza stretta, si realizza un intervallo di frequenza molto ampio in modo da evitare le interferenze da parte di altre sorgenti. FREQUENCE HOPPING BLUETOOTH: Il segnale viene trasmesso su una sequenza random di frequenze. Il ricevitore, utilizzando lo stesso algoritmo del mittente con lo stesso seme, è in grado di saltare le frequenze in modo sincronizzato con il mittente, per ricevere correttamente il frame. DIRECT SEQUENCE 802.11/ WI-FI: Il segnale non viene inviato sui canali come sequenza di dati, ma come sequenza di chipping ottenuta facendo l’or esclusivo sulla sequenza di dati ed n bit casuali. L’amministratore sceglie il canale da utilizzare per la trasmissione. Successivamente l’host si deve associare alla base station, tramite Mac address e identificativo della base. L’associazione funziona secondo due schemi: Passive Scanning: non si prevede un ruolo attivo del terminale, che accede solamente alla radio ricevente e riceve pacchetti speciali, detti BACON, che sono trasmessi dagli access point (base station) che si trovano nella sua area di ricezione. Il terminale poi decide con quali di questi si vuole associare e manda un pacchetto di richiesta. L’access point risponde con un frame di risposta in cui accetta l’associazione del terminale; Active Scanning: il terminale invia uno speciale pacchetto di richiesta di presentazione a tutti gli AP nell’area, in broadcast, a cui tutti gli AP rispondono mandandogli le proprie caratteristiche. L’host sceglie poi l’AP con cui vuole associarsi e si mandano messaggi di richiesta e risposta di associazione. PROBLEMA DELLA GESTIONE DELL’ACCESSO AL MEZZO CONDIVISO NEL CASO DELLE RETI WLAN: il problema rimane il fare in modo che più stazioni che condividono un unico canale possano utilizzarlo senza che si verifichino delle collisioni. Qui la rilevazione delle collisioni è problematica per due motivi: Problema del nodo nascosto: se abbiamo 3 nodi che vogliono trasmettere pacchetti, ma a causa di un ostacolo fisico il collegamento diretto tra 2 di loro è perso, allora quei due nodi si diranno nascosti; Problema del nodo esposto: se la distanza tra due nodi è troppo grande, il segnale arriverà estremamente attenuato. Questi due segnali vogliono arrivare entrambi al 3 nodo, che però non riesce a separarli poiché arrivano sullo stesso canale, nessuno è in grado di rilevare la collisione. Quali differenze posso apportare al CSMA/CD in modo da risolvere questi problemi? CSMA/CA: 1) il trasmettitore effettua una osservazione del canale, monitorando che sia impegnato con un altro nodo, per un certo tempo. Successivamente trasmette un frame; 2) se non è impegnato comincia la trasmissione, altrimenti attende un ACK di risposta incrementando il tempo di attesa man mano; 3) il ricevitore aspetta di ricevere un frame; 4) quando lo riceve fa un controllo di correttezza, e dopo aver aspettato un certo tempo, manda un frame di ACK. Per fare l’accesso nelll’header del frame che porta i dati c’è un campo duration che da un’indicazione relativa alla durata della trasmissione dei dati, in questo modo gli altri nodi che vogliono trasmettere, non provano a farlo per la durata di duration. I nodi inviano piccoli frame di richiesta a trasmettere per impedire la possibilità di collisioni attraverso una tecnica che prevede che un nodo non possa iniziare a trasmettere se prima non ha ricevuto un permesso inviatogli da un altro nodo (L’ACK dall’access point), in questo modo non ci saranno più collisioni dei dati, ma al massimo possono esserci delle collisioni tra i frame di controllo. Come è fatto un frame? 1) frame di controllo che viene inviato per richiedere il permesso a trasmettere; 2) Duration: durata della trasmissione; 3) 4 indirizzi MAC: A-B) indirizzo sorgente e destinazione (indica se il frame è di un host o di un AP); C) indirizzo dell’interfaccia del router al quale è collegato l’AP; D) usato solamente tra le infrastrutture. Quando poi il frame arriva al router, i dati contenuti sono trasmessi in un altro frame, dove viene specificato solo il 2 e 3 indirizzo, che rappresentano la destinazione e la nuova sorgente (cioè il router). Comunicazione tra più Access Point: nelle reti casalinghe si ha solo un access point, mentre nelle reti aziendali se ne hanno diversi, poiché ogni AP ha una propria area di copertura, e quando questa è troppo ampia o ha troppi host è meglio dislocarla per non creare traffico di rete. Tutti questi AP vanno poi in una struttura fissa che “li tiene insieme”.se due host in due diversi AP vogliono comunicare, succede che il frame viene inoltrato attraverso il sistema di distribuzione interno. Struttura delle reti cellulari: sono reti basate su trasmissione wireless di tipo pubblico. L’accesso è possibile da nodi che coprono parti di spazio molto molto grandi, e sono operati tramite operatore pubblico che offre connettività agli utenti. L’aspetto interessante è quello della ripartizione delle frequenze delle varie celle radio, fatta in modo da minimizzare la sovrapposizione delle celle adiacenti. Esistono algoritmi che consentono di ripartire le frequenze centrali dei vari canali per minimizzare l’interferenza ai bordi delle celle, facendo uno sfasamento in frequenza. SOCKET DI BERKELEY: rappresentano un’attrazione di canale di comunicazione tra processi locali o remoti. Sono delle porte di comunicazione create dal SO, offerte come servizio da un processo in esecuzione ad una macchina in modo che questa possa accedere ai servizi di trasporto. Una volta ottenuta una porta di comunicazione tramite socket, i processi possono effettuare operazioni di ricezione e invio dei file. I meccanismi con cui funzionano sono detti Interprocess Communication: Volti a far parlare due processi sulla stessa macchina, o su due macchine differenti, e sono quasi indipendenti dal supporto fisico su cui viaggiano le informazioni. Le socket costituiscono un API: un insieme di funzioni C che invocate dai programmi utente possono accedere ai servizi del sistema operativo (si traducono poi in system call). Quando SO e applicazione interagiscono: 1) l’applicazione chiede al SO di utilizzare i servizi di rete; 2) Il SO crea una socket e la restituisce all’applicazione; 3) l’applicazione utilizza la socket, potendo chiamare le system call; 4) l’applicazione chiude la socket e la restituisce al SO. Quando due processi interagiscono: 1) comunicazione locale: due applicazioni localizzate nella stessa macchina si scambiano dati tra loro utilizzando l’interfaccia delle socket; 2) comunicazione remota con TCP/IP: nel caso di due macchine differenti, le socket sono il mezzo con cui l’applicazione parla con il livello di trasporto che è gestito dal SO. I 2 processi che devono comunicare lo fanno secondo il modello client/server, dove: 1) il processo che prende l’iniziativa è il Client che conosce l’indirizzo del server e chiede una risorsa tramite richiesta; 2) il processo che risponde alle richieste è il Server, che divulga il proprio indirizzo e si pone in attesa di richieste di servizio. L’indirizzo deve tener conto non solo di ciò che identifica la macchina, ma anche di ciò che identifica un processo con il quale si vuole comunicare. Per questo motivo esistono i port number. Il server a sua volta può essere: 1) Concorrente: se accetta più comunicazioni da client diversi (mantiene più comunicazioni contemporaneamente); 2) Iterativo: se può mantenere aperta una sola connessione alla volta. Gli altri client o vengono rifiutati o messi in attesa. I modi di comunicazione tra end point possono essere: Connection oriented: come per il TCP, i due end point hanno una connessione affidabile che trasporta flussi di byte ordinati. Il canale si comporta come un tubo. Non c’è limite di messaggi in quanto scorrono flussi di byte. Bisogna avere dei meccanismi di demarcazione per riconoscere dove inizia e dove finisce un messaggio; Connection less: come per UDP, è orientato alla consegna dei messaggi e non è una comunicazione affidabile, non preserva l’ordine delle informazioni. Un esempio è la posta. Come viene creata una socket? Bisogna specificare a q