Strato di trasporto Obiettivi:! Comprendere i principi dei servizi dello strato di trasporto: " multiplexing/demultipl exing " Trasferimento affidabile dei dati " Controllo di flusso " Controllo di congestione! Implementazione in Internet Argomenti:! Servizi dello strato di trasporto! multiplexing/demultiplexing! Servizio senza connessione: UDP! Principi di trasporto affidabile! Servizio orientato alla connessione: TCP " Trasferimento affidabile " Controllo di flusso " Gestione della connessione! Aspetti generali del controllo della congestione! Controllo della congestione in TCP 3: Transport Layer 3a-1 Protocolli e servizi di trasporto! Creare un canale logico tra processi su host diversi! I protocolli di trasporto sono presenti sui sistemi terminali! Servizi di trasporto vs servizi di rete:! Strato di rete: trasferimento dati tra sistemi terminali! Strato di trasporto: trasferimento dati tra processi " Usa e integra (possibilmente migliorandoli) i servizi dello strato di rete application transport Canale logico end-to-end application transport 3: Transport Layer 3a-2
Protocolli di trasporto Servizi di trasporto in Internet:! Trasporto affidabile in ordine uno a uno (unicast): TCP " Congestione " Controllo di flusso " Instaurazione di connessione! Trasporto non affidabile e non in ordine uno a uno o uno a molti (multicast): UDP! Servizi non disponibili: " Real-time " Garanzia di banda application transport Trasporto logico end-to-end application transport 3: Transport Layer 3a-3 Multiplexing/demultiplexing Segmento unità dati scambiata tra entità di trasporto (4-PDU) segmento " TPDU: transport protocol data unit Messaggio-strato applicativo header Del segmento Ht M Hn segmento P1 M application transport P3 Demultiplexing: consegna dei segmenti ricevuti all applicazione cui sono destinati ricevente M M application transport P4 M P2 application transport 3: Transport Layer 3a-4
Multiplexing/demultiplexing (2) Multiplexing: Raccolta di dati provenienti Da applicazioni diverse e Aggiunta di header (usati per il demultiplexing) multiplexing/demultiplexing:! Basato sui numeri di porta sorgente e destinazione e sull indirizzo IP " source, dest port #s in ogni segmento " Nota: esistono numeri di porta riservati a particolari applicazioni (well-known port numbers, es. 80 o 21) 32 bit source port # dest port # Altri campi dell header application data (messaggio) Formato segmenti TCP/UDP 3: Transport Layer 3a-5 Multiplexing/demultiplexing: Esempi host A source port: x dest. port: 23 server B Client Web host C source port:23 dest. port: x Applicazione: telnet Source IP: C Dest IP: B source port: y dest. port: 80 Source IP: C Dest IP: B source port: x dest. port: 80 Client Web host A Source IP: A Dest IP: B source port: x dest. port: 80 Web server B Applicazione: Web server 3: Transport Layer 3a-6
UDP: User Datagram Protocol [RFC 768]! Protocollo di trasporto senza fronzoli! Servizio best effort, i segmenti UDP possono: " Andare persi " Essere consegnati fuori ordine! Senza connessione (connectionless): " Non viene scambiata informazione di controllo tra mittente e ricevente (handshaking) " Ogni segmento UDP è trattato in modo indipendente dagli altri Perché esiste UDP?! Non si instaura una connessione (si evitano i ritardi relativi)! Semplice: non serve informazione di stato! Header dei segmenti piccolo! Nessun controllo di congestione: UDP va alla massima velocità possibile (adatto per applicazioni real time) 3: Transport Layer 3a-7 UDP (2)! Spesso usato per streaming multimediale " Tollerante alle perdite " Sensibile alla velocità di trasferimento! Altri usi dell UDP: " DNS " SNMP! Trasporto affidabile su UDP: l affidabilità va conseguita a livello applicativo " La gestione di condizioni di errore dipende dall applicazione! Lunghezza, compreso header 32 bit source port # dest port # length Application data (messaggio) checksum Formato segmento UDP 3: Transport Layer 3a-8
Checksum UDP Obiettivo: trovare errori (es., bit invertiti) nel segmento trasmesso Mittente:! I contenuti del segmento sono trattati come interi a 16 bit! checksum: somma dei contenuti del segmento + complemento a 1! Il mittente mette il valore del checksum nel campo relativo Ricevente:! Si calcola il checksum sui contenuti del segmento ricevuto! Confronto tra il risultato e il contenuto del campo checksum: " NO trovato errore (valori diversi) " YES nessun errore trovato (ciò non significa che non ve ne siano) 3: Transport Layer 3a-9 Trasporto affidabile (principi)! Di fondamentale importanza negli strati applicativi, di trasporto e di collegamento!! Le caratteristiche del canale determinano la complessità del protocollo di trasporto affidabile reliable data transfer (rdt) 3: Transport Layer 3a-10
Trasferimento affidabile (generalità) rdt_send(): chiamata da sopra, (es. app.). Dati da inviare deliver_data(): invocata da rdt per consegnare i dati Mittente (sender) Ricevente (receiver) udt_send(): chiamata da rdt per trasferire i dati sul canale non affidabile rdt_rcv(): chiamata quando un pacchetto arriva al lato ricezione del canale 3: Transport Layer 3a-11 Generalità (2)! Sviluppo incrementale dei lati mittente e ricevente del protocollo affidabile (rdt)! Flusso unidirezionale dei dati (per semplicità) " Flusso di controllo in entrambe le direzioni!! Macchina a stati finiti (FSM) per modellare mittente e ricevente Stato: se in questo stato, lo stato successivo è determinato solo da evento Stato 1 Evento che causa una transizione Azioni corrispondenti Evento Azioni Stato 2 3: Transport Layer 3a-12
Rdt1.0: canale affidabile! Canale già affidabile " Nessun errore sui bit trasmessi " Nessuna perdita di pacchetti! FSM distinte per mittente e ricevente: " Mittente invia dati nel canale " Ricevente legge dati dal canale 3: Transport Layer 3a-13 Rdt2.0: canale con errori sui bit! Il canale non affidabile può invertire bit " Si ricordi: checksum UDP serve a individuare errori sui bit! Domanda: come reagire agli errori (scoperti): " Acknowledgement (ACK): il ricevente comunica esplicitamente che pacchetto OK " Negative acknowledgement (NAK): il ricevente comunica esplicitamente che pacchetto ha avuto errori " Il mittente ritrasmette un pacchetto se riceve NAK! Nuovi meccanismi in rdt2.0 (oltre rdt1.0): " Individuazione di errori " Riscontro del ricevente: messaggi di controllo (ACK,NAK) ricevente->mittente (ARQ) 3: Transport Layer 3a-14
rdt2.0: specifica della FSM FSM mittente FSM ricevente 3: Transport Layer 3a-15 rdt2.0 in azione (no errori) sender FSM receiver FSM 3: Transport Layer 3a-16
rdt2.0 in azione (errori) sender FSM receiver FSM 3: Transport Layer 3a-17 rdt2.0 ha un difetto (flaw) fatale! Cosa succede se ACK/NAK corrotti?! Il mittente non sa cosa è successo al ricevente!! Non si può semplicemente ritrasmettere: possibilità di pacchetti duplicati Cosa fare?! Mittente riscontra ACK/NAK del ricevente. Cosa succede se questi ACK/NAK persi?! La ritrasmissione potrebbe causare il reinvio di un pacchetto correttamente consegnato! Gestione duplicati:! Il mittente aggiunge numero di sequenza (sequence number) a ciascun pacchetto! Mittente ritrasmette pacchetto se ACK/NAK con errori! Il ricevente distrugge (non consegna) pacchetti duplicati stop and wait Il mittente invia un pacchetto e aspetta la risposta 3: Transport Layer 3a-18
rdt2.1:(mittente): gestione errori negli ACK/NAK 3: Transport Layer 3a-19 rdt2.1 (ricevente): gestione errori negli ACK/NAK 3: Transport Layer 3a-20
rdt2.1: osservazioni Mittente:! # seq per ogni pacchetto! Due # seq. (0,1) sono sufficienti. Perché?! Controllo: ACK/NAK ricevuto è corrotto?! Numero doppio di stati " Lo stato deve memorizzare se il pacchetto corrente ha # seq. 0 o 1 Ricevente:! Necessità di verificare se un pacchetto ricevuto è duplicato " Lo stato indica se il # seq. atteso sia 0 o 1 " Nota: il ricevente non sa se l ultimo ACK/NAK spedito sia stato ricevuto senza errori dal mittente 3: Transport Layer 3a-21 rdt2.2: protocollo privo di NAK (NAK-free)! Stesse funzionalità di rdt2.1, ma solo ACK! Invece di un NAK, il ricevente invia ACK per l ultimo pacchetto ricevuto correttamente! Il ricevente deve esplicitamente includere nell ACK # seq del pacchetto confermato! ACK duplicato al mittente ha lo stesso significato di un NAK: ritrasmetti il pacchetto corrente! FSM mittente 3: Transport Layer 3a-22
rdt3.0: canale con errori e perdita Nuova assunzione: il canale può perdere pacchetti (dati o ACK) " checksum, # seq., ACK, ritrasmissioni non bastano D: come trattare la perdita? " Il mittente aspetta fino ad essere certo che il pacchetto sia andato perso, poi ritrasmette " Svantaggi? Approccio: il mittente attende per un intervallo ragionevole l arrivo di un ACK! Ritrasmette se un ACK non è ricevuto entro l intervallo! Se il pacchetto (o ACK) solo ritardato (non perso): " La ritrasmissione sarà un duplicato, ma l uso di # seq gestisce ciò " Il ricevente deve indicare il # seq del pacchetto riscontrato! È necessario un timer 3: Transport Layer 3a-23 rdt3.0 mittente Nota: le ritrasmissioni avvengono all frequenza del timer Si riferisce ad ack che giungono in ritardo 3: Transport Layer 3a-24
rdt3.0 in azione 3: Transport Layer 3a-25 rdt3.0 in azione (cont.) 3: Transport Layer 3a-26
Prestazioni di rdt3.0! rdt3.0 funziona, ma le prestazioni non sono buone! Esempio: link da 1 Gbps, ritardo prop. end-to-end 15 ms, pacchetto da 1KB: T trasm = 8Kb/pkt 10**9 b/sec = 8 microsec % di tempo mitt. Fatt. Uso = U = = 8 microsec occupato (busy) 30.016 msec = 0.00015 " Pacchetto da 1KB ogni 30 msec -> throughput 33kB/sec su link da 1 Gbps " Il protocollo limita l uso delle risorse fisiche! 3: Transport Layer 3a-27 Protocolli con pipeline (pipelined) Pipelining: il mittente invia più pacchetti, senza attendere l acknowledgement dei pacchetti precedenti! L intervallo dei numeri di sequenza va aumentato " Buffering dei pacchetti al mittente e/o ricevente! Sliding window: Go-Back-N, Selective Repeat 3: Transport Layer 3a-28
Go-Back-N Mittente:! Numero di sequenza a k-bit nell header del pacchetto! Finestra (window) di (max.) N, pacchetti consecutivi non confermati! ACK(n): conferma tutti i pacchetti, fino a (e incluso) quello con numero di sequenza n - ACK cumulativo! Timer unico per il blocco di pacchetti non confermati ( inflight )! timeout(n): ritrasmetti il pacchetto n e tutti quelli con numero di sequenza più alto nella finestra 3: Transport Layer 3a-29 GBN: FSM estesa (mittente) Nota: timer associato alla variabile base 3: Transport Layer 3a-30
GBN: FSM estesa (ricevente) Ricevente semplice:! Solo ACK: si invia sempre l ACK per il pacchetto con numero di sequenza più alto (mod N) tra quelli correttamente ricevuti! Si possono avere ACK duplicati " È sufficiente memorizzare expectedseqnum al lato ricevente! Pacchetti non in ordine (out-of-order): " Getta (discard), nessun buffering al lato ricezione! " ACK per il pacchetto con numero di sequenza più alto tra quelli ricevuti in ordine 3: Transport Layer 3a-31 GBN in azione 3: Transport Layer 3a-32
Selective Repeat! Il ricevente conferma singolarmente tutti i pacchetti correttamente ricevuti " Memorizza i pacchetti ricevuti per l invio in ordine verso gli strati superiori! Il mittente ritrasmette solamente i pacchetti per cui non ha ricevuto acknowledgement " Il mittente ha un timer per ogni pacchetto non confermato! Finestra del mittente " N numeri di sequenza consecutivi " Come con Go-Back-N si limita il numero di pacchetti trasmessi e non confermati 3: Transport Layer 3a-33 Selective repeat: finestre sender, receiver 3: Transport Layer 3a-34
Selective repeat (cont.) Mittente Dati dall alto :! Se prossimo # seq. disponibile cade nella finestra invia pacchetto timeout(n):! Rimanda pacchetto n, riavvia timer pacchetto n ACK(n) in [sendbase,sendbase+n]:! Marca (mark) pacchetto n come ricevuto! Se n = sendbase, avanza (slide) la base della finestra fino al più piccolo pacchetto non confermato Ricevente n in [rcvbase, rcvbase+n-1]! invia ACK(n)! out-of-order: memorizza (buffer)! in-order: consegna tutti I pacchetti in ordine, avanza rcvbase fino al prossimo pacchetto previsto! n in [rcvbase-n,rcvbase-1]: ACK(n) Altrimenti:! Ignora 3: Transport Layer 3a-35 Selective repeat in azione 3: Transport Layer 3a-36
Selective repeat: dilemma Esempio:! # seq.: 0, 1, 2, 3! Dim. Finestra (window size)=3! Il ricevente non nota differenze tra i due casi!! Erroneamente considera il pacchettoduplicato come nuovo (a) Q: che relazione tra intervallo # seq. e dimensione finestra? 3: Transport Layer 3a-37