Programmazione in Rete a.a. 2005/2006 http://www.di.uniba.it/~lisi/courses/prog-rete/prog-rete0506.htm dott.ssa Francesca A. Lisi lisi@di.uniba.it Orario di ricevimento: mercoledì ore 10-12
Sommario della lezione di oggi: Lo strato di trasporto (1/2) Servizi e protocolli dello strato di trasporto Multiplazione e demultiplazione delle applicazioni Trasporto senza connessione: UDP Trasporto con connessione: TCP Il controllo della congestione nel TCP dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 2
Strato di trasporto: Servizi e protocolli I protocolli di trasporto: forniscono comunicazione logica fra processi applicativi in esecuzione su host distinti sono in esecuzione sui terminali servizi dello strato di transporto vs servizi dello strato di rete: strato di rete: trasferimento dati fra terminali strato di trasporto: trasferimento dati fra processi (basandosi su servizi dello strato di rete) analogia del servizio postale! application transport network data link physical network data link physical logical end-end transport network data link physical network data link physical network data link physical network data link physical application transport network data link physical dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 3
Strato di trasporto: Servizi e protocolli (cont.) ServiziditrasportoInternet: consegna affidabile, in-order eunicast(tcp) controllo della congestione controllo del flusso setup della connessione consegna inaffidabile ( besteffort ), disordinata e unicast o multicast: UDP servizi non disponibili: real-time garanzie sull ampiezza di banda multicast affidabile application transport network data link physical network data link physical logical end-end transport network data link physical network data link physical network data link physical network data link physical application transport network data link physical dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 4
Multiplexing/demultiplexing Demultiplexing nell host ricevente: consegnare i segmenti ricevuti alla socket appropriata Multiplexing nell host mittente: raccogliere i dati dalle socket associate ad un processo ed incapsularli con l intestazione (utilizzati poi per il demultiplexing) = socket = processo applicazione P3 P1 P1 applicazione P2 P4 applicazione trasporto trasporto trasporto rete rete rete collegamento collegamento collegamento fisico fisico fisico host 1 host 2 host 3 dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 5
Demultiplexing: come funziona L host riceve i datagrammi IP ogni datagramma ha un indirizzo IP di origine e un indirizzo IP di destinazione ogni datagramma trasporta 1 segmento a livello di trasporto ogni segmento ha un numero di porta di origine e un numero di porta di destinazione L host usa gli indirizzi IP e i numeri di porta per inviare il segmento alla socket appropriata N porta origine 32 bit N porta destinazione Altri campi dell intestazione Dati dell applicazione (messaggio) Struttura del segmento TCP/UDP dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 6
Demultiplexing senza connessione Crea le socket con i numeri di porta: DatagramSocket mysocket1 = new DatagramSocket(99111); DatagramSocket mysocket2 = new DatagramSocket(99222); La socket UDP è identificata da 2 parametri: (indirizzo IP di destinazione, numero della porta di destinazione) Quando l host riceve il segmento UDP: controlla il numero della porta di destinazione nel segmento invia il segmento UDP alla socket con quel numero di porta I datagrammi IP con indirizzi IP di origine e/o numeri di porta di origine differenti vengono inviati alla stessa socket dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 7
Demultiplexing senza connessione (cont.) DatagramSocket serversocket = new DatagramSocket(6428); P2 P3 P1P1 SP: 6428 DP: 9157 SP: 6428 DP: 5775 SP: 9157 SP: 5775 client IP: A DP: 6428 server IP: C DP: 6428 client IP: B SP fornisce l indirizzo di ritorno dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 8
Demultiplexing con connessione La socket TCP è identificata da 4 parametri: indirizzo IP di origine numero di porta di origine indirizzo IP di destinazione numero di porta di destinazione L host ricevente usa i quattro parametri per inviare il segmento alla socket appropriata Un host server può supportare più socket TCP contemporanee: ogni socket è identificata dai suoi 4 parametri N.B. I server WWW hanno socket differenti per ogni connessione client con HTTP non-persistente si avrà una socket differente per ogni richiesta dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 9
Demultiplexing con connessione (cont.) P1 P4 P5 P6 P2 P1P3 SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 SP: 9157 client IP: A DP: 80 S-IP: A D-IP:C WWW server IP: C DP: 80 S-IP: B D-IP:C client IP: B dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 10
Trasporto senza connessione: UDP [RFC 768] Protocollo di trasporto senza fronzoli per Internet servizio best effort, i segmenti UDP possono: andare persi essere consegnati in disordine senza connessione: niente handshaking fra mittente e destinatario ogni segmento gestito indipendentemente dagli altri Perché esiste un UDP? Nessun ritardo dovuto al setup di connessione semplicità dovuta ad assenza di stato di connessione breve intestazione del segmento nessun controllo di congestione: UDP può sparare a raffica con velocità desiderata dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 11
UDP: struttura del segmento Spesso usato per far scorrere applicazioni multimediali tollerante alla perdita di dati sensibile alla velocità di trasmissione altri usi di UDP: DNS SNMP affidabilità su UDP va gestita a livello applicativo (politica di recupero degli errori) Lunghezza in byte del segmento UDP, inclusa intestazione 32 bits source port # dest port # length Application data (message) checksum Formato del segmento UDP dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 12
UDP: il checksum Obiettivo: rilevare errori nel segmento trasmesso Mittente: tratta i contenuti del segmento come una sequenza di interi a 16 bit checksum: somma (in complemento ad 1) dei contenuti del segmento il mittente pone il valore di checksum nel campo UDP checksum Destinatario: calcola il checksum del segmento ricevuto controlla se il checksum calcolato equivale al valore del campo UDP checksum : NO - errore rilevato YES - nessun errore rievato. Ma potrebbero esserci errori comunque? Lo vedremo più in là. dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 13
Trasporto con connessione: TCP [RFC 793, 1122, 1323, 2018, 2581] socket door punto-a-punto: un mittente, un ricevente byte stream affidabile ed in ordine: no message boundaries buffer di invio e ricezione application writes data TCP send buffer segment application reads data TCP receive buffer full duplex: flusso dati bi-direzionale nella stessa connessione MSS: maximum segment size connection-oriented: handshaking (scambio di msg di controllo) inizializza stato di mittente/ricevente prima di scambio dati flow-controlled: socket door mittente non inonderà ricevente dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 14
TCP: struttura del segmento URG: dati urgenti (generalmente non usato) ACK: nro ACK valido PSH: push data now (generalmente non usato) RST, SYN, FIN: connection estab (setup, teardown commands) Internet checksum (come in UDP) 32 bits source port # dest port # head len sequence number acknowledgement number not used UAP R S F checksum rcvr window size ptr urgent data Options (variable length) application data (variable length) conteggio per byte di dati (non segmenti!) # byte che il ricevente è disposto ad accettare dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 15
TCP: numeri di sequenza e riscontri Numeri di sequenza: numero all interno del flusso del primo byte nel segmento Numeri di riscontro: num. del prossimo byte atteso dall altro lato ACK cumulativi Q: come gestire segmenti in disordine? Soluzione spetta all implementatore del TCP User types C host ACKs receipt of echoed C Host A Host B Seq=42, ACK=79, data = C Seq=79, ACK=43, data = C Seq=43, ACK=80 Semplice scenario telnet host ACKs receipt of C, echoes back C time dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 16
Trasferimento dati affidabile nel TCP: eventi del mittente Dati ricevuti dall applicazione: Crea un segmento con il numero di sequenza Il numero di sequenza è il numero del primo byte del segmento nel flusso di byte Avvia il timer, se non è già in funzione (pensate al timer come se fosse associato al più vecchio segmento non riscontrato) Intervallo di scadenza: TimeOutInterval Timeout: Ritrasmette il segmento che ha causato il timeout Riavvia il timer Ricezione di ACK: Se riscontra segmenti precedentemente non riscontrati aggiorna ciò che è stato completamente riscontrato avvia il timer se ci sono altri segmenti da completare dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 17
Trasferimento dati affidabile nel TCP: una modellazione FSA del mittente event: data received from application above create, send segment wait for event event: timer timeout for segment with seq # y retransmit segment event: ACK received, with ACK # y ACK processing dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 18
Trasferimento dati affidabile nel TCP: implementazione semplificata del mittente Assunzioni: Trasferimento dati ad una via nessun controllo di flusso e di congestione Commento: SendBase-1: ultimo byte cumulativamente riscontrato Esempio: SendBase-1 = 71; y = 73, quindi il destinatario vuole 73+ ; y > SendBase, allora vengono riscontrati tali nuovi dati dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 19
Trasferimento dati affidabile nel TCP: scenario n.1 dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 20
Trasferimento dati affidabile nel TCP: scenario n.2 dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 21
Trasferimento dati affidabile nel TCP: scenario n.3 dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 22
Trasferimento dati affidabile nel TCP: stima del timeout D: come impostare il valore di timeout? + lungo di RTT N.B. RTT varierà se troppo breve, timeout prematuro ritrasmissioni non necessarie se troppo lungo, reazione lenta alla perdita del segmento D: come stimare RTT? SampleRTT: tempo misurato dalla trasmissione del segmento fino alla ricezione di ACK ignora ritrasmissioni, segmenti cumulativamente riconosciuti SampleRTT varierà, vuole il RTT stimato + dolce usa diverse misure recenti, non solo attuale SampleRTT dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 23
Trasferimento dati affidabile nel TCP: stima del timeout (cont.) EstimatedRTT = (1-x)*EstimatedRTT + x*samplertt Media esponenziale mobile pesata influenza di un certo campione decresce esponenzialmente valore tipico di x: 0.1 Impostare il timeout EstimatedRTT + margine di sicurezza variazione larga in EstimatedRTT -> + largo margine di sicurezza Timeout = EstimatedRTT + 4*Deviation Deviation = (1-x)*Deviation + x* SampleRTT-EstimatedRTT dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 24
Trasferimento dati affidabile nel TCP: generazione di ACK [RFC 1122, 2581] Evento nel destinatario Azione del ricevente TCP Arrivo ordinato di un segmento con numero di sequenza atteso. Tutti i dati fino al numero di sequenza atteso sono già stati riscontrati. Arrivo ordinato di un segmento con numero di sequenza atteso. Un altro segmento è in attesa di trasmissione dell ACK. Arrivo non ordinato di un segmento con numero di sequenza superiore a quello atteso. Viene rilevato un buco. ACK ritardato. Attende fino a 500 ms l arrivo del prossimo segmento. Se il segmento non arriva, invia un ACK. Invia immediatamente un singolo ACK cumulativo, riscontrando entrambi i segmenti ordinati. Invia immediatamente un ACK duplicato, indicando il numero di sequenza del prossimo byte atteso. Arrivo di un segmento che colma parzialmente o completamente il buco. Invia immediatamente un ACK, ammesso che il segmento cominci all estremità inferiore del buco. dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 25
Trasferimento dati affidabile nel TCP: ritrasmissione rapida Il periodo di timeout spesso è relativamente lungo: lungo ritardo prima di ritrasmettere il pacchetto perduto. Rileva i segmenti perduti tramite gli ACK duplicati. Il mittente spesso invia molti segmenti. Se un segmento viene smarrito, è probabile che ci saranno molti ACK duplicati. Se il mittente riceve 3 ACK per lo stesso dato, suppone che il segmento che segue il dato riscontrato è andato perduto: ritrasmissione rapida: rispedisce il segmento prima che scada il timer. dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 26
Trasferimento dati affidabile nel TCP: ritrasmissione rapida (cont.) evento: ACK ricevuto, con valore del campo ACK pari a y if (y > SendBase) { SendBase = y if (esistono attualmente segmenti non ancora riscontrati) avvia il timer } else { incrementa il numero di ACK duplicati ricevuti per y if (numero di ACK duplicati ricevuti per y = 3) { rispedisci il segmento con numero di sequenza y } un ACK duplicato per un segmento già riscontrato ritrasmissione rapida dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 27
Controllo di flusso nel TCP Controllo di flusso Il mittente non prevaricherà i buffer del ricevente trasmettendo troppo e troppo veloce RcvBuffer = grandezza del TCP Receive Buffer RcvWindow = ammontare di spazio libero in Buffer ricevente: informa esplicitamente il mittente di (dinamicamente mutevole) ammontare di spazio libero di buffer campo RcvWindow nel segmento TCP mittente: tiene l ammontare dei dati trasmessi e non ancora riscontrati inferiore del RcvWindow più recentemente ricevuto receiver buffering dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 28
Gestione della connessione TCP: apertura della connessione Ricorda: sender e receiver TCP stabiliscono una connessione prima di scambiarsi i segmenti inizializzano le variabili TCP: numeri di sequenza buffer, info su controllo di flusso (e.g. RcvWindow) client: iniziatore della connessione Socket clientsocket = new Socket("hostname","port number"); server: contattato dal client Socket connectionsocket = welcomesocket.accept(); Handshake a tre vie: Step 1: il client invia SYN al server, specificando il numero iniziale di sequenza Step 2: il server riceve SYN, replica con SYNACK riconosce SYN ricevuto alloca buffer specifica il proprio numero iniziale di sequenza Step 3: riscontro finale dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 29
Gestione della connessione TCP: apertura della connessione (cont.) dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 30
Gestione della connessione TCP: chiusura della connessione Step 1: il client chiude il proprio socket, invia FIN al server Step 2: il server riceve FIN, replica con ACK, chiude il proprio socket, invia FIN. Step 3: il client riceve FIN, replica con ACK, e si pone nel timed wait close client FIN ACK FIN server close Step 4: il server riceve ACK. Connection closed. Nota: con piccole modifiche può gestire FIN simultanei timed wait closed ACK dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 31
Gestione della connessione TCP: ciclo di vita del lato client dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 32
Gestione della connessione TCP: ciclo di vita del lato server dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 33
Sommario della prossima lezione: Lo strato di trasporto (2/2) Servizi e protocolli dello strato di trasporto Multiplazione e demultiplazione delle applicazioni Trasporto senza connessione: UDP Trasporto con connessione: TCP Il controllo della congestione nel TCP dott.ssa F. A. Lisi - Programmazione in Rete Livello di trasporto (1/2) 34