Il livello di Trasporto e i suoi protocolli (pag.156) U3L12 Il livello di Trasporto Il livello Transport è il cuore di tutta la gerarchia di protocolli. Il suo compito è quello di fornire un trasporto affidabile ed efficace dall'host di origine a quello di destinazione, indipendentemente dalla rete utilizzata, quindi ricevere e/o inviare i dati, suddividerli in pacchetti, se necessario, controllarli e dove previsto possibilmente correggerli. A tale scopo fornisce servizi al livello superiore e sfrutta i servizi del livello di rete. A questo livello è anche affidata la qualità del servizio QoS (Qualità of Service) ovvero che i pacchetti arrivino, senza errori, tutti, senza né perdite né duplicazioni. Questo è il livello in cui si gestisce per la prima volta una conversazione diretta fra sorgente e destinazione (end-to-end), il trasporto è svincolato dai problemi di connessione fisica dei livelli inferiori. Da host ad host: • i messaggi di un’applicazione vengono segmentati e trasformati in PDU (Protocol Data Unit) di livello4 (trasporto), detti segmenti. • il livello di trasporto passa le PDU al livello di rete che le incapsula in PDU di livello 3 e le inoltra in rete • a destinazione i messaggi passano dal livello 3 al 4 e i messaggi dell’applicazione vengono ricostruiti il livello di trasporto rende trasparente il trasporto fisico dei messaggi alle applicazioni. Da ciò discende che il software di livello transport è presente solo sugli host, e non nei router della subnet di comunicazione. Il segmento, ovvero l’unità di dati scambiata dal protocollo di trasporto, è detto TPDU (Trasport Protocol Data Unit): 1 Servizi offerti dal livello transport Ricordiamo che per servizi intendiamo quelle interfacce software che vengono utilizzate affinchè un'entità possa comunicare con un'altra entità di livello inferiore o superiore. Il servizio offerto da uno strato è rappresentato logicamente con una porta di accesso al servizio, detta Service Access Point (SAP), che ha un nome unico ed è identificata da un indirizzo. I servizi realizzati dal livello transport possono essere: • • • • • • (pag.167) Gestione della connessione: poiché generalmente il livello rete non stabilisce una connessione con l'host di destinazione, il livello di trasporto si incarica di realizzare una connessione che viene poi chiusa quando non è più necessaria. Corretto ordine di consegna e controllo errori. Poiché i pacchetti possono seguire percorsi diversi all'interno della rete, il livello di trasporto verifica che i pacchetti vengano riordinati nella giusta sequenza prima di passarli al livello superiore. Trasferimento affidabile. Il protocollo di trasporto si occupa di garantire che tutti i dati inviati vengano ricevuti; nel caso il servizio di rete utilizzato perda pacchetti, il protocollo di trasporto si occupa di ritrasmetterli. Controllo di flusso. Se gli host coinvolti nella comunicazione hanno prestazioni molto differenti può capitare che un pc più veloce "inondi" di dati uno più lento. Mediante il controllo di flusso, un host in "difficoltà" può chiedere di abbassare il tasso di trasmissione in modo da poter gestire le informazioni in ingresso. Controllo di Congestione: il protocollo di trasporto riconosce uno stato di congestione della rete, e adatta di conseguenza la velocità di trasmissione. Multiplazione. Il protocollo di trasporto permette di stabilire diverse connessioni contemporanee tra gli stessi due host, utilizzando le “porte” (di cui parleremo). Nell'uso comune, diversi servizi utilizzano porte diverse. Nessuno di tali servizi è obbligatorio, quindi per ciascuna applicazione è possibile scegliere il protocollo più adatto allo scopo. Sotto certi aspetti i servizi di livello transport assomigliano a quelli di livello data link. Infatti si occupano, fra le altre cose, anche di: • • • controllo degli errori; controllo di flusso; riordino dei TPDU. Ci sono però delle importanti differenze. Quella principale è che: • • nel livello data link fra le peer entity c'è un singolo canale di comunicazione; nel livello transport c'è di mezzo l'intera subnet di comunicazione. 2 Proprietà ed esempi di Servizi - affidabilità della comunicazione e sequenza dei flussi di dati - connessione affidabile non affidabile - non connessione affidabile non affidabile - datagramma senza connessione non affidabile - connessioni affidabili sequenze di messaggi Ma anche richieste diverse: solo garanzia di sequenza di dati che si possono anche perdere, anche dati che vogliamo che siano ricevuti, sequenze di byte che richiediamo ricevute in modo unico, … Primitive a livello transport Per accedere ad un servizio e poter usare i protocolli vengono fornite all’entità di livello delle funzioni di base chiamate primitive. Le primitive servono a richiedere il servizio e essere informati dell’esito della richiesta e devono contenere tutte le informazioni necessarie al fornitore del servizio. Ad esempio: E ogni primitiva può avere quattro possibili parametri: - Request - il service user richiede un servizio (una azione) - Indication - il service provider indica al service user che è stato richiesto un servizio (segnalazione di evento) - Response - il service user specifica la risposta alla richiesta di servizio (una azione) - Confirm - il service provider segnala la risposta alla richiesta di servizio (segnalazione di evento) Esempio (pag. 160) 3 La multiplazione e le porte Un host connesso in rete è identificato da un indirizzo IP (o più di uno in caso di router) e ogni singolo host può usufruire contemporaneamente di uno o più servizi a livello application che utilizzano il TCP a livello transport, l’utilizzo del solo indirizzo IP non è sufficiente a indirizzare correttamente i dati provenienti dalla rete all’applicazione giusta. Si pensi ad esempio che sul medesimo host si stia navigando in internet e facendo un download di un file, il browser utilizzerà il protocollo http e www a livello application e il download l’FTP ma a livello di transport tutti e due utilizzeranno il TCP, come farà quindi il TCP a indirizzare correttamente i dati per il web-browser e quelli per l’FTP? Più applicazioni possono essere attive su un end-system e il livello di trasporto svolge funzioni di multiplexing/demultiplexing (ciascun collegamento logico tra applicazioni è indirizzato dal livello di trasporto): In Internet le funzioni di multiplexing/de multiplexing vengono gestite mediante indirizzi contenuti nelle PDU di livello di trasporto. Tali indirizzi sono lunghi 16 bit e prendono il nome di porte. Le porte, numerate da 0 a 65.536, corrispondono ad ogni applicazione sul server in ascolto e si suddividono in tre parti: 1. Well Known Ports (da 0 a 1023) Sono porte assegnate univocamente e sono riservate ai servizi server standard. I client non dovrebbero mai usare queste porte. 2. Registered Ports (da 1024 a 49151) L’utilizzo di questo insieme di porte è generalmente libero nonostante contenga dei servizi registrati. Non esistono vincoli restrittivi a riguardo tanto che tutti i client usano normalmente le porte a partire dalla numero 1024 per collegarsi ad un sistema remoto. 3. Dynamic and/or Private Ports (da 49152 a 65535) Nessun servizio è registrato in quest’area. Il suo utilizzo e assolutamente libero. Le porte tra 0 e 1023 sono assegnate dalla IANA (Internet Assigned Number Authority), di seguito vengono elencate alcune di quelle più utilizzate: Porta 0 7 13 20 21 23 25 Servizio Riservato Echo DAYTIME Restituisce data e ora FTP (Canale dati) FTP (Canale controllo) Telnet Smtp Protocollo UDP UDP UDP TCP TCP TCP TCP 4 37 42 43 53 80 110 139 161 513 514 525 TIME ora NAME Server dei nomi host WHOIS Chi è in servizio DNS http Pop (versione 3) Servizi NetBios SNMP Monitor di rete WHO Demone Remote Who UNIX SYSLOG system log TIMED demone Time UDP UDP UDP TCP TCP TCP UDP UDP UDP UDP UDP Nel momento in cui un host mittente voglia inviare delle informazioni ad un host di destinazione riguardante un particolare servizio, l’host origine richiederà una connessione specificando indirizzo IP e porta del servizio, la combinazione indirizzo IP e numero della porta prende il nome di indirizzo di socket, una socket può essere considerata né più né meno che un punto di accesso all’host: Ci pensano le entità di trasporto a suddividere il flusso in arrivo dal livello application in segmenti, a trasmetterli e a ricombinarli in un flusso che viene consegnato al livello application di destinazione. Quando un processo viene associato ad una porta (lato cliento lato server) viene associato sempre dal sistema operativo a due code, una d’ingresso e una d’uscita, per non perdere la priorità di esecuzione. Funzionalità di buffering dei dati. Esempio di Multiplazione/Demultiplazione Multiplazione: Creazione dei segmenti provenienti dai messaggi di diversi processi applicativi La multiplazione avviene dal lato del nodo mittente Demultiplazione: Ogni segmento dello strato di trasporto possiede un campo contenente l’informazione usata per determinare a quale processo deve essere consegnato il segmento La demultiplazione avviene dal lato del nodo destinatario 5 Qualità del Servizio QoS (Quality of Service) e un servizio aggiuntivo introdotto nel livello di trasporto che permette di specificare appunto la qualità del servizio richiesta. L'utilità di questo servizio si nota soprattutto nelle reti medio/grandi, dove c'è un più che discreto traffico di dati e alcune connessioni necessitano di una “qualità” comunque elevata. La qualità in evidenza è la velocità di trasferimento dei dati. Sostanzialmente si può specificare un range di valori entro il quale definire la qualità del servizio per differenziare a dovere le diverse necessità. Ad esempio: - se un server di posta consegna una mail con mezzo secondo di ritardo (ma anche con mezzo minuto) nessuno se ne accorge o ci fa caso: questa trasmissione può accontentarsi del valore più basso della scala. - se un applicazione di video streaming trasmette ogni frame video con un ritardo di mezzo secondo, allora sì che la gente se ne accorge: una tale trasmissione dovrà richiedere il più alto livello di qualità del servizio Le stazioni trasmissive negoziano all’inizio per concordare i parametri da utilizzare e se non si raggiunge un accordo la connessione può anche essere rifiutata. Negoziazione del QoS I protocolli del livello di Trasporto All’interno dell’architettura TCP/IP, il livello di trasporto è basato su due protocolli: • • TCP (Transmission Control Protocol) connesso e affidabile RFC 793, 1122 e 1323; UDP (User Datagram Protocol) non connesso e non affidabile RFC 768. I protocolli TCP / UDP forniscono quindi il meccanismo di trasferimento dei dati. Il TCP è un protocollo cosiddetto connection oriented , ovvero garantisce la consegna dei dati inviati tra un host e un altro, si stabilisce prima una connessione tra i due host e poi inizia il trasferimento dati. L’UDP invece non garantisce che i dati siano giunti a destinazione. La scelta dell’uso di un protocollo rispetto ad un altro è da decidersi in base all’esigenza, l’UDP è più veloce e meno sicuro, il TCP è più sicuro ma più lento in quanto oltre ad occuparsi della consegna delle informazioni durante una transazione TCP è necessario eseguire tutta una serie di controlli e impostazioni sullo stato della connessione. Il protocollo TCP è stato progettato per fornire un flusso di byte affidabile, da sorgente a destinazione. 6 In base al tipo di applicazione viene scelto il tipo di protocollo di trasporto più adatto: Il protocollo UDP Il protocollo UDP è quindi un protocollo non connesso (connession-less) e non affidabile, utile per inviare dati senza stabilire connessioni (ad esempio per applicazioni client-server). Non viene quindi stabilita nessuna connessione e l’UDP si limita ad inviare i pacchetti sulla rete senza richiesta di conferma all’avvenuta ricezione, quindi non verifica se l’host di destinazione abbia o meno ricevuto le informazioni che gli sono state inviate. Il protocollo viene utilizzato da quelle applicazioni che inviano piccole quantità di dati o dove è necessario avere un’alta velocità di trasferimento (ad esempio nello streaming audio e video) e inoltre, contrariamente al TCP, l’UDP è in grado di supportare il multicast, ovvero l’invio di un’informazione ad un gruppo di destinatari Utilizza i numeri di porta in modo che un indirizzo IP specifico possa identificare un processo particolare: le porte UDP sono diverse dalle porte TCP. La trasmissione funziona così: • a priori l’host mittente conosce la porta e l’indirizzo IP del destinatario. • Il mittente invierà un pacchetto UDP (incapsulato in un datagramma IP) • Il pacchetto sarà ricevuto dal destinatario che al livello IP eseguirà un controllo ed estrapolerà il pacchetto arrivato per controllare che è un pacchetto UDP. • In seguito, prelevato il numero di porta, si eseguirà una verifica se sull’host ricevente la Destination port è in ascolto, in quel caso saranno recapitati i dati al livello successivo altrimenti sarà inviato un paccheto ICMP (Internet Control Message Protocol) all'host mittente con messaggio di port unreachable (porta irraggiungibile). L’header di un segmento UDP è molto semplice: Formato dello header UDP 7 dove: Source Port: campo di 16 bit (facoltativo), contiene la porta UDP di origine dell'host sorgente; Destination Port: campo di 16 bit, contiene la porta UDP di destinazione del pacchetto sull'host remoto; Lenght: campo di 16 bit, contiene la lunghezza in byte dell'intestazione UDP e dei dati; Checksum: campo di 16 bit, è utilizzato per verificare l'integrità dei dati trasportati; Dati: contiene il messaggio fornito dal livello applicativo. Gli unici servizi che UDP fornisce sono: - multiplazione/demultiplazione - rilevazione degli errori (tramite il calcolo del checksum sia dal mittente che dal ricevente, con successivo controllo) La funzione di calcolo del checksum può essere disattivata, tipicamente nel caso di traffico in tempo reale (come voce e video) per il quale è in genere più importante mantenere un elevato tasso di arrivo dei segmenti piuttosto che evitare i rari errori che possono accadere. NOTA: Attraverso un network sniffer è possibile visualizzare i vari campi di un pacchetto UDP. Un esempio: Source IP: 192.168.0.97 Target IP: 195.130.224.18 UDP Length: 27 Essendo UDP incapsulato in IP vediamo prima l'intestazione IP con gli indirizzi sorgente e destinazione e la dimensione Source Port: 33997 Target Port: 53 Leng: 35 ChkSum: 2342 Nell'header UDP troviamo la porta sorgente (33997) e la porta destinazione (53 - richiesta DNS) la dimensione (35) ed il checksum (2342) 00000000: 1A B4 01 00 00 01 00 00 00 00 00 00 09 6C 6F 63 ... Infine troviamo il campo dati Calcolo del Checksum L'header UDP è breve, ma contiene un metodo complicato per calcolare un checksum. Si considera il pacchetto come somma di parole di 16 bit, se il numero di byte nella sezione dati del pacchetto è dispari, il programma di calcolo aggiunge un byte di padding all- zero alla fine dei dati. Questo assicura che il pacchetto contiene completi parole di 16 bit. Successivamente, le parole da 16b bit vengono sommate a due a due, considerando i riporti, quindi viene fatto il complemento a 1 del risultato. Il programma ricevente esegue lo stesso calcolo. Se i risultati non sono gli stessi, il pacchetto viene scartato ma nessun messaggio di errore viene rispedito al mittente. Esempio: 8 sommando i riporti. Facendo quindi il complemento a 1 il checksum sarà: 1011010100111101 Il servizio di trasferimento affidabile (pag. 177) Un servizio si dice affidabile … abbiamo già parlato di finestre scorrevoli (studiare capitolo lezione 3 pagina 177-181) RTT, RTO … Un esempio di uso dei numeri di sequenza: una sessione telnet • • • Seq= Numero sequenza (numero del primo byte di dati nel segmento) Ris = Numero riscontro: (numero sequenza del prossimo byte che ci si aspetta dall'altro lato) Nell'esempio in figura, l'utente sul terminale A apre una sessione telnet. Ricordiamo che telnet è un protocollo di livello applicazione per il collegamento remoto che usa TCP come protocollo di livello trasporto. Dopo aver aperto la sessione telnet e quindi aver iniziato la connessione TCP avviene quanto segue: o L'utente sul terminale A digita la lettera W o B riceve W, spedisce il riscontro per (Ris = 106) e rispedisce anche W (per l'eco sul terminale) o A riceve W e rispedisce il riscontro 9
© Copyright 2024 Paperzz