Capitolo 3 - parte 3 Corso Reti ed Applicazioni Mauro Campanella Elementi Base Trasporto Affidabile Problema Errori nei dati Conseguenza nel protocollo : controllo errori in ogni pacchetto scambio informazioni e messaggi di controllo Errori nei messaggi : numeri di sequenza Perdite di pacchetti : timer per ritrasmissione Efficienza : finestra di trasmissione (Go-Back-N) intervallo grande di numeri di sequenza Il modello è rappresentabile con una macchina a stati finiti, sia per il mittente, che per il ricevente M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 2 Transmission control protocol (TCP) RFCs 793 879 896 1122 1323 2018+2883 2581+3390 2582 2988 3042 TCP - la definizione originale - Sett. 1981 TCP Maximum Segment Size (opt) Nagle’s algorithm (TCP_NODELAY socket option) Requirements for Internet Hosts TCP Extensions for high speed (window scale opt.) Selective ACKnowlegements (opt) TCP congestion control New Reno modification to TCP's Fast Recovery Computing TCP retransmission timer Enhancing TCP's Loss Recovery M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 3 Transmission Control Protocol (TCP) Protocollo di trasporto che offre: - un servizio affidabile - orientato alla connessione - punto - punto - fra mittente e destinatario (end to end) - trasporta uno stream di byte (non riconosce o inserisce delimitazioni nel flusso di dati passato dall’applicazione) - in grado di riordinare i dati nei segmenti ricevuti - in grado di eliminare i duplicati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 4 Transmission Control Protocol (TCP) Effettua una trasmissione che è sempre creata full duplex : – flusso dati ed informazione è bidirezionale nella stessa connessione applicazione Usa buffer di spedizione e ricezione in modalità “sliding window”: applicazione Socket Socket TCP send buffer TCP receive buffer segmenti TCP send buffer TCP receive buffer segmenti M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 5 Transmission Control Protocol (TCP) MSS: maximum segment size: i dati dell’applicazione sono spezzati da TCP in segmenti che hanno MSS come massima dimensione (in byte). MSS è decisa all’inizio della connessione (attraverso una esplicita opzione TCP o attraverso il valore di default) I dati sono spediti in segmenti di dimensione variabile decisa da TCP di volta in volta, in base allo stato della connessione. Acknowledgement: lo scambio di informazione è basato su ACK, spediti dal ricevente, normalmente con un leggero ritardo rispetto alla ricezione del pacchetto. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 6 Transmission Control Protocol (TCP) Pipelining: realizzato attraverso l’esistenza di buffer con finestra scorrevole, di tipo Go-Back-N Controllo di flusso: dato che, ai capi della connessione, i nodi forniscono uno spazio di buffering finito, attraverso i messaggi di ACK vi è un’aggiustamento reciproco della velocità di trasmissione. Controllo di congestione: la perdita di pacchetti è usata come indice di congestione e fa scattare meccanismi per diminuire la velocità di trasmissione, prima dell’esaurimento dei buffer. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 7 Header TCP: parti note 0 8 15 16 porta del mittente 24 31 porta del destinatario numero di sequenza numero di acknowledgement lungh. head. In parole da 32 bit ! (60 byte massimo di header) riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti) dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 8 pseudo header protocollo zero 32 bit indirizzo IP sorgente 32 bit indirizzo IP destinazione porta del mittente TCP: segmento per checksum lunghezza TCP porta del destinatario numero di sequenza numero di acknowledgement lungh. head. riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti) dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 9 Header TCP: i numeri di sequenza Tutti i numeri di sequenza indicano il numero d’ordine di un byte nel byte flow (dati), non il numero del segmento. - Numero di sequenza (32 bit - circa 4 miliardi): punta al primo byte della parte dati del pacchetto. SYN e FIN sono un’eccezione e contano come un (1) byte. All’inizio di ogni connessione il primo valore è scelto “a caso” - Acknowledge sequence number: indica il numero di sequenza del primo byte del prossimo segmento atteso. - Urgent pointer: valido solo con il flag “URG” attivo. L’offset positivo dal numero di sequenza del segmento corrente in cui vi è l’ultimo byte (o il seguente … ) dei dati urgenti (non l’inizio ! … ) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 10 Header TCP: campi numeri di sequenza 0 8 15 16 porta del mittente 24 31 porta del destinatario numero di sequenza numero di acknowledgement lungh. head. riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti) dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 11 Esempio di scambio di numeri di sequenza Nodo A Nodo B L’utente invia ‘C’ Seq = S Il nodo A invia l’ACK di ricevuta di ‘C’ 42:43 :80(1 e q =79 (1), A CK=7 9, da ta = ‘ C’ ), AC Seq=4 = ‘C’ a t a d , K=43 3:43(0 Il nodo B invia l’ACK di ricevuta di ‘C’ e invia l’eco di ‘C’ ), ACK =80 tempo Esempio con telnet M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 12 Header TCP: FLAGS 0 ACK: numero di seq. ACK valido 8 16 porta del mittente 24 31 porta del destinatario numero di sequenza URG: urgent data (raramente usato) PSH: push dati (raramente usato) 15 numero di acknowledgement lungh. head. RST, SYN, FIN: comandi connessione (reset, creazione, termine) M. Campanella Corso Reti ed Applicazioni - Como 2005 riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti) dati Cap 3 - 3 pag. 13 Header TCP: Flags Singoli bit on (valore = 1) od off (valore = 0) che forniscono informazioni di validità di altri campi dell’header o segnalano eventi URG : il puntatore contenuto nal campo urgent è valido ACK : il numero di sequenza di acknowledge è valido PSH : il ricevente deve passare l’informazione allo strato superiore prima possibile RST : reset (e termine) della connessione SYN : richiesta di sincronizzare i numeri di sequenza per iniziare una connessione FIN : richiesta di chiudere la connessione (in un senso) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 14 Header TCP: FLAGS 0 8 15 16 porta del mittente 24 31 porta del destinatario numero di sequenza numero di acknowledgement lungh. head. riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti) dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 15 Header TCP: Window Size Window Size: il numero di byte, cominciando da quello nel campo di ACK, che il mittente del pacchetto è disposto ad accettare. E’ un numero di 16 bit (massimo valore 65535), ma attraverso l’opzione TCP di Window Scaling può essere aumentato fino a 65535*214 (circa 1 GB) Ricevuti ed inviato ACK ACK number window size total TCP receive buffer size M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 16 Header TCP: Send buffer Size receive window size send buffer size Inviati e ricevuto ACK Inviati NON ricevuto ACK M. Campanella Corso Reti ed Applicazioni - Como 2005 Pronti da Inviare liberi per ricevere dalla applicazione Cap 3 - 3 pag. 17 Header TCP: Opzioni 0 8 15 16 porta del mittente 24 31 porta del destinatario numero di sequenza numero di acknowledgement lungh. head. riservati U A P R S F R C S S Y I G K H TNN checksum dimensione finestra num. sequenza urgente Opzioni (se presenti- MAX 40 bytes) dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 18 TCP options Composte di tre campi: tipo, lunghezza e dati (TLD). La lunghezza totale delle opzioni non può superare 40 byte. Opzione Fine Opzioni No Operation Maximum Segment Size Window Scale Selective ACK permesso Selective ACK Timestamp M. Campanella Corso Reti ed Applicazioni - Como 2005 tipo lungh. (byte) 0 1 1 1 dati no no 2 3 4 3 MSS (2 byte) Shift (1 byte) 4 5 8 2 varia 10 no seq.number Time (8 byte) Cap 3 - 3 pag. 19 TCP Options Fine lista delle opzioni Maximum Segment Size tipo=0 1 byte Nessuna operazione Window scale Factor (2N, N massimo 14) tipo=1 1 byte valore MSS tipo=2 lun=4 1 byte 1 byte tipo=3 lun=3 valore shift 1 byte 1 byte 1 byte 2 byte Timestamp tipo=8 lun=10 valore timestamp echo reply timestamp 1 byte 1 byte 4 byte 4 byte M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 20 TCP Apertura connessione Stretta di mano a tre fasi (three way handshake): 1: un nodo manda un segmento contenente – il flag SYN (apertura attiva) – un proprio nuimero di sequenza iniziale – nessun dato – opzioni per MSS, Window scale, timestamp 2: il ricevente replica al SYN con un segmento con SYN ed ACK: – viene creato stato nel nodo (aperura passiva) – il ricevente sceglie il proprio numero di sequenza iniziale – invia la sua scelta di opzioni 3: Il primo nodo risponde con segmento con solo flag ACK ed eventuali primi dati M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 21 TCP Apertura connessione stato CLOSED SYN_SENT ESTABLISHED client server SYN 14155:14155 (0) SYN 2347:2347 (0) ACK 14156 stato LISTEN SYN_RCVD ACK 2348 (0) ESTABLISHED M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 22 TCP: Chiusura connessione La chiusura deve essere esplicita per ognuno dei due versi della connessione. Il primo nodo: Quindi, il secondo nodo: 1: invia un segmento con FIN 3: invia un segmento con FIN 2: riceve un segmento con l’ACK del FIN 4: riceve ACK e chiude la connessione M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 23 TCP: Chiususra connessione chiusura attiva chiusura passiva ESTABLISHED ESTABLISHED FIN FIN_WAIT_1 ACK FIN_WAIT_2 CLOSE_WAIT FIN ACK LAST_ACK TIME_WAIT (2 MSL timeout) CLOSED M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 24 TCP Chiusura connessione Lo stato finale di “TIME_WAIT” corrisponde ad un periodo di attesa di 2 Maximum Segment Lifetime (2 MSL). 2 MSL è scelto dalle diverse realizzazioni di TCP tra 30 secondi e 2 minuti, anche se l’RFC iniziale specifica 2 minuti. La permanenza in questo stato permette: - di reinviare un ACK nel caso vada perso - di bloccare la socket (cioè le coppie indirizzo, porta) per un tempo sufficente a scartare segmenti duplicati ancora nella rete. Questo impedisce che una nuova “incarnazione” della socket possa prendere vecchi segmenti come nuovi. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 25 TCP: FSM tipica per un client in attesa per 2 MSL L’applicazione inizia la connessione TCP invio SYN riceve FIN invia ACK ricevuto ACK rimane in attesa M. Campanella Corso Reti ed Applicazioni - Como 2005 ricevuto SYN+ACK invia ACK invio FIN L’applicazione inizia la chiusura della connessione Cap 3 - 3 pag. 26 TCP: FSM tipica per un server riceve ACK non invia nulla invia FIN ricevuto FIN invia ACK M. Campanella Corso Reti ed Applicazioni - Como 2005 L’applicazione apre una socket TCP ricevuto SYN invia SYN+ACK riceve ACK non invia nulla Cap 3 - 3 pag. 27 TCP FSM ap pl: sen sen d: d d SY at N a Transizione normale per un client appl: close send: FIN Transizione normale per un server M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 28 TCP: timer principali TCP mantiene 4 tipi di timer diversi per ogni connessione: 1 - timer per le ritrasmissioni usato nell’attesa di un ACK 2 - timer di persistenza usato per continuare a scambiare informazioni sulla dimensione della finestra anche quando uno dei due nodi ha dichiarato di non avere spazio disponibile 3 - timer di “keepalive” usato per evidenziare un reboot od un crash dell’altro nodo, anche se in una fase di quiete. 4 - timer di “2 MSL” usato quando la connessione è nello stato di TIME_WAIT M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 29 TCP stima di RTT La scelta del valore del timeout è fondamentale per un buon funzionamento di TCP. Deve variare da connessione a connessione ed essere legato al valore di RTT, ma: se troppo breve: ritrasmissioni inutili. se troppo lungo: reazione lenta alla congestione M. Campanella Corso Reti ed Applicazioni - Como 2005 Stima di RTT (SampleRTT): tempo trascorso tra l’emissione di un segmento ed il ricevimento dell’ACK relativo - ignorando le ritrasmissioni - ambiguità per perdita di ACK SampleRTT varia da segmento a segmento. Si desidera avere una stima più affidabile basata su varie misure. Cap 3 - 3 pag. 30 TCP stima del Round Trip Time Il calcolo attuale del valore è basato su un algoritmo di Van Jacobson che modifica le specifiche iniziali di TCP. EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT Effettua il calcolo di un valore medio mobile, con peso esponenziale. L’influenza dei campioni passati descresce in modo esponenziale. Il valore tipico è : α = 0.125 M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 31 Esempio di calcolo di RTT RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 RTT (milliseconds) 300 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT M. Campanella Corso Reti ed Applicazioni - Como 2005 Estimated RTT Cap 3 - 3 pag. 32 TCP RTT e valore per il Timeout Il valore del Timeout viene basato sulla stima del valore dell’RTT (EstimtedRTT) aumentato di un margine di sicurezza. Per questo si usa anche la stima della variazione dell’RTT DevRTT = DevRTT + β*( |SampleRTT-EstimatedRTT| - DevRTT ) (normalmente, β = 0.25) Finalmente l’intervallo di timeout è calcolato come: TimeoutInterval = EstimatedRTT + 4*DevRTT M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3 - 3 pag. 33