Reti di Telecomunicazioni R. Bolla, L. Caviglione, F. Davoli Livello di trasporto e TSAP Three-way handshake Incarnation numbers TCP e UDP 39.2 Sessione T_CONNECT, T_DISCONNECT T_DATA, T_EXP_DATA T_UNITDATA Trasporto N_CONNECT, N_RESET, T_DISCONNECT, N_DATA, N_ACK, N_EXP_DATA N_UNITDATA, N_ERROR Orientati alla conn. (TP4, 8072/3; TCP) Non orientati (UDP) Frammentazione, multiplexing, risequenzializzazione, controllo di flusso endto-end VC (X.25, 8347/8) Datagram (IP, 8472/3) Rete 39.3 TSAP Down Multiplexing (aumenta il throughput) 5 Messaggi 5 4 TPDU 4 NSAP Up Multiplexing (limita il numero di VC) 39.4 Process server Applicazione k m Processo desiderato n (1) (2) (3) 39.5 Service user Trasport Layer T_CONNECT request Connection Request CR T_CONNECT confirm Service user T_CONNECT indication Connection Confirm CC ACK T_CONNECT response 39.6 Due delle ragioni principali per le quali si usa il threeway handshake sono: se il trasmettitore va in crash dopo aver trasmesso il CR, il ricevitore attenderebbe per sempre; l’uso dell’ACK unitamente ad un timeout sulla CC evita questa situazione se un duplicato della CR arriva in ritardo quando la connessione a cui era riferita è già stata chiusa, il ricevitore invia la CC restando in attesa di un ACK; il trasmettitore può inviare un DR (Disconnect Request). 39.7 0, OPEN 0, OPEN 0, ACK0, OPEN 1 , ACK1 2, ACK1, DATA2 2, ACK1, DATA2 2 , ACK2 0, ACK0, OPEN Connection closed 1, ACK0, DATA1 1, ACK0, DATA1 1 , ACK1 2 , ACK2 Accettata 2, ACK1, DATA2 Scartata 39.8 0, OPEN, ID1 0, OPEN, ID3 0, ACK0, ID1, OPEN, ID2 1 , ACK1, ID1 2, ACK1, ID2 , DATA2, ID1 2, ACK1, ID2, DATA2, ID1 2 , ACK2, ID1 Connection closed 0, ACK0, ID3, OPEN, ID4 1, ACK0, ID2, DATA1, ID1 1, ACK0, ID4, DATA1, ID3 1 , ACK1, ID3 Scartata 2, ACK1, ID4, DATA2, ID3 2 , ACK2, ID3 39.9 Per identificare la connessione I protocolli di trasporto ISO usano dei reference numbers, scelti dai due lati della connessione; TCP usa i numeri di sequenza iniziali; In entrambi i casi, si fa in modo da ritardare il riuso per un tempo sufficientemente lungo. 39.10 Service user T_CLOSE request Transport Layer Service user Disconnect Request DR DC T_CLOSE indication Disconnect Confirm 39.11 Il TCP (Transmission Control Protocol) è il principale protocollo del livello di trasporto della Architettura DoD. È un protocollo orientato alla connessione, con capacità di recupero di errore, controllo di flusso e di sequenza. 39.12 0 4 8 16 Source Port 19 24 31 Destination Port Sequence Number Acknowledgement Number HLEN Reserved Window Code Bits Checksum Urgent Pointer Options Padding Data Code Bits: URG-ACK-PSH-RST-SYN-FIN 39.13 Service user Service provider UNSPECIFIED_ PASSIVE_OPEN. request OPEN_ID.confirm Network (segments) Service user ACTIVE_ OPEN.request SYN, ISN = X SYN, ISN = Y, ACK X+1 OPEN_ SUCCESS.confirm Service provider ACK Y+1 OPEN_ID.confirm OPEN_ SUCCESS.confirm 39.14 A differenza dei protocolli del TP4 ISO, TCP non ha il concetto TSDU, ma è un protocollo stream-oriented; TCP considera i dati come una sequenza di byte, che divide a sua scelta in “segmenti”. Il controllo di flusso è del tipo sliding window, ma la larghezza della finestra è variabile dinamicamente. 39.15 Il TCP fornisce al livello di applicazione due tipologie di servizi: Controllo di flusso: elimina la possibilità che il trasmettitore saturi il buffer in ricezione del ricevitore Controllo di congestione: gestisce le situazioni di traffico critiche all’interno della rete 39.16 Per realizzare un meccanismo di controllo di flusso il TCP mantiene all’interno del sender una variabile detta finestra di ricezione (receiver window, rwind) Dà un’idea al trasmettitore di quanto spazio ci sia all’interno del buffer del ricevente Tale quantità è dinamica e varia durante il tempo di una connessione 39.17 Per gestire informazioni sulla congestione, il TCP utilizza una variabile denominata finestra di congestione (congestion window, cwind). Costituisce una limitazione addizionale alla quantità di traffico che un host può inviare in rete. Deve valere la seguente relazione: 39.18 Le quantità dettate dalla dinamica degli algoritmi del TCP devono sempre essere “validate”. Occorre quindi verificare che i buffer disponibili al TCP possano contenere la quantità di dati associati alle varie finestre. Inoltre, mediante l’uso della Advertised Window, le due entità coinvolte nella comunicazione si scambiano informazioni sullo spazio gestibile nei buffer 39.19 Poiché la risorsa disponibile per la trasmissione non è nota a priori, il TCP adotta un meccanismo per “sondare” il canale. Tale procedura è denominata Slow Start e permette di eseguire un probing del canale. Consiste nell’introduzione graduale del traffico in rete. È specificata nel documento RFC 2581 39.20 Il principio su cui si basa lo Slow Start è semplice: mediante l’osservazione del traffico di riscontro (flusso di ACK) adatta la trasmissione del traffico dati. Questo viene denominato comportamento selfclocking del TCP Per la sua realizzazione occorre aggiungere al TCP: una variabile di controllo per la finestra, denominata congestion window (cwnd) una variabile di gestione, denominata slow start threshold (sstresh) 39.21 L’evoluzione dell’algoritmo è la seguente: Si inizia trasmettendo una quantità minima Ad ogni ACK (dei byte di una finestra) ricevuto si raddoppia la finestra In realtà, l’algoritmo di slow start opera in sinergia con un altro algoritmo, denominato congestion avoidance. Congestion avoidance permette di incrementare la finestra di trasmissione in modo lineare, consentendo una evoluzione del traffico meno aggressiva. Solitamente si denomina questa tecnica come Slow Start with Congestion Avoidance 39.22 Per ogni ricezione di un ACK (di un segmento) l’algoritmo opera come segue: if (cwnd < ssthresh) cwnd += 1 (incremento moltiplicativo) else cwnd += 1/cwnd (incremento lineare) Nel caso in cui si abbia un time-out: ssthresh=cwnd/2; cwnd=1 (reset dell’algoritmo) 39.23 Lo Slow Start permette dunque: Se la rete consente una trasmissione rapida la dinamica dell’algoritmo non introduce un ritardo elevato. Se la rete è in situazione di congestione, l’introduzione della fase di slow start permette di non aggravarla, ma la sua dinamica diviene preponderante nell’evoluzione del TCP. Si noti come il RTT sia critico per questo algoritmo: è questo il motivo principale della scarsa efficienza del TCP nelle tratte satellitari (RTT elevato) 39.24 Il TCP basa buona parte del suo funzionamento su meccanismi di time-out. A tal proposito, i valori di time-out devono essere tarati al fine di non essere troppo brevi o troppo lunghi. Il TCP utilizza un algoritmo per la stima del RTT del canale. Tale algoritmo è denominato algoritmo di Jacobson (RFC 793) 39.25 In realtà si adotta il SRTT (Smoothed Round Trip Time), ovvero una media di tutti i valori di RTT collezionati fino al presente istante. Nel TCP originale (definito nel documento RFC 793) il time-out per la ritrasmissione (denominato RTO – Retransmission Time Out) veniva posto uguale proprio allo SRTT 39.26 Algoritmo di Jacobson, per la stima della media: Algoritmo di Jacobson, per la stima della varianza: Tipico valore di x=0.125 (pari ad 1/8, RFC 2988) 39.27 Il valore del time-out è fissato pari a: 39.28 Usare l’algoritmo di Jacobson fino a quando non avviene una ritrasmissione Effettuare un back-off binario ad ogni ritrasmissione timeout = 2*timeout Riprendere l’algoritmo di Jacobson quando le ritrasmissioni cessano, ovvero quando si riceve l’ACK di un segmento non ritrasmesso 39.29 Uno dei problemi maggiori delle ritrasmissioni innescate da time-out è che il periodo di time-out può essere piuttosto elevato Il mittente può rilevare una perdita non solo aspettando lo scadere del time-out, ma rilevando degli ACK duplicati Si definisce ACK duplicato un ACK che ririscontra un segmento per il quale il mittente ha già ricevuto un riscontro. 39.30 RFC 2581 introduce il concetto di Ritrasmissione Veloce (Fast Retransmit). Alla ricezione di 3 ACK duplicati, il mittente TCP ritrasmette il segmento mancante prima che il timer per quel segmento scada. 39.31 Esistono diverse varianti del TCP. La distinzione principale è negli algoritmi di gestione degli ACK e dei time-out TCP-Tahoe: è storicamente una delle versioni più vecchie del TCP. Taglia incondizionatamente la finestra di congestione ad 1 MSS e riprende la fase di slow-start dopo OGNI evento di perdita 39.32 TCP-Reno: elimina la fase di slow-start dopo la ricezione di un ACK duplicato 3 volte. Intuitivamente, la ricezione di un ACK duplicato 3 volte è sintomatico della perdita di un segmento ma anche della ricezione di altri. Si ritiene dunque troppo aggressiva la fase di slow-start. 39.33 UDP (User Datagram Protocol) realizza un protocollo di trasporto non orientato alla connessione Aggiunge alle funzionalità di IP la possibilità di distinguere fra diverse destinazioni all’interno della stessa macchina, ma non garantisce l’integrità dei dati. 39.34 Packet Source Port Destination Port Message Length Checksum Data Pseudo-header (non trasmesso, usato anche in TCP) Source IP Address Destination IP Address Zero Proto Length 39.35 Cos’è il multiplexing a livello di trasporto? Perchè si deve usare il three-way handshake? Cosa sono gli incarnation numbers? Descrivete TCP e UDP. 39.36