Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

1. Introduzione 1.1 Che cos'è internet? 1.1.1 Gli "ingranaggi" di Internet Internet è una rete di reti, con una struttura gerarchica, che interconnette dispositivi di calcolo, detti host o sistemi periferici, tramite una rete di collegamenti e può essere pubblica o privata (intranet, ovvero una r...

1. Introduzione 1.1 Che cos'è internet? 1.1.1 Gli "ingranaggi" di Internet Internet è una rete di reti, con una struttura gerarchica, che interconnette dispositivi di calcolo, detti host o sistemi periferici, tramite una rete di collegamenti e può essere pubblica o privata (intranet, ovvero una rete aziendale privata). Questi collegamenti possono essere di molti tipi: rame, fibra ottica, onde elettromagnetiche, satellite... Collegamenti diversi possono trasmettere dati a velocità differenti e tale velocità di trasmissione si misura in bit/s, mentre l'ampiezza di banda sono la quantità di bit al secondo che vengono trasmessi nel mezzo. I dati vengono suddivisi in sottoparti con l'aggiunta di un'intestazione ed inviati attraverso la rete dai router e dai commutatori di pacchetto (link-layer switch), questi due lavorano a due livelli diversi. Il percorso è l'insieme del sistema di invio, del sistema di ricezione, dei collegamenti e dei commutatori di pacchetto che ogni pacchetto attraversa. I sistemi periferici accedono a Internet tramite gli ISP (Internet Service Provider), che sono un insieme di commutatori di pacchetto e di collegamenti. Sistemi periferici, commutatori di pacchetto e altre parti di Internet fanno uso di protocolli, che definiscono il formato e controllano l'ordine di invio e di ricezione di informazioni all'interno della rete, tra due o più entità in comunicazione. Alcuni di essi sono: TCP (transmission control protocol), IP (internet protocol), HTTP, Skype, Ethernet. Dato che vi era l'esigenza di un accordo sulle funzioni svolte da ogni protocollo, vengono utilizzati gli standard, che vengono sviluppati dall'Internet Engineering Task Force (IETF). Questo accade soprattutto se ci sono tanti produttori di dispositivi e non si vuole che tutti utilizzino protocolli diversi, mettendo alcuni paletti e fornendo delle linee guida per la creazione di essi. I documenti sugli standard di Internet vengono detti request for comment (RFC). 1.1.2 Descrizione dei servizi Internet può essere definito anche come un'infrastruttura che fornisce servizi alle applicazioni. Tali applicazioni comprendono e-mail, navigazione Web, VoIP, social network, giochi, database, e-commerce, condivisione di file, streaming, virtual/augmented reality, messaggistica istantanea, meteo, traffico su strada, cloud music, video streaming... Queste applicazioni sono dette applicazioni distribuite, perché coinvolgono più host che si scambiano reciprocamente dati. Le applicazioni, che sono sorgenti e destinazioni dei dati, vengono eseguite sugli host e non sui router, nonostante essi permettano lo scambio di dati tra host. I servizi forniti alle applicazioni possono essere QoS (Quality of Service), che garantiscono un servizio affidabile dalla sorgente alla destinazione, oppure best effort che non è affidabile. 1.1.3 Che cos'è un protocollo? Il concetto di protocollo di rete è molto simile al concetto di protocollo umano, il quale impone come prima cosa un saluto per iniziare la comunicazione con qualcun altro. La tipica risposta è un messaggio "Ciao" di ritorno che implicitamente una persona interpreta come risposta cordiale e quindi procede con il chiedere l'ora. Nel caso di una risposta diversa (come "Non mi scocciare"), potrebbe indicare una scarsa propensione a comunicare o l'incapacità di farlo. Quando una persona non riceve risposta alla propria domanda, in linea di massima, non ripresenta la richiesta perché nel "protocollo umano" sono presenti specifici messaggi che inviamo e specifiche azioni che intraprendiamo in risposta ai messaggi ricevuti o ad altri eventi. Difatti se le persone adottano due protocolli diversi (una educata e l'altra no), non è possibile portare a termine una transazione utile. Lo stesso concetto vale per le reti, in cui lo scambio si appoggia a due (o più) entità, che in questo caso sono componenti hardware o software di qualche dispositivo, che comunicano utilizzando lo stesso protocollo al fine di assolvere un certo compito. Si impiegano protocolli differenti per realizzare compiti diversi. Un protocollo definisce il formato e l 'ordine dei messaggi scambiati tra due o più entità in comunicazione, così come le azioni intraprese in fase di trasmissione e/o di ricezione di un messaggio o di un altro evento. 1.2 Ai confini della rete I dispositivi connessi a internet sono solitamente detti sistemi periferici o end system, in quanto si trovano ai confini di internet (es desktop, server e dispositivi mobili). Questi sistemi periferici vengono detti host perché eseguono programmi applicativi come browser e web server, oppure software di lettura e gestione della posta elettronica. Tali host vengono a loro volta suddivisi in client, ovvero coloro che richiedono dei servizi, come PC e smartphone, e server, che sono coloro che si occupano di erogare i servizi (es pagine web, flussi video e ritrasmissione della posta elettronica) grazie ad un programma che li esegue. La maggior parte di essi è situata in data center. Tale architettura viene definita CLIENT/SERVER, in contrapposizione con la PEER TO PEER che permette ad ogni nodo di fare il client o il server verso gli altri host della rete (es Skype e Bit Torrent). 1.2.1 Le reti di accesso Ogni host è connesso fisicamente, tramite le reti di accesso, al suo edge router, che è il primo router sul percorso dal sistema d’origine a un qualsiasi altro sistema di destinazione collocato al di fuori della stessa rete di accesso. Tali reti possono essere reti di accesso residenziale, reti di accesso aziendale (università, istruzioni, aziende) e reti di accesso mobile. Accesso residenziale punto-punto I due accessi residenziali più diffusi sono il digital subscriber line (DSL) e quello via cavo. L'accesso DSL viene solitamente fornito da una società telefonica, che in questo caso assume anche il ruolo di ISP. Il modem DSL dell'utente usa la linea telefonica esistente (doppino telefonico intrecciato in rame) per scambiare dati con un digital subscriber line access multiplex (DSLAM) che si trova nella centrale locale (CO central office) della compagnia telefonica. Il modem DSL residenziale converte i dati digitali in analogici per poterli trasmettere sul cavo telefonico ed il DSLAM li riconverte in formato digitale. Le linee telefoniche residenziali trasportano contemporaneamente dati e segnali codificandoli in tre bande di frequenze non sovrapposte: canale downstream (verso l'abitazione) fino a 10-50 Mbit/s canale upstream (verso il DSLAM) fino a 1-5 Mbit/s linea dedicata per un segnale telefonico Le velocità raggiunte effettivamente in downstream e upstream possono però essere inferiori, perché il provider DSL può limitare appositamente il tasso di trasmissione quando offre servizi a più livelli (velocità di trasmissione diverse a costi differenti) o perché il tasso di trasmissione massimo è limitato dalla distanza che intercorre tra l’abitazione e la centrale locale, dalla qualità del materiale con qui è costruito il doppino telefonico e dal grado di interferenza elettrica. La DSL è difatti stata progettata per distanza piccole (circa 10km). Accesso via cavo Mentre la DSL usa le infrastrutture già esistenti della compagnia telefonica locale, l’accesso a Internet via cavo utilizza le infrastrutture esistenti della televisione via cavo. La fibra ottica connette la terminazione del cavo a giunzioni a livello di quartiere, dalle quali viene usato il tradizionale cavo coassiale per la distribuzione televisiva per raggiungere le singole case e appartamenti. L'accesso a internet via cavo richiede dei modem speciali chiamati cable modem che si connettono ai PC attraverso la porta Ethernet. Il CMTS (cable modem terminator system) funziona similmente al DSLAM nelle reti DSL, ovvero traduce il segnale analogico inviato dai cable modem in formato digitale. FTTH La FTTH (fiber to the home) è una rete di distribuzione che collega una centrale locale ad un'abitazione ma, essendo condivisa da molte abitazioni, viene suddivisa in più fibre ed ognuna è dedicata ad un utente. Ogni ISP fornisce velocità diverse, solitamente si aggirano intorno ai 1000 Mbps in downstream e 300 Mbps in upstream. Satellitare Solitamente dove le reti DSL, via cavo e FTTH non sono disponibili, è utilizzabile un collegamento satellitare. Modem dial-up L'accesso in dial-up è basato sul modello della DSL, ovvero che un modem in casa dell’utente si connette a un modem dell’ISP su una linea telefonica, ma non è possibile navigare e telefonare nello stesso momento. L'accesso ha una velocità molto lenta fino a 56 kbit/s. Accesso aziendale reti locali (LAN) Per collegare i sistemi terminali di aziende e università all'edge router (computer di bordo) si utilizza una rete locale detta LAN (local area network). La tecnologia Ethernet è la più diffusa ed utilizza un doppino di rame intrecciato per connettere gli host allo switch Ethernet, che a sua volta verrà connesso a internet, con velocità variabili di 10 Mbit/s, 100 Mbit/s, 1Gbit/s fino a 10Gbit/s. Accesso wireless Dispositivi come portatili o smartphone accedono a internet via wireless. In una LAN wireless gli utenti si scambiano pacchetti entro poche decine di metri da e verso una stazione base, detta anche access point, che è connesso ad una rete aziendale, che probabilmente include una rete Ethernet cablata, a sua volta connessa a Internet. Le LAN wireless sono basate sulla tecnologia IEEE 802.11, a sua volta suddivide vari standard come a/b/g/n/ac (Wi-Fi 5) che si differenziano per la velocità a cui operano. Rispettivamente abbiamo a, g: 54 Mbit/s, b: 11 Mbit/s e dalla n in poi sono maggiori di 300 Mbit/s. La stessa infrastruttura wireless viene utilizzata dai dispositivi mobili durante gli spostamenti ed essi si scambiano pacchetti tramite una stazione base gestita da un provider di telecomunicazioni. La differenza dal WiFi è che l'utente si può trovare anche a poche decine di chilometri dalla stazione base e non solo poche decine di metri. Ad oggi esistono reti wireless 3G, 4G E 5G (e le rispettive evoluzioni come 4G LTE) che consentono l'accesso wireless a internet, con commutazione a pacchetto, a velocità sempre più elevate (1,8 Gbit/s per il 5G). Tipicamente la rete di un'abitazione è composta da: DSL o modem via cavo Router/firewall/NAT Ethernet Punto d'accesso wireless Molti di questi dispositivi sono spesso integrati in un unico dispositivo che svolge le varie funzioni. 1.2.2 Mezzi trasmissivi Il Bit è un'unità di informazione base (0/1) che viaggia da un sistema terminale a un altro, passando per una serie di coppie trasmittente-ricevente e attraversando un mezzo fisico. I mezzi fisici ricadono in due categorie: i mezzi vincolati e quelli non vincolati. Nei mezzi vincolati, o guidati, i segnali si propagano in un mezzo fisico: fibra ottica, filo di rame o cavo coassiale. Nei mezzi non vincolati, o a onda libera, i segnali si propagano nell'atmosfera o nello spazio esterno, come avviene nelle LAN wireless o nei canali digitali satellitari. Dato che il costo dell'installazione di un collegamento fisico è molto superiore a quello del materiale, spesso si dispongono doppini intrecciati, fibra ottica e cavi coassiali in ogni stanza anche se ne viene utilizzato uno solo. Questo permette di risparmiare il costo di una successiva installazione nel caso ci fosse il bisogno di utilizzare un'altra tipologia di mezzo. Doppino di rame intrecciato (TP) Il tipico cavo usato per lo standard Ethernet, costituito da due fili di rame distinti e disposti a spirale. I fili vengono intrecciati assieme per ridurre l'interferenza elettrica generata da altre coppie presenti nelle vicinanze. I cavi possono presentare vari tipi di schermatura: nessuna (unshielded) schermatura per doppino (schielded) lamina o maglia che avvolge l'intero cavo (foiled) entrambe (screened) Denominazione sintetica dei cavi X / Y TP X è la schermatura dell'intero cavo U: unshielded F: foiled (di solito una lamina di alluminio) S: maglia metallica intrecciata (di solito, rame placcato alluminio) SF: entrambe Y è la schermatura di ogni doppino U: unshielded F: schielded Alcuni esempi: U/UTP, F/UTP, S/FTP UTP: non schermati S/UTP: cavo UTP schermato solo esternamente STP: schermatura metallica per ogni coppia di cavi S/STP: cavi STP protetti da un'ulteriore schermatura metallica che racchiude l'intero cavo, deve però essere collegata da entrambi i lati alla massa per garantire una maggior protezione da onde esterne Cavi usati nello standard Ethernet Connessione di cavi e connettori Nel cavo patch entrambe le estremità utilizzano lo stesso standard e quindi hanno la disposizione dei fili con gli stessi colori. Questa tipologia è utilizzata per collegare dispositivi di tipo diverso, come computer e switch. Il cavo incrociato invece utilizza due standard diversi e quindi anche i fili saranno disposti in modo diverso alle estremità. Questa tipologia è utilizzata per collegare dispositivi dello stesso tipo, come due router. Cavo coassiale Cavo costituito da due conduttori concentrici e non paralleli, bidirezionale. Il cavo a banda base appartiene alle vecchie reti e non è in grado di trasmettere più di un segnale alla volta, inoltre si possono trasmettere solo dati e voce. Il cavo a banda larga invece permette la trasmissione simultanea di molti segnali, perché ognuno di essi viaggia a frequenze diverse. Utilizzato anche in combinazione con la fibra ottica (HFC Hybrid fiber-coaxial) sia per il servizio televisivo che per l'accesso ad internet. Fibra ottica La fibra ottica è un mezzo sottile e flessibile che conduce impulsi di luce, ciascuno dei quali rappresenta un bit. Una singola fibra ottica può supportare alte velocità trasmissive (da 10 a 100 Gbit/s). È immune all’interferenza elettromagnetica, ha un basso tasso di errore ed ha un lungo raggio di trasmissione, tanto che sono molto utilizzate nelle dorsali. Canali radio I canali radio trasportano segnali all’interno dello spettro elettromagnetico e non richiedono l'installazione fisica di cavi. Può attraversare le pareti e percorrere lunghe distanze, ma l'ambiente di propagazione determina la perdita di segnale lungo il percorso causata dalla distanza (path loss), dall’attraversamento di ostacoli (shadow fading), dalla riflessione sulle superfici (multipath fading) o dall’interferenza con altri canali radio o segnali elettromagnetici. I canali radio terrestri si suddividono in tre gruppi: Microonde terrestri che operano su distanze di qualche metro ed hanno velocità fino a 45 Mbit/s LAN (es WiFi) che operano in aree con raggio di qualche centinaio di metri e che raggiungono le velocità di 11 Mbit/s, 54 Mbit/s ed anche oltre i 100 Mbit/s Wide-area (es cellulari) che si estendono per decine di chilometri, come ad esempio 3G, 4G e 5G I canali radio satellitari invece colegano due o più trasmettitori terrestri a microonde, noti come stazioni a terra (ground station). Il satellite riceve le trasmissioni su una banda di frequenza, rigenera il segnale utilizzando un ripetitore e trasmette segnali su un’altra frequenza. Nelle comunicazioni si usano due tipi di satellite: satelliti geostazionari (GEO, geostationary earth orbit), posizionati permanentemente in un'orbita a 36.000 km dalla superficie terreste e sincronizzata con la rotazione terrestre. Il ritardo di propagazione del segnale, dovuto alla distanza, è di 280 millisecondi e operano alla velocità di centinaia di Mbit/s, soprattutto in zone dove non è presente l'accesso a Internet via DSL o cavo satelliti a bassa quota (LEO, low-earth orbiting) che sono posizionati più vicino alla terra e ruotano attorno al nostro pianeta come fa la Luna. Possono comunicare sia tra di loro sia con le stazioni a terra, ma per fornire la copertura continua è necessario averne in orbita molti. 1.3 Il nucleo della rete Il nucleo della rete è una maglia di router che interconnettono gli host. I dati vengono trasferiti attraverso due metodi: commutazione di circuito: circuito dedicato per l'intera durata della sessione (es rete telefonica) commutazione di pacchetto: i messaggi di una sessione utilizzano le risorse su richiesta e di conseguenza potrebbero dover attendere per accedere a un collegamento 1.3.1 Commutazione di circuito Nelle reti a commutazione di circuito le risorse richieste lungo un percorso, ovvero buffer e velocità di trasmissione sui collegamenti, sono riservate per l'intera durata della sessione di comunicazione e quindi non c'è condivisione. Un esempio tipico sono le reti telefoniche, perché prima di iniziare l'invio, la rete deve stabilire una connessione tra mittente e destinatario (circuito). Una volta stabilito il circuito, la rete riserva anche una certa larghezza di banda (pari a una frazione della capacità trasmissiva del canale) per trasferire i dati. Questo permette il trasferimento di dati ad una velocità costante garantita. Supponiamo di avere quattro commutatori interconnessi tramite quattro collegamenti. Ognuno di essi dispone di quattro circuiti, in modo che ogni collegamento possa supportare quattro connessioni simultanee. Gli host sono tutti direttamente connessi a uno dei commutatori e quando due di essi desiderano comunicare, la rete stabilisce una connessione end-to-end (o connessione punto a punto) dedicata a loro. Poiché ogni collegamento ospita quattro circuiti, se ogni collegamento tra due switch ha una velocità di trasmissione pari a 1 Mbit/s, la banda viene suddivisa in porzioni e ogni circuito tra due switch è di 250 Mbit/s. Le risorse (canali) rimangono inattive se non utilizzate, questo perché non c'è condivisione. Time Division Multiplexing (TDM) Con TDM si suddivide il tempo in slot di dimensioni fisse, ad ogni utente è assegnato uno slot e, a seconda del numero di utenti, avrò più o meno suddivisioni. Questo però comporta ad uno spreco di risorse di rete (bande di frequenza o slot nei collegamenti), perché non possono essere usate da altre connessioni. Un esempio è una chiamata telefonica quando una persona smette di parlare, in quel momento si stanno sprecando risorse. Se per esempio volessimo inviare un file di 640.000 bit dall'host A all'host B su una rete a commutazione di circuito, sapendo che: tutti i collegamenti presentano un bit rate di 1,536 Mbit/s ciascun collegamento utilizza TDM con 24 slot/secondo si impiegano 500 ms per stabilire un circuito punto-punto 3 Ogni secondo posso trasmettere (1535∗10 ) 24 = 64000 bit. Quindi il tempo impiegato è secondi. 3 640∗10 3 + 0.5 = 10.5 64∗10 La velocità di trasmissione di un circuito è uguale alla frequenze di frame, moltiplicata per il numero di bit in uno slot. Frequency Division Multiplexing (FDM) Con FDM si suddivide la velocità di trasmissione, quindi ogni utende avrà una diversa banda di frequenza per ciascuna connessione, detta ampiezza di banda (bandwidth). Un esempio sono le stazioni radio FM. 1.3.2 Commutazione di pacchetto Nelle reti a commutazione di pacchetto la sorgente suddivide i messaggi lunghi in parti più piccole, note come pacchetti. Tra la sorgente e la destinazione, questi pacchetti attraversano collegamenti e commutatori di pacchetto (router e switch), con una velocità pari alla velocità totale di trasmissione del collegamento stesso. I pacchetti degli utenti A e B condividono le risorse di rete, però ognuno di essi può seguire percorsi diversi prima di arrivare alla destinazione. Ogni pacchetto utilizza completamente le risorse fisiche ed esse vengono ripartite in modalità best effort, ovvero che in base alla disponibilità, il traffico verrà consegnato o scartato, a seconda delle necessità (on demand = accesso alle risorse solo quando necessario). Se si riempie il buffer, tutti i pacchetti che dovrebbero essere spediti vengono scartati e i due host dovranno comunicarsi quali pacchetti mancano. Siccome non c'è condivisione delle risorse e c'è contesa, l'ordine di ricevimento dei pacchetti è casuale, a seconda delle politiche. Multiplexing statistico Si ha il multiplexing statistico quando il flusso di informazioni è segmentato in pacchetti di lunghezza fissa e ad ognuno di loro è assegnato un header e un trailer. Questo permette il loro riconoscimento all'interno del flusso di dati, perché ogni pacchetto può essere inviato in ordine diverso e non seguire lo stesso percorso degli altri, ma anche per identificare il destinatario della trasmissione. Questa tipologia di servizio è solitamente "su richiesta", ovvero che non bisogna preallocare le risorse prima di trasmettere, a differenza di quello che avviene con TDM nella commutazione di circuito. La maggior parte dei commutatori di pacchetto utilizza la trasmissione store-and-forward, ovvero che chi inoltra un pacchetto deve riceverlo per intero prima di cominciare a trasmettere sul collegamento in uscita. Dato che occorrono L/R secondi per trasmettere (push out) un pacchetto di L bit su un collegamento in uscita da R bit/s, se viene inviato un pacchetto di L bit su un canale con velocità di R bps, il tempo di trasmissione risulta pari a L/R secondi. Ad esempio: L = 12 kbit R = 1,5 Mbit/s Tempo di trasmissione = L/R = 8 millisecondi Il tempo di trasmissione totale è 3L/R (supponendo che il ritardo di propagazione sia zero), questo il perchè il router ha bisogno di tempo per analizzare ogni pacchetto e capire dove instradarlo, 3L perchè abbiamo 3 collegamenti. Congestione Dato che ogni commutatore di pacchetto connette più collegamenti, per ciascuno mantiene un buffer di output (detto anche coda di output) per conservare i pacchetti che sta per inviare su quel collegamento. Un pacchetto che deve essere inviato attraverso un collegamento occupato dalla trasmissione di un altro, deve attendere nella coda di output. Questo porta a dei ritardi di accodamento nei buffer di output, perché la dimensione di questi buffer è finita. In questo caso si verificherà una perdita di pacchetto, ovvero che verrà eliminato o il pacchetto in arrivo o uno di quelli che si trova già in coda. Commutazione di pacchetto e commutazione di circuito Supponiamo che gli utenti condividano un collegamento da 1 Mbps e che ogni utente generi dati ad una velocità costante di 100 kbps, ma ogni utente è attivo solo per il 10% del tempo. La commutazione di circuito può supportare simultaneamente solo 10 (= 1 Mbps/100 kbps) utenti, mentre con la commutazione di pacchetto la probabilità che un determinato utente sia attivo è pari al 10%. Se sono presenti 35 utenti, la probabilità di avere 11 o più utenti attivi in contemporanea è pari alla distribuzione binomiale: ∑ N k+1 n k N −k ( ) ⋅ (p) ⋅ (1 − p) k = ∑ 35 11 35 k k 35−k ( ) ⋅ (0.1) ⋅ (0.9) = 0, 0004 Quindi la probabilità che si crei una congestione con la commutazione di pacchetto è molto bassa, perciò molti più utenti possono trasmettere contemporaneamente. Inoltre è più semplice, perché non necessita di uno scambio di messaggi per riservare risorse (dato che sono condivise), se si verificano congestioni, ritardo e perdita di pacchetti, sono presenti dei protocolli per il trasferimento affidabile dei dati e per prevenire o controllare la congestione. 1.3.3 Una rete di reti Una possibile struttura di internet è quella a maglia, ma non è vantaggiosa perché si avrebbe un unico ISP globale ed ogni ISP di accesso dovrebbe avere un collegamento diretto con quello globale, rendendo i collegamenti altamente costosi. La struttura utilizzata è invece quella gerarchica. In tutto il mondo esistono circa una dozzina di ISP di primo livello (come Verizon, Sprint, AT&T, Orange, Deutsche Telekom, Telecom Italia Sparkle) che hanno una copertura nazionale o internazionale, e che comunicano tra di loro come "pari"(peer). Agli ISP di primo livello sono connessi gli ISP di secondo livello che hanno una copertura nazionale o distrettuale, ma si possono connettere solo ad alcuni ISP di primo livello. Hanno però la possibilità di interconnettersi con altri ISP di livello 2. Vi sono poi gli ISP di terzo livello (detti anche ISP di accesso) che hanno una copertura locale e che si connettono con gli ISP di secondo livello. Perciò l'ISP di accesso paga l'ISP regionale, che a sua volta paga il suo ISP di primo livello. Le cose in realtà sono ulteriormente complicate, perché un ISP di accesso può anche connettersi direttamente a un ISP di primo livello, oppure un ISP regionale abbastanza grande, che magari copre la nazione, può interconnettere altri ISP regionali più piccoli. Tra i vari ISP vi è anche una competizione, in base al rapporto prezzo e servizi che offrono. Per costruire una rete che sia più simile all’Internet odierna dobbiamo aggiungere i Pop, il multi-homing, il peering e gli IXP. I Pop (point of presence) sono un gruppo di router vicini tra loro nella rete del provider, tramite il quale gli ISP clienti possono connettersi al fornitore Il multi-homing (o multi-home) è una modalità che consiste nel connettersi a due o più ISP fornitori (es due regionali o due regionali e uno di primo livello), permettendo la comunicazione anche in caso di guasto di un suo fornitore Il peering è una connessione diretta tra due ISP di pari livello gerarchico a zero costi, in modo che tutto il traffico tra di essi passi attraverso una connessione diretta piuttosto che transitare da un intermediario IXP (Internet exchange point) è un infrastruttura fisica che permette a diversi ISP di scambiare traffico internet, ovvero fare peering, tra di loro Per descrivere l'internet odierna bisogna aggiungere le reti che si occupano di distribuire contenuti (content provider networks). Google è uno degli esempi di tali reti, che si è creato la propria rete privata e quando possibile si connette direttamente con gli ISP di livello inferiore. Quando c'è necessità è possibile creare una connessione diretta anche tra ISP di secondo livello, senza che si rivolgano obbligatoriamente agli ISP di primo livello. 1.4 Ritardi, perdite e throughput nelle reti a commutazione di pacchetto Dato che ogni pacchetto passa attraverso una serie di router subisce vari tipi di ritardo, i principali sono il ritardo di elaborazione, il ritardo di accodamento, il ritardo di trasmissione e il ritardo di propagazione, che complessivamente formano il ritardo totale di nodo. Un pacchetto inviato attraversa il router A verso il router B, ma il collegamento in uscita dal router A verso il router B è preceduto da una coda, Quando un pacchetto arriva al router A, il router ne esamina l'intestazione per determinare il collegamento in uscita che porta al router B. Un pacchetto può essere trasmesso solo se non ci sono altri pacchetti in fase di trasmissione e se non esistono pacchetti che lo precedono nella coda. Se il collegamento è momentaneamente occupato o se altri pacchetti sono accodati, l’ultimo pacchetto arrivato si accoderà nei buffer (memoria dei router). Questo accade quando il tasso di arrivo dei pacchetti sul collegamento eccede la capacità di evaderli del router e dei collegamenti di uscita. 1. Ritardo di elaborazione Il ritardo di elaborazione è il tempo richiesto per esaminare l’intestazione del pacchetto e per determinare dove dirigerlo, ovvero la porta o il canale di uscita, includendo anche il tempo richiesto per controllare i bit che sono stati trasmessi in modo errato. Dopo l'elaborazione, il router dirige il pacchetto verso la coda che precede il collegamento al router B. 2. Ritardo di accodamento Una volta in coda, il pacchetto subisce un ritardo di accodamento mentre attende di essere trasmesso sul collegamento. Questo ritardo sarà lungo quanti sono i pacchetti che lo precedono e che sono in attesa di essere trasmessi sullo stesso collegamento, creando una congestione. 3. Ritardo di trasmissione (L/R) Assumendo che i pacchetti vengano serviti in base all'ordine di arrivo, un pacchetto può essere trasmesso solo dopo la trasmissione di tutti quelli che lo hanno preceduto. Sia L la lunghezza del pacchetto in bit e R bit/s la frequenza di trasmissione del collegamento dal router A al router B, il ritardo di trasmissione è L/R, ovvero il tempo richiesto per trasmettere tutti i bit del pacchetto sul collegamento. 4. Ritardo di propagazione (d/s) Una volta immesso sul collegamento, il tempo che impiega un bit per propagarsi fino al router B è detto ritardo di propagazione. Questo ritardo è dato da d/s, dove d è la distanza tra i due router ed s è la velocità di propagazione del bit nel collegamento che è di circa di 2 ∗ 10 m/s e dipende dal mezzo fisico. 8 Confronto tra ritardo di trasmissione e di propagazione Il ritardo di trasmissione è la quantità di tempo impiegata dal router per trasmettere in uscita il pacchetto, che dipende dalla lunghezza del pacchetto e dalla velocità di trasmissione del collegamento. Il ritardo di propagazione invece è il tempo richiesto per la propagazione di un bit da un router a quello successivo e dipende dalla distanza tra i due router, ma non dalla lunghezza del pacchetto e neanche dalla velocità di trasmissione del collegamento. Se prendiamo come esempio un'autostrada, con tratti di 100 km tra un casello e l'altro, si presuppone che le auto viaggiano (si propagano) alla velocità di 100 km/h ed il casello serve (trasmette) un'auto ogni 12 secondi. Se consideriamo le auto come i bit e l'insieme come un pacchetto, il tempo che occorre perché le 10 auto si trovino di fronte al casello è: tempo richiesto al casello per trasmettere l'intero gruppo di macchine sull'autostrada: 12 ∗ 10 = 120 sec tempo richiesto a un'auto per viaggiare dall'uscita di un casello fino al casello successivo: 100km 100km/h = 1 hr Quindi il tempo è di 62 minuti. Se ora le auto si propagano alla velocità di 1000 km/h, al casello occorre un 1 minuto per servire ciascuna auto. Dopo 7 minuti, la prima auto sarà al secondo casello e tre auto saranno ancora in coda davanti al primo casello. Stessa cosa vale per il bit di un pacchetto che può arrivare al secondo router prima che il pacchetto sia stato interamente trasmesso dal primo router. https://www.ccs-labs.org/teaching/rn/animations/propagation/ Ritardo di un nodo d node = d proc + d queue + d trans + d prop d proc = ritardo di elaborazione (pochi microsecondi) d queue = ritardo di accodamento (dipende dalla congestione) d trans = ritardo di trasmissione (L/R, significativo sui collegamenti a bassa velocità) d prop = ritardo di propagazione (da pochi microsecondi a centinaia di millisecondi) Un altro ritardo del router è dovuto al ritardo di accesso al mezzo. Il ritardo di accodamento è quello più complesso perché può variare da pacchetto a pacchetto. Ad esempio se arrivano in una coda vuota 10 pacchetti, il primo non subirà ritardo di accodamento, mentre il ritardo dell'ultimo sarà piuttosto grande. Perciò si fa solitamente uso di misure statistiche, quali il ritardo di accodamento medio, la varianza del ritardo di accodamento e la probabilità che il ritardo di accodamento superi un valore fissato. Lo si considera rilevante in base alla velocità di arrivo del traffico alla coda, dalla velocità di trasmissione del collegamento e dalla natura del traffico entrante, ossia se il traffico arriva periodicamente o a raffiche. Denotiamo con A la velocità media di arrivo dei pacchetti nella coda, espressa in pacchetti al secondo, con R la velocità di trasmissione, ossia la velocità (bit/s) alla quale i bit vengono trasmessi in uscita dalla coda e supponiamo che la lunghezza di ogni pacchetto sia di L bit. La velocità media di arrivo dei bit in coda è di L ∗ A bit/s, mentre il rapporto L∗A R è detto intensità di traffico, che in base al suo valore (quasi 0, tendente ad 1 o maggiore di 1), ha un impatto decisivo nell'entità del ritardo. Difatti se L∗A R < 1, in base alla cadenza di arrivo di ogni pacchetto si avrà un ritardo più o meno significativo, perché la velocità di accodamento tende a superare la capacità trasmissiva. Come se in una strada sempre trafficata capitasse un evento che causa un lieve incremento del traffico rispetto alla norma, il ritardo che si subirà può diventare enorme. Supponiamo che due host, A e B, siano separati da 20.000 chilometri, connessi da un collegamento diretto R = 2 Mbit/s e che la velocità di propagazione lungo il collegamento sia di 2, 5 ∗ 10 m/s. Il prodotto tra banda e ritardo (bandwidth-delay 8 product) è: = 160.000 bit, ovvero il massimo numero di bit che ci possono essere sul link. 7 R∗m 6 2∗10 m = 2 ∗ 10 bit/s ∗ 8 c 2,5∗10 m/s Si preferisce un prodotto banda-ritardo basso, così si avrà un basso ritardo di propagazione. 1.4.3 Ritardo end-to-end Consideriamo ora il ritardo dalla sorgente alla destinazione. Traceroute Traceroute è un programma diagnostico che fornisce una misura del ritardo dalla sorgente al router lungo i percorsi internet punto-punto verso la destinazione. Quando un utente specifica il nome di un host di destinazione, il programma invia 3 pacchetti speciali alla destinazione e, durante il loro percorso verso la destinazione, essi passano attraverso una serie di router. Quando un router N riceve uno di questi pacchetti marcato con N, fa ritornare all'origine un breve messaggio contenente il nome e l'indirizzo del router, senza instradarlo verso la destinazione. L'host registra il tempo intercorso tra l’invio di un pacchetto e la ricezione del corrispondente messaggio di ritorno, memorizzandone anche il nome e l’indirizzo del router (o del destinatario) che restituisce il messaggio. In questo modo l'origine può ricostruire il percorso dei pacchetti, potendo anche determinare i ritardi di andata e ritorno per tutte le tratte. Perdita dei pacchetti Dato che le code hanno capacità finita, i ritardi dei pacchetti non tendono all'infinito (intensità del traffico a 1) perché un pacchetto può trovare la coda (detta anche buffer) piena. Quando ciò accade, il router lo scarta e quindi va perso. Il pacchetto però può essere ritrasmesso dal nodo precedente, dal sistema terminale che lo ha generato o non essere ritrasmesso affatto. 1.4.4 Throughput nelle reti di calcolatori Il throughput è la frequenza (dati/unità di tempo) alla quale una certa unità dati viene trasferita tra mittente e ricevente. Si suddivide in: throughput istantaneo: velocità in bit/s in ogni istante di tempo alla quale il ricevente sta ricevendo il file throughput medio: velocità del trasferimento del file di F bit in T secondi, ovvero F/T bit/s, che a differenza di quello istantaneo si determina in un periodo di tempo più lungo L'unita di misura è di {Bit, file, pacchetti...} per {secondo, ora, sessione...} Consideriamo il throughput per un trasferimento di file dal server al client, in particolare R è la velocità del collegamento S tra il server e il router e R quella del collegamento tra il router e il client. Qual è il throughput tra server e client? C Nel caso in cui R < R i bit immessi dal server attraverseranno il router e arriveranno al client ad una velocità ed un S C throughput di R bit/s. S Se invece R > R il router non sarà in grado di inoltrare i bit alla stessa velocità alla quale li riceve, per cui i bit lasceranno S C il router a una velocità e ad un throughput di R bit/s. Se ciò dovesse continuare, mantenendo queste due velocità, la C quantità di bit accumulata nel router, in attesa di trasmissione al client, cresce indefinitamente. Perciò la velocità di trasmissione di questo collegamento è il minimo tra R e R , ovvero la velocità del collegamento che fa da collo di bottiglia. S C Per cui il tempo per trasferire un file di F bit dal server al client è F /min(R , R ). S C Nel caso di internet lo scenario è simile al seguente, dove il throughput end to end per ciascuna connessione è il min(R , R , R/10), in pratica o R C S Co R sono spesso il collo di bottiglia. Infatti se avessimo 10 collegamenti, essi S condividono equamente un link di capacità di R bit/s. 1.5 Livello dei protocolli e loro modelli di servizio Dato che internet appare come un sistema molto complicato, perché presenta molti componenti come host, router, varie tipologia di mezzi di trasmissione, applicazioni, protocolli, hardware, software, vi è l'esigenza di organizzare l'architettura delle reti. 1.5.1 Architettura a livelli Per descrivere l'architettura delle reti possiamo utilizzare un'analogia con la nostra vita. Ad esempio, le funzionalità di una linea aerea possono essere viste come una divisione in livelli, dove ogni livello fornisce il proprio servizio effettuando determinate azioni all'interno, ma che rimangono le stesse (per esempio, a livello di gate, l’entrata e l’uscita dei passeggeri dall’aereo). Ogni livello, oltre a svolgere determinate azioni all'interno, utilizza anche i servizi del livello immediatamente inferiore (i passeggeri, imbarcati nell'aereo dal livello gate, vengono trasferiti dalla pista di decollo alla pista d’atterraggio). Un’architettura a livelli consente di discutere una parte specifica e ben definita di un sistema articolato e complesso, rendendo più facile cambiare l’implementazione del servizio, fornito da un determinato livello, grazie all'introduzione della modularità. Questo non avrà conseguenze per gli altri livelli e permetterà di mantenere invariata l'architettura, fino a quando il livello fornisce lo stesso servizio allo strato superiore e utilizza gli stessi servizi dello strato inferiore. Stratificazione dei protocolli La medesima struttura avviene per i protocolli di rete che sono suddivisi in livelli (layer). Ognuno di essi svolge un servizio a un livello superiore, utilizzando i servizi del livello inferiore e servendosi delle proprie funzionalità: si tratta del modello di servizio. Il layer N+1 sa solo che i layer inferiori offrono il servizio "N", i layer da N in giù sono una "black box" per le entità al layer N+1, ovvero che vengono considerati come fossero N perchè N+1 non è in grado di vederli. Un servizio del layer N è offerto all'entita di layer N+1 attraverso un'interfaccia di programmazione chiamata Service Access Point (SAP). Il modello a strati può essere pericoloso perché un livello può duplicare le funzionalità di quello inferiore, ovvero che faccia le stesse cose. Lo scambio di informazioni tra entità dello stesso layer è regolata da un protocollo che considerati assieme sono detti pila di protocolli. Stack di protocolli Internet La pila di protocolli di internet consiste in cinque livelli: Applicazione: di supporto alle applicazioni di rete (FTM, SMTP, HTTP, DNS) Trasporto: trasferimento dei messaggi di livello applicazione tra il modulo client e server di un'applicazione (TCP, UDP) Rete: instradamento dei datagrammi dall'origine al destinatario (IP, protocolli di instradamento) Link (collegamento): instradamento dei datagrammi attraverso una serie di commutatori di pacchetto (PPP, Ethernet) Fisico: trasferimento dei singoli bit Il modello OSI è invece composto da sette livelli, ma lo stack internet è privo del livello presentazione (consente alle applicazioni di interpretare il significato dei dati come cifratura, compressione, convenzioni specifiche della macchina) e del livello sessione (sincronizzazione, controllo, recupero dei dati). Layer 7: Applicazione Il livello applicazione fornisce alle applicazioni i mezzi per scambiarsi i dati ed include molti protocolli quali: HTTP che consente la richiesta e il trasferimento dei documenti web SMTP che consente il trasferimento dei messaggi di posta elettronica FTP che consente il trasferimento di file tra due sistemi remoti POP3, IMAP, SMTP per le email P2P per il file sharing peer-to-peer SSH per stabilire una sessione remota cifrata Un protocollo a livello di applicazione è distribuito su più sistemi periferici: un’applicazione in un sistema periferico, tramite il protocollo, scambia pacchetti di informazioni con l’applicazione in un altro sistema periferico. Questi pacchetti di informazione (data unit) di livello 7 si chiamano messaggi. Layer 6: Presentazione Rappresentazione e codifica/decodifica dei dati Conversione dati dal formato host (little endian, ovvero byte meno significativo a destra) al formato della rete (big endian, ovvero byte più significativo a sinistra) Criptatura Spesso integrato con l'applicazione Layer 5: Sessione Stabilisce e mantiene una sessione di comunicazione tra due entità. Una sessione può essere composta da più connessioni dati che richiedono qualità differenti (es. videochiamata) Gestisce lo scambio dati in modo che lo si possa interrompere, riprendere e terminare Maschera eventuali disconnessioni al layer 4 Spesso integrato con l'applicazione Layer 4: Trasporto Il livello trasporto trasferisce i messaggi del livello di applicazione tra punti periferici gestiti dalle applicazioni e risolve i problemi di qualità del servizio del livello 3. In internet ci sono due protocolli di trasporto: TCP e UDP. TCP Fornisce alle applicazioni un servizio orientato alla connessione, garantendo la consegna dei messaggi ed eseguendo un controllo di flusso (ossia la corrispondenza tra le velocità di mittente e destinatario). Inoltre segmenta (per poi ricomporre) i dati lunghi in segmenti più piccoli e fornisce un meccanismo di controllo della congestione, in modo che una sorgente regoli la propria velocità trasmissiva quando la rete è congestionata. Verifica che i pacchetti vengano riordinati nella giusta sequenza in ricezione prima di passarli al livello superiore. Attua il multiplexing e demultiplexing di applicazioni. UDP Fornisce alle proprie applicazioni un servizio non orientato alla connessione che è davvero un servizio senza affidabilità, né controllo di flusso e della congestione. I pacchetti di livello 4 sono chiamati segmenti. Layer 3: Rete Il livello di rete trasferisce i pacchetti a livello di rete, detti datagrammi (o pacchetti), da un host a un altro. Fornisce diversi servizi: Connection-less: reti orientate al datagramma dove ogni pacchetto viene instradato indipendentemente Connection oriented: reti a circuito virtuale in cui viene stabilita una rotta all'inizio delle operazioni di trasferimento dati e la si mantiene per tutti i pacchetti da trasferire Questo livello comprende il protocollo IP, che definisce i campi dei datagrammi e come i sistemi periferici e i router agiscono su tali campi, e deve essere supportato da tutti gli apparati che presentano un livello di rete. Contiene anche svariati protocolli di instradamento che determinano i percorsi che i datagrammi devono seguire tra la sorgente e la destinazione, con un eventuale (non obbligatorio) controllo della congestione. Layer 2: Collegamento Il livello di collegamento fornisce dei servizi al livello di rete per poter trasferire un pacchetto da un nodo (host o router) a quello successivo tra entità di livello 2 e si occupa della correzione di errori avvenuti al livello 1. In base al protocollo utilizzato si può garantire la consegna affidabile tra un nodo e l'altro (diverso dal TCP che è da un sistema periferico a un altro) ed un controllo con correzione degli errori di trasmissione. Contiene due sottolivelli: LLC sublayer che fornisce meccanismi di multiplexing e demultiplexing che consentono a diversi protocolli di rete di nascondere le proprie differenze agli altri per poter coesistere all'interno di una rete multipunto e di essere trasportati sullo stesso supporto di rete. MAC (Medium access control) sublayer che controlla l'hardware responsabile dell'interazione con il mezzo di trasmissione. Esempi di livello di collegamento includono Ethernet e Wi-Fi. I pacchetti di livello 2 sono chiamati frame. Layer 1: Fisico Il livello fisico si occupa di trasferire i singoli bit del frame da un nodo a quello successivo, trasmettendoli sul mezzo di comunicazione che può essere elettrico, elettromagnetico, luminoso o sonoro. Fornisce i mezzi per creare, mantenere e distruggere connessioni fisiche, definisce proprietà come la codifica, livelli di tensione elettrica corrispondenti ai bit, la modulazione… Data Units (DUs) In un sistema con M layer, i dati da trasmettere costituiscono una M-SDU (Service Data Unit di Layer M). A ciò il layer aggancia la propria M-PCI (Protocol Control Information) ed il risultato è una M-PDU (Protocol Data Unit), ovvero l'unità di informazione scambiata tra due peer entity (entità di pari livello). Essa è composta da SDU, che sono i dati da trasmettere, e da PCI, che sono i dati di controllo come mittente e destinatario. Ogni layer considera la PDU del layer superiore come una busta chiusa: la N-PDU del layer N è la (N-1)-SDU del layer N-1 che, preponendo la (N-1)-PCI, diventa la (N-1)-PDU al ricevitore si inverte il processo ed ogni layer rimuove le proprie PCI 1.5.2 Incapsulamento Il messaggio a livello di applicazione M inviato dall'host mittente viene passato al livello di trasporto che gli concatena informazioni aggiuntive (header = H ) ed andranno a costituire il segmento a livello di trasporto che incapsula il messaggio a t livello di applicazione. Queste informazioni aggiuntive serviranno al livello di trasporto del ricevente per consegnare il messaggio all'applicazione desiderata o per altre funzioni. Il livello di trasporto passa il segmento al livello di rete che eseguirà gli stessi passaggi e gli concatenerà le proprie informazioni (H ), quali gli indirizzi dei sistemi periferici di sorgente e n di destinazione, andando così a creare un datagramma a livello di rete. Il datagramma viene passato al livello di collegamento, il quale aggiunge le proprie informazioni di intestazione creando un frame a livello di collegamento. Quindi in ciascun livello il pacchetto ha due tipi di campi: il payload che contiene i dati e che tipicamente proviene dal livello superiore e il campo di intestazione. 2. Il livello applicazione 2.1 Principi delle applicazioni di rete 2.1.1 Architetture delle applicazioni di rete Lo sviluppatore si occupa di progettare l'architettura dell'applicazione e stabilire la sua organizzazione sui vari sistemi periferici, basandosi su una delle due principali architetture di rete utilizzate: l'architettura client-server o P2P. Architettura client-server Nell'architettura client-server vi è un host sempre attivo, chiamato server, che risponde alle richieste di servizio di molti altri host, detti client. Un esempio è un web server che risponde alle richieste dei browser dei clienti. Tra le più note applicazioni con architettura client-server ci sono il Web, il trasferimento dei file con FTP, Telnet e la posta elettronica. In questa architettura i client possono avere un indirizzo dinamico, si possono disconnettere temporaneamente e non comunicano direttamente tra loro, mentre il server dispone di un indirizzo IP fisso e noto, che permette ai client di contattare il server in qualsiasi momento, inviandogli un pacchetto. Dato che un singolo host, che esegue un server, non sarebbe in grado di rispondere a tutte le richieste dei suoi client, nelle architetture client-server si usano spesso i data center, che ospitano molti host creando un potente server virtuale, ma che devono essere costantemente alimentati e tenuti sotto controllo. Alcuni esempi sono i motori di ricerca (es Google e Bing), il commercio elettronico (es Amazon e eBay), la posta elettronica basata sul Web (es Gmail) ed il social networking (es Instagram e Facebook). Architettura P2P In un’architettura P2P non è presente un server sempre attivo perché sfrutta la comunicazione diretta tra coppie di host, chiamati peer (ossia pari), collegati in modo intermittente (solo quando ce n'è bisogno). Dato che i peer sono solitamente i computer degli utenti, che comunicano senza passare per un server specializzato, l'architettura viene detta peer-to-peer. Alcuni esempi sono le applicazioni di condivisione file (es BitTorrent) e telefonia/videoconferenza su Internet (es Skype). Uno dei punti di forza dell'architettura P2P è la sua scalabilità perché aggiunge capacità di servizio al sistema, rispondendo alle richieste di altri peer. Nonostante siano economicamente convenienti (non ci sono data center), sono difficili da gestire in termini di sicurezza, prestazioni e affidabilità. Architettura ibrida (client-server e P2P) Molte applicazioni di messaggistica istantanea utilizzano un'architettura ibrida, infatti utilizzano i server per tenere traccia degli indirizzi IP degli utenti, ma i messaggi tra utenti sono inviati direttamente tra gli host, senza passare attraverso server intermedi. Stessa cosa accade con Skype che utilizza il server solamente per conoscere gli indirizzi dell'host remoto. Cloud computing Insieme di tecnologie che permettono di memorizzare, archiviare e/o elaborare dati (con CPU o software) tramite l'utilizzo di risorse distribuite e virtualizzate in rete. La creazione di una copia di sicurezza (backup) è automatica e l'operarività si trasferisce tutta online. I dati sono memorizzati in server farm, generalmente localizzate nei paesi di origine del service provider. 2.1.2 Processi comunicanti Un processo è un programma in esecuzione su di un host. All'interno dello stesso host, due processi comunicano utilizzando schemi interprocesso (definiti dal SO). I processi su due host differenti comunicano scambiandosi messaggi attraverso la rete. Il processo client crea ed invia i messaggi nella rete, mentre il processo server attende di essere contattato e, quando previsto, invia messaggi di risposta. Le applicazioni con architettura P2P hanno processi client e processi server. Interfaccia tra il processo e la rete La maggior parte delle applicazioni consiste di coppie di processi comunicanti che si scambiano messaggi. Un processo invia messaggi nella rete e riceve messaggi dalla rete attraverso un'interfaccia software detta socket. Un processo lo possiamo immaginare come una casa ed il socket come una porta. Quando un processo invia un messaggio, lo fa uscire dalla propria "porta", che è il socket. Il processo presuppone l'esistenza di un'infrastruttura esterna che trasporterà il messaggio attraverso la rete fino alla "porta" del processo di destinazione, il quale opera sul messaggio. Una il socket è l’interfaccia tra il livello di applicazione e il livello di trasporto all’interno di un host. Possiamo parlare anche di API, che sono un processo attraverso il quale due software scambiano dati, tra l'applicazione e la rete. Il progettista può scegliere il protocollo di trasporto, che non sempre è possibile, e a volte determinare alcuni parametri a livello di trasporto. Dopo ciò si costruisce l’applicazione usando i servizi del livello di trasporto forniti dal protocollo. Indirizzamento Affinché un processo su un host invii un messaggio a un processo su un altro host, il mittente deve identificare il processo destinatario. Per identificare tale processo è necessario specificare due informazioni, ovvero l'indirizzo dell'host e un identificatore del processo ricevente sull’host di destinazione. Tale identificatore comprende l'indirizzo IP, che è un numero univoco di 32 bit che identifica a chi è rivolto il messaggio, ed i numeri di porta, per identificare la socket che deve ricevere il dato. Questo serve perché sull'host di destinazione potrebbero essere in esecuzione molte applicazioni di rete. Alle applicazioni più note sono stati assegnati numeri di porta specifici, come i server web (HTTP) con la porta 80 ed i Mail server con la 25. Protocolli a livello di applicazione Un protocollo a livello di applicazione definisce: Tipi di messaggi scambiati, ad esempio messaggi di richiesta e di risposta Sintassi dei tipi di messaggio: quali sono i campi nel messaggio e come sono descritti Semantica dei campi, ovvero significato delle informazioni nei campi Regole per determinare quando e come un processo invia e risponde ai messaggi I protocolli di pubblico dominio sono definiti nelle RFC della IETF e consentono l'interoperabilità, come ad esempio HTTP E SMTP. I protocolli proprietari sono ad esempio Skype. 2.1.3 Servizi di trasporto disponibili per le applicazioni Quando si progetta un'applicazione occorre scegliere il protocollo a livello di trasporto più opportuno, valutando i servizi forniti più adeguati per l'applicazione. Trasferimento affidabile In una rete di calcolatori i pacchetti possono andare perduti, infatti alcune applicazioni (es audio/video) possono tollerare qualche perdita, ma altre (es il trasferimento di file, messaggistica istantanea, applicazioni finanziarie) richiedono un trasferimento affidabile al 100%. Se un protocollo fornisce questo servizio di consegna garantita dei dati, si dice che fornisce un trasferimento dati affidabile, soprattutto tra i processi in un'applicazione. Throughput Dato che più sessioni condividono la banda sul percorso di rete e poiché queste sessioni verranno istituite e rilasciate dinamicamente, il throughput disponibile può fluttuare nel tempo. Alcune applicazioni, ad esempio quelle multimediali, per essere efficaci richiedono un certo throughput minimo per funzionare e vengono dette applicazioni sensibili alla banda. Altre applicazioni, ovvero le applicazioni elastiche, utilizzano il throughput a disposizione (es la posta elettronica e il trasferimento di file). Temporizzazione Un protocollo a livello di trasporto può anche fornire garanzie di temporizzazione, che però possono assumere varie forme come quelle per il throughput. Alcune applicazioni interattive (es telefonia Internet e giochi interattivi) per essere realistiche richiedono piccoli ritardi e quindi un tempo breve per la consegna dei dati. Sicurezza Un protocollo a livello di trasporto può fornire a un’applicazione uno o più servizi di sicurezza, come ad esempio cifratura, riservatezza, integrità dei dati e autenticazione. Servizi dei protocolli di trasporto Internet A livello di trasporto sono disponibili due protocolli: TCP e UDP. TCP Il protocollo TCP prevede alcuni servizi: Servizio orientato alla connessione: prima che i messaggi a livello applicazione comincino a fluire, TCP fa in modo che client e server si scambino informazioni di controllo a livello di trasporto. Questa procedura è detta di handshaking e serve per preparare il client ed il server alla partenza dei pacchetti. Dopo questa fase c'è una connessione TCP tra le socket dei due processi che è full-duplex, in modo che i processi possano scambiarsi contemporaneamente messaggi sulla connessione. Servizio di trasferimento affidabile: permette di trasportare i dati senza errori, senza duplicazioni, senza perdita e nel giusto ordine. Viene eseguito un controllo di flusso e viene fornito anche un meccanismo di controllo della congestione, in cui viene "strozzato" il processo d'invio quando la rete è sovraccarica. Non offre temporizzazione, garanzie su un'ampiezza di banda minima e, senza SSL, non offre la sicurezza. Dato che la riservatezza e altre questioni di sicurezza sono diventate critiche per molte applicazioni, è stato sviluppato un elemento aggiuntivo per TCP, ovvero il secure sockets layer (SSL). Questo "arricchimento" a livello applicazione gli rende possibile la cifratura, il controllo dell'integrità dei dati e l'autenticazione end-to-end. Un'applicazione che vuole usare SSL deve includerne il codice sia sul lato client sia sul lato server dell’applicazione. SSL possiede delle proprie API per le socket e i dati passano da esse quando devono essere eseguite delle operazioni per rendere TCP più sicuro. UDP UDP è un protocollo di trasporto leggero, senza connessione (quindi non necessita di handshaking) e fornisce un servizio di trasferimento dati non affidabile. Quando un processo invia un messaggio tramite la socket UDP, non si ha garanzia che questo raggiunga il processo di destinazione o che giunga in ordine. Non garantisce un meccanismo di controllo della congestione, temporizzazione, ampiezza di banda minima e sicurezza. Questo protocollo, essendo leggero, è molto utilizzato per lo streaming o per i videogiochi online, perchè anche se si perdesse qualche pacchetto non comporterebbe gravi conseguenze. 2.2 Web e HTTP HTTP (hypertext transfer protocol) è un protocollo a livello di applicazione del Web. Una pagina web è costituita da oggetti, un oggetto può essere un file HTML, un'immagine JPEG, un'appletoJava, un file audio,... Una pagina web è formata da un file base scritto tramite l'Hypertext Markup Language (HTML), che solitamente include diversi oggetti referenziati. Ogni oggetto è referenziato da uno Uniform Resource Locator (URL), il quale ha due componenti.    Esempio di URL: www. someschool. edu someDept/home. html    /     nome dell’host nome del percorso Un browser web (come Explorer o Firefox) implementa il lato client HTTP che richiede, riceve e visualizza gli oggetti del Web, mentre un web server, che implementa il lato server di HTTP, ospita oggetti web, indirizzabili tramite URL (es Apache), e li invia in risposta a una richiesta. HTTP definisce in che modo i client web richiedono le pagine ai web server e come questi ultimi le trasferiscono ai client. HTTP utilizza TCP come protocollo di trasporto. Il client HTTP inizializza la connessione TCP con il server creando una socket, che è la porta tra un processo e la sua connessione TCP (in questo caso la porta è la 80). Non appena il server web (server HTTP) accetta la connessione TCP dal browser (client HTTP), esso gli invia richieste e riceve risposte HTTP (ovvero messaggi HTTP) tramite la propria interfaccia socket, stessa cosa per il server. Successivamente la connessione TCP verrà chiusa. Dato che HTTP è un protocollo stateless (senza stato), il server non mantiene informazioni sulle richieste fatte dal client. I protocolli che mantengono lo stato sono complessi perché bisogna memorizzare gli stati precedenti. 2.2.2 Connessioni persistenti e non persistenti HTTP con connessioni non persistenti Supponiamo che avvenga un trasferimento di una pagina web dal server al client e che tale pagina consista di un file HTML principale e di 10 immagini JPEG, tutti gli undici oggetti risiedono sullo stesso server. Ipotizziamo che l’URL del file HTML principale sia: http://www.someschool.edu/someDepartment/home.index Ecco cosa avviene: 1. Il processo client HTTP inizializza una connessione TCP con il server HTTP (processo) a www.someSchool.edu sulla porta 80. Il server HTTP all'host www.someSchool.edu in attesa di una connessione TCP alla porta 80 "accetta" la connessione e avvisa il client. 2. Il client HTTP, tramite la propria socket, trasmette un messaggio di richiesta (con l'URL) nella socket della connessione TCP. Il messaggio indica che il client vuole l'oggetto someDepartment/home.index. 3. Il server HTTP riceve il messaggio di richiesta attraverso la propria socket associata alla connessione, forma il messaggio di risposta che contiene l'oggetto richiesto, recuperando /someDepartment/home.index dalla memoria, incapsulandolo in un messaggio di risposta HTTP e inviandolo al client attraverso la socket. 4. Il server HTTP chiude la connessione TCP, ma non la termina finché non è certo che il client abbia ricevuto integro il messaggio di risposta. 5. Il client HTTP riceve il messaggio di risposta che contiene il file html e visualizza il documento html. Esamina il file HTML e trova i riferimenti a 10 oggetti JPEG. 6. I passi 1-5 sono ripetuti per ciascuno dei 10 oggetti JPEG Nelle connessioni non persistenti ogni connessione TCP viene chiusa dopo l’invio dell’oggetto da parte del server, quindi ognuna trasporta soltanto un messaggio di richiesta ed un messaggio di risposta. In questo caso sono state generate 11 connessioni TCP, ma alcuni browser possono gestirne dalle 5 alle 10 in parallelo. Tempo di risposta Il Round-Trip Time (RTT) è il tempo di propagazione di andata e ritorno tra due host (es tempo impiegato da un piccolo pacchetto per andare dal client al server e tornare al client). RTT include i ritardi di propagazione, di accodamento nei router e nei commutatori intermedi nonché di elaborazione del pacchetto. Quando un utente fa click su un collegamento ipertestuale, il browser inizializza una connessione TCP con il web server. Ciò comporta un handshake a tre vie dove il client invia un piccolo segmento TCP al server, il quale manda conferma per mezzo di un piccolo segmento TCP. Il client poi dà conferma di ritorno al server. Le prime due parti dell’handshake a tre vie richiedono un RTT, invece con la terza parte (conferma) il client ci combina un messaggio di richiesta HTTP e lo invia tramite la connessione TCP. Quando il messaggio di richiesta arriva al server, quest’ultimo inoltra il file HTML sulla connessione TCP e ciò consuma un altro RTT. Pertanto il tempo di risposta totale è di circa due RTT, sommati al tempo di trasmissione da parte del server del file HTML. HTTP con connessioni persistenti Le connessioni non persistenti presentano diversi svantaggi: per ogni oggetto occorre stabilire e mantenere una nuova connessione, oltre che allocare un buffer e mantenere variabili TCP sia nel client che nel server, il quale potrebbe dover servire contemporaneamente molte richieste. per ciascun oggetto poi si subisce un ritardo di consegna di due RTT, uno per stabilire la connessione e uno per richiedere e ricevere un oggetto Nelle connessioni persistenti il server lascia la connessione TCP aperta dopo l’invio di una risposta, per cui le richieste e le risposte successive tra gli stessi client e server possono essere trasmesse sulla stessa connessione aperta. In particolare, non solo il server può inviare un’intera pagina web (es il file HTML principale e le 10 immagini) su una sola connessione TCP permanente, ma può anche spedire allo stesso client più pagine web. Queste richieste di oggetti da parte del client possono essere effettuate una di seguito all’altra senza aspettare le risposte delle richieste pendenti (pipelining). Per cui il ritardo di consegna è di un solo RTT per tutti gli oggetti referenziati. Il server HTTP poi chiude la connessione quando essa rimane inattiva per un dato lasso di tempo (configurabile). 2.2.3 Formato dei messaggi HTTP I messaggi HTTP sono di due tipi: richiesta e risposta. Messaggi di richiesta Un tipico messaggio di richiesta HTTP Il messaggio è scritto in testo ASCII, ogni riga è seguita da un carattere di ritorno a capo (carriage return) e un carattere di nuova linea (line feed), mentre l'ultima riga è seguita da una coppia di caratteri di ritorno a capo e nuova linea aggiuntivi. La prima riga è detta riga di richiesta e quelle successive righe di intestazione. La riga di richiesta presenta tre campi: il campo metodo, il campo URL e il campo versione di HTTP. Il campo metodo può assumere diversi valori, tra cui GET, POST, HEAD, PUT e DELETE (GET è il più usato). In questo esempio il browser, che implementa la versione HTTP/1.1, sta richiedendo l'oggetto /somedir/page.html. La riga Host: www.someschool.edu specifica l’host su cui risiede l’oggetto. Includendo la linea di intestazione Connection: close, il browser sta comunicando al server di chiudere la connessione dopo aver inviato l'oggetto richiesto. La riga di intestazione User-agent: specifica il tipo di browser che sta effettuando la richiesta al server, in questo caso Mozilla/5.0, un browser Firefox. Infine, Acceptlanguage: indica che l’utente preferisce ricevere una versione in francese dell’oggetto se disponibile, altrimenti il server dovrebbe inviare la versione di default. Dopo le linee di intestazione si trova il corpo dell'entità, che nel caso del GET è vuoto, ma viene utilizzato dal metodo POST. Un client HTTP usa in genere il metodo POST quando l’utente riempie un form (es input nel motore di ricerca), in questo caso il corpo contiene ciò che l'utente ha immesso nei campi del form. I form HTML spesso usano il metodo GET e includono i dati immessi (l'input del form) nell'URL richiesto. Per esempio se i dati immessi fossero scimmie e banane, allora l'URL avrà la struttura: www.somesite.com/animalsearch?scimmie&banane. Oltre ai metodi GET e POST esiste anche il metodo HEAD. Quando un server riceve una richiesta con il metodo HEAD, risponde con un messaggio HTTP, ma tralascia gli oggetti richiesti (es usato dagli sviluppatori per verificare la correttezza del codice prodotto). In HTTP/1.1 sono presenti anche il metodo PUT, che permette di includere il file (un oggetto) nel corpo dell'entità e lo invia al percorso specificato, ovvero una directory su uno specifico web server, come indicato nel campo URL, ed il metodo DELETE che cancella un file (un oggetto), specificato nel campo URL, su un server. Questi due metodi sono spesso disabilitati nei web server per motivi di sicurezza e sono spesso sostituiti dal metodo POST in cui si specifica che cosa aggiungere o cancellare dal server. Messaggio di risposta HTTP Un esempio di risposta HTTP al messaggio precedente potrebbe essere la seguente: Il messaggio comprende tre sezioni: una riga di stato iniziale, sei righe di intestazione e il corpo che contiene l'oggetto richiesto (dati dati dati …). La riga di stato presenta tre campi: la versione del protocollo, un codice di stato e un corrispettivo messaggio di stato. Alcuni codici di stato con i rispettivi messaggi sono: 200 OK La risposta ha avuto successo; l'oggetto richiesto viene inviato nella risposta 301 Moved Permanently L'oggetto specificato è stato trasferito; la nuova posizione è specificata nell'intestazione Location : della risposta 400 Bad Request Il messaggio di richiesta non è stato compreso dal server 404 Not Found Il documento richiesto non si trova su questo server 505 HTTP Version Not Supported Il server non supporta la versione richiesta del protocollo HTTP Il server usa la riga di intestazione Connection: close per comunicare al client che ha intenzione di chiudere la connessione TCP dopo l’invio del messaggio. La riga Date: indica l’ora e la data di creazione e invio, da parte del server, della risposta HTTP. Non si tratta dell’istante in cui l’oggetto è stato creato o modificato per l’ultima volta, ma del momento in cui il server recupera l’oggetto dal proprio file system, lo inserisce nel messaggio di risposta e invia il messaggio. La riga Server: indica che il messaggio è stato generato da un web server Apache. Essa è analoga alla riga User-agent: nel messaggio di richiesta HTTP. La riga Last-Modified: indica l’istante e la data il cui l’oggetto è stato creato o modificato per l’ultima volta. La riga Content-Length: contiene il numero di byte dell’oggetto inviato. La riga Content-Type: indica che l’oggetto nel corpo è testo HTML. Il tipo dell'oggetto è identificato da questa intestazione e non dall'estensione del file. 2.2.4 Interazione utente-server: i cookie I server HTTP sono privi di stato e proprio per questo HTTP adotta i cookie, che consentono ai server di tener traccia degli utenti (es autenticazione). La tecnologia dei cookie presenta quattro componenti: 1. Una riga di intestazione nel messaggio di risposta HTTP 2. Una riga di intestazione nel messaggio di richiesta HTTP 3. Un file cookie mantenuto sul sistema terminale dell'utente e gestito dal browser dell'utente 4. Un database sul sito Supponiamo che Susan acceda sempre a Internet con lo stesso PC e utilizzando Internet Explorer. Visita per la prima volta il sito di Amazon.com. Supponiamo inoltre che in passato abbia già visitato il sito di eBay. Quando giunge la richiesta al web server di Amazon, il sito crea un identificativo unico (ID) e una voce nel proprio database (entry), indicizzata dal numero identificativo. A questo punto il server risponde al browser di Susan, includendo nella risposta HTTP l’intestazione Set-cookie: che contiene il numero identificativo (es Set-cookie: 1678). Quando il browser di Susan riceve il messaggio di risposta HTTP, vede l’intestazione Set-cookie: e aggiunge una riga al file dei cookie che gestisce, la quale contiene il nome dell’host del server e il numero identificativo nell'intestazione Set-cookie:. Mentre Susan continua a navigare nel sito di Amazon, ogni volta che richiede una pagina web, il suo browser consulta il suo file dei cookie, estrae il suo numero identificativo per il sito e pone nella richiesta HTTP una riga di intestazione del cookie che include tale numero (es cookie: 1678). In tale modo è possibile monitorare l'attività di Susan nel sito, anche se esso non ne conosce esattamente il nome ma solo l'ID dell'utente (1678). Questo permette ai siti come Amazon di mantenere, per esempio, una lista di tutti i prodotti nel carrello e di acquistarli assieme alla fine della sessione, oppure di suggerire dei prodotti sulla base delle pagine web che ha visitato in passato. Se poi Susan si registra sul sito, fornendo il suo nome completo, l’indirizzo di posta elettronica, un recapito postale e informazioni sulla carta di credito, Amazon può includere queste informazioni nel proprio database e quindi associare il nome di Susan al suo numero identificativo (e a tutte le pagine precedentemente visitate in quel sito). I cookie possono essere utilizzati anche per memorizzare la carta per gli acquisti e lo stato della sessione dell'utente, ovvero che una volta effettuato il login, anche se si chiude la scheda, non bisognerà effettuarlo nuovamente. 2.2.5 Web caching Una web cache, nota anche come proxy server, è un'entità di rete che soddisfa le richieste HTTP del client senza coinvolgere il server d'origine. Il proxy ha una propria memoria su disco (una cache) in cui conserva copie di oggetti recentemente richiesti ed il browser di un utente può essere configurato in modo che tutte le richieste HTTP vengano dirette a questo proxy server. Se il dato non è presente in cache, l'oggetto viene richiesto al server d'origine e poi inoltrato al client, salvandolo prima nella propria cache. Il proxy è sia server, quando fornisce le risposte che trova in cache, sia client, quando deve richiedere l'oggetto al server di origine. Tipicamente il proxy è installato da un ISP (università, aziende o ISP residenziali). Il web catching è stato sviluppato perché riduce i tempi di risposta alle richieste del client, specie se l'ampiezza di banda tra client e server di origine è molto inferiore rispetto all'ampiezza di banda tra client e proxy, ed anche perché riduce il traffico sul collegamento di accesso a Internet. Grazie alla presenza di cache, Internet consente ai provider "scadenti" di fornire dati con efficacia, ma così fa anche la condivisione di file P2P. Supponiamo che la dimensione media di un oggetto sia di 100.000 bit (0,1 Mbit) e che i browser dell'ente abbiano una frequenza media di 15 richieste al secondo ai server di origine. Il ritardo dal router istituzionale a qualsiasi server d'origine con il rispettivo ritorno al router istituzionale è di 2 secondi (ritardo Internet), mentre il collegamento tra un router della prima rete a uno della seconda è di 1,5 Mbit/s. L'intensità di traffico sulla rete LAN è pari a (15richieste/secondo) ∗ (0, 1M bit/richiesta)/(10M bit/s) = 0, 15 (15%). L'intensità di traffico sul collegamento di accesso (dal router Internet al router dell’ente) vale (15richieste/secondo) ∗ (0, 1M bit/richiesta)/(1, 5M bit/s) = 1 (100%). Un ritardo di 0,15 su una rete locale può essere trascurato, mentre se si avvicina a 1, come nel collegamento d'accesso, cresce senza limiti. Il ritardo totale sarà quindi: ritardo di Internet + ritardo di accesso + ritardo delle LAN = 2 s + 1 minuto + qualche ms. Una possibilità consiste nell'aumentare l'ampiezza di banda del collegamento d'accesso a 10 Mbps. Questo abbasserà l’intensità di traffico sul collegamento di accesso fino a 0,15 (non arrivando al minuto quindi), ma il ritardo totale sarà comunque di circa due secondi. Oltretutto l'ente dovrebbe aggiornare il proprio collegamento a Internet, il che può risultare costoso. Una soluzione possibile consiste nell'adozione di un proxy nella rete del istituzione. Supponiamo che una percentuale di successo (hit rate) sia del 40%, quindi il 40% delle richieste sarà soddisfatto quasi immediatamente (entro 0,01 s) dalla cache, mentre il restante 60% delle richieste sarà soddisfatto dal server d'origine. Dato che l'utilizzo del collegamento d'accesso si è ridotto al 60%, l'intensità di traffico sul collegamento di accesso è di: (0, 6 ∗ 15richieste/secondo) ∗ (0, 1M bit/richiesta)/(1, 5M bit/s) = 0, 6 che è minore di 1. Questo determina ritardi trascurabili (10 ms), per cui il ritardo totale è di 2,01 secondi (ovvero ritardo Internet + 10 ms). Il ritardo medio adesso sarà quindi di: 0, 6 ∗ (2, 01secondi) + 0, 4 ∗ (0, 01secondi) = 1, 21secondi. Questo comporta una spesa contenuta perché molti proxy sono software di pubblico dominio che possono essere eseguiti su PC economici. Supporto HTTP per le cache: GET condizionale Sebbene il web caching riduca i tempi di risposta percepiti dall’utente, introduce un nuovo problema. Può accadere che l'oggetto nel web server sia stato modificato rispetto alla copia del client (sia esso un proxy o un browser), ma fortunatamente HTTP presenta un meccanismo che permette alla cache di verificare se i suoi oggetti sono aggiornati. Questo meccanismo è chiamato GET condizionale. Un messaggio di richiesta HTTP viene detto messaggio di GET condizionale se usa il metodo GET e include una riga di intestazione IF-modified-since: < data >, che specifica la data della copia dell'oggetto nella richiesta HTTP. Un esempio può essere il seguente: Un proxy invia un messaggio di richiesta a un web server per conto del browser richiedente e poi il web server invia al proxy un messaggio di risposta con l'oggetto richiesto. Il proxy poi inoltra l'oggetto al browser richiedente e pone anche l’oggetto nella cache locale, memorizzando anche la data di ultima modifica di tale oggetto. Quando un altro browser richiederà, per esempio, una settimana più tardi lo stesso oggetto attraverso il proxy, dato che tale oggetto può essere stato modificato nel web server durante la settimana trascorsa, il proxy effettua un controllo di aggiornamento inviando un GET condizionale. Il valore della riga di intestazione If-modified-since: equivale esattamente, in questo caso, al valore della riga di intestazione Last-Modified: inviata dal server una settimana prima, difatti questo GET condizionale sta comunicando al server di inviare l’oggetto solo se è stato modificato rispetto alla data specificata. Se l'oggetto non è stato modificato durante la settimana, allora il server invia un messaggio al server di tale tipo: In questo caso il web server invia un messaggio di risposta, ma non include l'oggetto richiesto perché sprecherebbe banda e incrementerebbe il tempo di risposta percepito dall'utente, specie se l'oggetto è grande. La riga di stato 304 Not Modified comunica al proxy che può procedere e inoltrare al browser richiedente la copia dell’oggetto presente in cache. HTTP/1.0 e HTTP/1.1 HTTP 1.1 non aspetta un ACK di conferma per procedere ad inviare nuovi file, ma ne vengono inviati più alla volta. HTTP/2 rappresenta un'evoluzione di HTTP, cioè mantiene i metodi HTTP, i codici di stato e la semantica. Il protocollo è focalizzato sulle prestazioni, specificatamente sulla latenza percepita dall'utente e l'utilizzo delle risorse di rete e dei server. L'obiettivo è utilizzare un'unica connessione dai browser ad un sito web. HTTP/2 si basa su SPDY, protocollo di livello applicazione per trasportare contenuti sul web con minima latenza, tramite: Multiplexing di flussi: supporta un numero illimitato di flussi su una singola connessione TCP ("allunga la connessione" aumentandone l'efficienza) Priorità delle richieste: il client può inviare quante richieste desidera, assegnando a ciascuna una priorità (evita la congestione) Compressione dell'header HTTP: diminuisce i byte trasmessi Framing binario Nuovo livello di framing binario, responsabile delle modalità di incapsulamento e trasferimento dei messaggi HTTP. La semantica HTTP è invariata, ma la codifica in transito è differente. Tutte le comunicazioni HTTP/2 sono suddivise in messaggi e frame più piccoli, ognuno dei quali codificato in formato binario. Sia il client che il server devono utilizzare il nuovo meccanismo di codifica binario per capirsi tra loro: un client HTTP/1.x non comprende un server HTTP/2 e viceversa. Stream, messaggi, frame Tutte le comunicazioni vengono eseguite all'interno di una singola connessione TCP che può portare qualsiasi numero di stream bidirezionali di byte. Ogni stream ha un identificativo univoco e le informazioni di priorità opzionali, utilizzate per il trasporto di messaggi. Ogni messaggio è un messaggio HTTP logico, come una richiesta o una risposta, che consiste di uno o più frame. Il frame è la più piccola unità di comunicazione che porta un tipo specifico di dati (intestazioni HTTP, payload del messaggio). I frame di diversi stream possono essere interposti e quindi riassemblati tramite l'identificatore di flusso incorporato nell'intestazione di ciascun frame. Multiplexing di richieste e di risposte In HTTP/1.x, se il client desiderava fare più richieste parallele per migliorare le prestazioni, doveva utilizzare più connessioni TCP. Il nuovo livello di framing binario in HTTP/2 rimuove queste limitazioni e consente il multiplexing di richieste e risposte. Il client e il server possono dividere un messaggio HTTP in frame indipendenti, intervallarli e ricomporli all'altro capo. Priorità degli stream L'ordine in cui i frame vengono interposti e consegnati sia dal client che dal server influenza le prestazioni. HTTP/2 consente a ciascun stream di avere preso e dipendenza associati: Ogni stream può avere assegnato un peso intero compreso tra 1 (più leggero) e 256 (più pesante) Ogni stream può avere una dipendenza esplicita su un altro stream Il client può costruire e comunicare un "albero di priorità" che esprime come preferirebbe ricevere le risposte. A sua volta, il server può utilizzare queste informazioni per dare priorità all'elaborazione dello stream. Ogni stream corrisponde ad una richiesta GET del client, perché se il client invia più GET assieme senza numerare ogni stream, il server non saprebbe a quale GET mandare la corrispondente risposta. Connessione HTTP/2 HTTP/2 non ha più bisogno di più connessioni TCP per eseguire multiplex di stream in parallelo, ogni stream è suddiviso in molti frame che possono essere intervallati e gestiti con priorità diverse. Tutte le connessioni HTTP/2 sono persistenti, e si rende necessaria solo con una connessione per origine. Server push Il server può inviare più risposte per una singola richiesta del client. Oltre alla risposta alla richiesta originale, il server può inviare risorse aggiuntive senza che il client debba richiederle esplicitamente. Una tipica applicazione web è costituita da decine di risorse, tutte scoperte dal cliente esaminando il documento fornito dal server. Ad oggi infatti viene eliminata la latenza supplementare e si lascia che il server invii le risorse in anticipo. Transport Layer Security (TLS) - HTTP Protocollo crittografico che permette una comunicazione sicura dalla sorgente al destinatario fornendo: autenticazione, integrità dei dati e confidenzialità. Il funzionamento del protocollo TLS può essere suddiviso in tre fasi principali: Negoziazione fra le parti dell'algoritmo da utilizzare Scambio delle chiavi e autenticazione Cifratura simmetrica e autenticazione dei messaggi Estende HTTP inviando tutte le richieste e risposte attraverso una comunicazione cifrata (tramite TLS) sulla porta 443. Es http://www.unitn.it: Il browser capisce automaticamente che deve usare TLS Inizializza la connessione Invia richieste criptate e deve decriptate le risposte che riceve Nota: questo cripta solo le informazioni del protocollo HTTP non gli header dei protocolli inferiori, quindi le porte TCP usate e gli indirizzi IP usati sono in chiaro. Recentemente più del 50-70% dei siti usa HTTPS. La 'S' aumenta il ritardo di connessione perchè applica la crittografia ai messaggi con TLS e l'inizializzazione di una sessione richiede tempo, ovvero 2RTT + 1RTT per stabilire una connessione TCP. La soluzione è l'utilizzo di protocolli più moderni. 2.3 FTP: file transfer protocol Trasferimento file a/da un host remoto attraverso il modello client/server, dove il client è il lato che inizia il trasferimento (a/da un host remoto) ed il server è l'host remoto, che utilizza la porta 21. È definito nell'RFC 959. Il client FTP contatta il server FTP alla porta 21, specificando TCP come protocollo di trasporto. Il client ottiene l'autorizzazione sulla connessione di controllo e cambia la directory remota inviando i comandi sulla connessione di controllo. Quando il server riceve un comando per trasferire un file, apre una connessione dati TCP con il client e dopo il trasferimento di un file, il server chiude la connessione solo della porta 20, mantenendo quella della porta 21. Il server apre una seconda connessione dati TCP per trasferire un altro file sulla stessa connessione di controllo. Dato che FTP utilizza la connessione dati e non la connessione di controllo per trasferire un file parliamo di out-of-band. Il server FTP mantiene "lo stato", ovvero mantiene la stessa directory utilizzata per il trasferimento precedente, non c'è bisogno di autenticarsi nuovamente. 2.4 Posta elettronica in Internet La posta elettronica è un mezzo di comunicazione asincrono, infatti ogni utente può leggere i messaggi nel momento più opportuno senza doversi coordinare con altri utenti. La posta elettronica presenta tra componenti principali: agente utente, server di posta e il protocollo SMTP. Agente utente (user agent) Gli user agent, come Microsoft Outlook e Apple Mail, consentono agli utenti di leggere, rispondere, inoltrare, salvare e comporre i messaggi. Se per esempio Alice vuole mandare un messaggio a Bob, quando ha finito di comporre il messaggio il suo user agent lo invia al server di posta, dove viene posto nella coda di messaggi in uscita. Quando Bob vuole leggere il messaggio, il suo user agent lo recupera dalla casella di posta nel suo mail server. Server di posta Ciascun destinatario, come per esempio Bob, ha una casella di posta (mailbox) collocata in un mail server che gestisce e contiene i messaggi a lui inviati. Per accedere ai messaggi della propria casella Bob deve essere autenticato dal server che lo ospita tramite nome utente e password. Il mail server di Alice deve anche gestire eventuali problemi del server di Bob, infatti se il server di Alice non può consegnare la posta a quello di Bob, la trattiene in una coda di messaggi e cerca di trasferirla in un secondo momento. Se dopo alcuni giorni non si ottiene successo, il server rimuove il messaggio e notifica la mancata consegna al mittente con un messaggio di posta elettronica. Protocollo SMTP SMTP è il principale protocollo a livello di applicazione per la posta elettronica su Internet e fa uso del servizio di trasferimento dati affidabile, proprio di TCP, per trasferire la mail dal server del mittente a quello del destinatario. Presenta un lato client, in esecuzione sul mail server del mittente e un lato server, in esecuzione sul server del destinatario. Quando client e server si invertono, SMTP cambia la sua funzione da client a server e viceversa. Tratta il corpo di tutti i messaggi di posta come semplice ASCII a 7 bit, penalizzando l'invio di allegati come immagini, audio o video, che devono prima essere codificati in ASCII e poi decodificati in binario dopo il trasporto. Le operazioni base di SMTP verranno descritte con un esempio: Supponiamo che Alice voglia inviare a Bob un messaggio ASCII. 1. Alice usa il suo agente utente per comporre il messaggio da inviare a [email protected] 2. L'agente utente di Alice invia il messaggio al server di posta di Alice, dove viene collocato nella coda di messaggi 3. Il lato client SMTP apre una connessione TCP con il server di posta di Bob 4. Dopo un handshaking SMTP, il client SMTP invia il messaggio di Alice sulla connessione TCP 5. Il server di posta di Bob pone il messaggio nella casella di posta di Bob 6. Bob invoca il suo agente utente per leggere il messaggio Di solito SMTP non usa mail server intermedi per inviare la posta, anche quando i mail server finali sono collocati agli angoli opposti del mondo. La connessione TCP ha luogo direttamente tra questi ultimi, infatti se il mail server del destinatario è spento, il messaggio rimane nel mail server del mittente finchè non verrà inviato. Difatti questo protocollo presenta somiglianze con l'interazione umana faccia a faccia, perché come primo passo il client SMTP fa stabilire a TCP una connessione sulla porta 25 verso il server SMTP e se è inattivo, il client riprova più tardi. Solo dopo aver stabilito la connessione il server e il client effettuano una qualche forma di handshaking a livello applicativo, come le persone che si presentano prima di scambiarsi informazioni. Durante questa fase, il client indica l’indirizzo e-mail del mittente e quello del destinatario, poi invia il messaggio. SMTP può contare sul servizio di trasferimento dati affidabile proprio di TCP per recapitare il messaggio senza errori e, appena non ci sono altri messaggi da inviare, il client ordina a TCP di chiudere la connessione. Un esempio di trascrizione di messaggi scambiati tra un client SMTP (C) e un server SMTP (S). Il nome dell’host del client è crepes.fr mentre il nome dell’host del server è hamburger.edu. Le righe di testo ASCII precedute da C: sono esattamente quelle che il client invia nella propria socket TCP, mentre le righe precedute da S: sono esattamente quelle che il server invia nella propria socket TCP. La seguente trascrizione inizia appena si stabilisce la connessione TCP: S: 220 hamburger.edu C: HELO crepes.fr S: 250 Hello crepes.fr, pleased to meet you C: MAIL FROM: < [email protected] > S: 250 [email protected]... Sender ok C: RCPT TO: < [email protected] > S: 250 [email protected]... Recipient ok C: DATA S: 354 Enter mail, end with “.” on a line by itself C: Ti piace il ketchup? C: Che cosa ne pensi dei cetrioli? C:. S: 250 Message accepted for delivery C: QUIT S: 221 hamburger.edu closing connection Nell’esempio sopra riportato, il client invia un messaggio (“Ti piace il ketchup? Che cosa ne pensi dei cetrioli?”) dal server di posta crepes.fr al server di posta hamburger.edu e, come parte del dialogo, ha inviato cinque comandi: HELO, MAIL FROM, RCPT TO, DATA e QUIT. SMTP richiede che ogni riga termini con i caratteri di ritorno a capo e nuova linea (< CR > e < LF >). Il server invia risposte a ogni comando, e ciascuna presenta un codice di risposta. SMTP fa uso di connessioni persistenti, se il mail server di invio ha molti messaggi da inviare allo stesso mail server in ricezione, può mandarli tutti sulla stessa connessione TCP. Per determinare la fine del messaggio SMTP usa < CR >< LF >.< CR >< LF > 2.4.2 Confronto con HTTP I protocolli SMTP e HTTP vengono utilizzati per trasferire file da un host a un altro, ma ci sono delle differenze. HTTP trasferisce file (chiamati oggetti) da un web server a un web client (solitamente un browser), ma ciascun oggetto è incapsulato nel suo messaggio di risposta. Inoltre è un protocollo pull, ovvero che qualcuno carica informazioni su un web server e gli utenti usano HTTP per attirarle a sé (pull) dal server. In particolare, la connessione TCP viene iniziata dalla macchina che vuole ricevere il file. SMTP trasferisce file (messaggi di posta elettronica) da un mail server a un altro, ma più oggetti vengono trasmessi in un unico messaggio. SMTP poi è un protocollo push, ovvero che il mail server di invio spinge (push) i file al mail server in ricezione. In particolare, la connessione TCP viene iniziata dall’host che vuole spedire il file. Entrambi hanno un'interazione comando/risposta in ASCII, solamente che SMTP deve codificare il messaggio in ASCII a 7 bit, vincolo che HTTP non possiede. 2.4.3 Formati dei messaggi di posta Il corpo dei messaggi di posta elettronica, formato soltanto da caratteri ASCII, è preceduto da un'intestazione contenente le informazioni di servizio. Tale informazione è contenuta in una serie di righe di intestazione, definite nell’RFC 5322, che sono separate dal corpo del messaggio mediante una riga senza contenuto e che sono diverse dai comandi del paragrafo 2.4.1. Esse sono delle parole chiave seguite da due punti, a loro volta seguiti da un valore (es From: [email protected]). Vi è poi il Multipurpose Internet Mail Extensions (MIME), uno standard che estende il formato dei messaggi di posta elettronica multimediale e definito dall'RFC 2045, 2056. MIME aggiunge il supporto per codifiche di caratteri diversi dall'ASCII e per la codifica di messaggi (o loro parti) non testuali. Alcune righe aggiuntive nell'intestazione dei messaggi dichiarano il tipo di contenuto MIME. 2.4.4 Protocolli di accesso alla posta Quando SMTP consegna il messaggio di Alice al mail server destinatario, questo lo colloca nella casella di posta di Bob. Il server di posta di Bob non può risiedere sul suo PC locale perché sennò dovrebbe essere sempre acceso e connesso ad Internet al fine di ricevere nuova posta che può giungere in qualsiasi istante. Per cui si preferisce che l'utente abbia in esecuzione uno user agent sul PC locale, ma acceda alla propria casella memorizzata su un mail server condiviso con altri utenti e sempre attivo, che è generalmente gestito dall'ISP dell'utente (es università o azienda). Tecnicamente lo user agent di Alice potrebbe spedire i messaggi direttamente al mail server di Bob usando SMTP, ma invece Alice usa il suo mail server perché altrimenti non saprebbe come gestire un mail server di destinazione non raggiungibile. Alice deve dapprima depositare la email nel proprio mail server, che può ripetutamente tentare l’invio del messaggio al mail server di Bob, per esempio ogni trenta minuti, finché questo non diventa operativo. E nel caso in cui il proprio server di posta sia inattivo, Alice può lamentarsi con il proprio amministratore di sistema! L’RFC (documento con informazioni) relativo a SMTP definisce i comandi SMTP per consegnare un messaggio attraverso più server SMTP. Lo user agent di Bob non può usare SMTP per ottenere i messaggi che si trovano nel mail server del suo provider, questo perché si tratta di un'operazione di pull, mentre SMTP è un protocollo push. Proprio per questo viene introdotto un protocollo di accesso alla posta per trasferire i messaggi dal mail server di Bob al suo PC locale. Alcuni di questi protocolli sono: POP3 (Post Office Protocol), IMAP (Internet mail access protocol) e HTTP POP3 POP3 è un protocollo di accesso alla posta estremamente semplice e proprio per questo le sue funzionalità sono piuttosto limitate. POP3 entra in azione quando lo user agent apre una connessione TCP verso il mail server sulla porta 110. Quando la connessione TCP è stabilita, POP3 procede in tre fasi: autorizzazione, transazione e aggiornamento. Durante la fase di autorizzazione, lo user agent invia il nome utente (comando user) e password (comando pass) per autenticare l'utente. Nella seconda fase, la transazione, lo user agent recupera i messaggi, ma può anche marcare i messaggi per la cancellazione, rimuovere i marcatori di cancellazione e ottenere statistiche sulla posta. Per esempio: list per ottenere l'elenco dei messaggi in cui ogni numero di messaggio viene visualizzato con la dimensione in byte accanto retr per recuperare i messaggi in base al numero, ma non se il messaggio è stato eliminato dele per cancellare un messaggio, che altrimenti non verrebbe mai cancellato quit per disconnettersi una volta completata la conversazione POP3 Nell fase di aggiornamento, che avviene dopo il comando quit, il server di posta rimuove i messaggi che sono stati marcati per la cancellazione. In una transazione POP3 lo user agent invia comandi e il server reagisce a ogni comando con una tra due possibili risposte: +OK oppure –ERR. In questo esempio viene utilizzata la modalità scarica e cancella, in cui lo user agent chiede al server di elencare la dimensione dei messaggi memorizzati, quindi li recupera e li cancella. Una volta finita la fase di aggiornamento i messaggi 1 e 2 sono rimossi dalla casella di posta. Il problema di questa modalità sussiste nel caso in cui il destinatario volesse utilizzare un altro PC per accedere ai propri messaggi di posta, perché i messaggi vengono ripartiti su più client. In questo caso se Bob leggesse il messaggio in uno dei client non potrebbe più leggerlo dagli altri. In modalità scarica e mantieni lo user agent lascia i messaggi sul server di posta dopo averli scaricati, permettendo a Bob di rileggerli su più macchine diverse e in momenti differenti. Dato che POP3 è un protocollo senza stato tra le varie sessioni è molto semplice implementarlo. IMAP Con POP3, dopo aver scaricato i messaggi sulla macchina locale, Bob può creare cartelle nelle quali includere i messaggi scaricati e può spostarli tra cartelle, effettuare ricerche per nome del mittente o cancellarli. Gli utenti però preferirebbero avere una gerarchia di cartelle su un server remoto cui accedere da differenti calcolatori, perché su POP3 le modifiche delle cartelle sono locali. Proprio per questo è stato messo a punto il protocollo IMAP, che permette di mantenere tutti i messaggi in un unico posto, ovvero il server, consentendo all'utente di organizzare i messaggi in cartelle. I server di IMAP conservano lo stato dell'utente tra le varie sessioni, ovvero i nomi delle cartelle e l'associazione tra identificatori dei messaggi e nomi delle cartelle. Posta basata sul Web (HTTP) Vi sono poi gli utenti che accedono alle proprie e-mail tramite un browser web, questo è il caso di Hotmail, Google e Yahoo. In questo caso lo user agent è un browser web e l'utente comunica con la propria casella remota tramite HTTP, anziché POP3 o IMAP. Tra i server di mittente e destinatario si usa comunque SMTP. Transport Layer Security (TLS) - SMTP Per garantire la sicurezza della comunicazione si può usare SMTP insieme a TLS, ma in questo caso le comunicazioni non possono avvenire su porte di comunicazione ove è in ascolto un server di posta che non usa la crittografia. Sono pertanto utilizzate porte diverse: SMTP con SSL/TLS su porta 465 POP3 con SSL/TLS su porta 995 IMAP con SSL/TLS su porta 993 Vi è poi un evoluzione di TLS, ovvero STARTTLS, che consente di cifrare la connessione anche sulle porte originali o standard (110 per POP3, 143 per IMAP, 25 per SMTP). Il client che sfrutta tale protocollo chiede in prima istanza al server l'instaurazione di una connessione cifrata, poi la sessione inizia "in chiaro" e quindi diventa cifrata prima che venga trasmessa qualunque informazione sensibile o potenzialmente tale. Viene spesso impiegato tra MTA (Mail Transfer Agent) ovvero durante il trasporto dell'email da un provider all'altro. 2.5 DNS (Domain Name System) Le persone possono essere identificate in molti modi, come ad esempio il nome, il codice fiscale o il numero della carta d'identità. Proprio come le persone, anche gli

Use Quizgecko on...
Browser
Browser