Il Livello di Trasporto Crediti Parte delle slide seguenti sono adattate dalla versione originale di J.F Kurose and K.W. Ross (© 1996-2003 All Rights Reserved)
Servizi e protocolli di trasporto Forniscono la comunicazione logica tra processi applicativi eseguiti su host diversi I protocolli di trasporto “girano” sugli end system lato send: spezza i messaggi applicativi in segmenti e li passa al livello rete lato receive: riassembla i segmenti in messaggi e li passa al livello applicativo più di un protocollo di trasporto è disponibile per le applicazioni Internet: TCP e UDP application transport network data link physical network data link physical network data link physical network data link physical logical end-end transport network data link physical network data link physical application transport network data link physical
Livelli di trasporto e di rete Analogia delle famiglie: 12 fratelli mandano lettere a 12 cugini processi = fratelli messaggi appl. = lettere host = stabile protocollo di trasporto = portiere protocollo di rete = servizio postale livello di rete: comunicazione logica tra host livello di trasporto: comunicazione logica tra processi es. si poggia su ed arricchisce i servizi del livello di rete
Protocolli di trasporto in Internet consegna affidabile e in ordine: TCP spedizione dati tra processi verifica errori controllo della congestione controllo di flusso connection setup consegna non affidabile e non in ordine: UDP servizi non disponibili garanzie sui ritardi garanzie sulla banda application transport network data link physical network data link physical network data link physical network data link physical logical end-end transport network data link physical network data link physical application transport network data link physical
Multiplexing e Demultiplexing Più processi => una rete Multiplexing al send host: Demultiplexing al recv host: consegna dei segmenti ricevuti alla socket corretta collezione dei dati dalle varie socket, aggiunta dell’header (utilizzato dal demultiplexing) application-layer data segment header = socket = processo application transport network link physical application transport network link physical application transport network link physical P3 P1 P2 P4 M segment H t M H n segment host 1 host 2 host 3
Come funziona il demultiplexing l’host riceve i datagram IP ogni datagram contiene gli indirizzi IP di sorgente e destinazione ogni datagram trasporta 1 segmento del livello di trasporto ogni segmento contiene i port di sorgente e destinazione l’host usa i port IP per inoltrare il segmento alla socket appropriata per le applicazioni “classiche” si usano i “well-known” port 32 bits source port # dest port # other header fields application data (message) Formato segmento TCP/UDP
Connectionless demultiplexing Quando un host riceve un segmento UDP: controlla il destination port nel segmento dirige il segmento UDP alla socket con quel port Datagram IP con differenti indirizzi e/o port sorgenti vengono inoltrati alla stessa socket Creazione socket: socket(AF_INET,SOCK_DGRAM,0); Binding del port (server): bind(sock, &server, sizeof(server)) Allocazione dinamica del port (client): sendto (sock, &buf, len, flags, &addr, addrlen); UDP socket identificata dalla coppia: (dest IP address, dest port number)
Connectionless demux (cont.) Crea server socket = sock Bind sock al port 6428 Client IP:B P3 client IP: A P1 server IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 DP: 5775 SP: 5775 SP fornisce il “return address”
Connection-oriented demux Socket TCP identificata da una quadrupla: source IP address source port number dest IP address dest port number L’host ricevente utilizza tutti e quattro i valori per dirigere il segmento alla socket appropriata Server : listen su un port definito Client: connect al server sul port conosciuto bit di connessione settato nell’header TCP Server: accept e crea nuova socket Il server annota i quattro parametri della connessione Un server può supportare più socket TCP simultanee: ogni socket identificata dalla sua quadrupla
Connection-oriented demux (cont.) I web server hanno socket differenti per ogni client HTTP non-persistenti avranno socket differenti per ogni richiesta