Controllo di flusso TCP Elementi base del flusso TCP (1) Comunicazione punto-punto • Un mittente, un destinatario. Flusso di byte affidabile • Flusso suddiviso in segmenti e non in messaggi indipendenti (come i datagram UDP). Pipeline controllata • Il controllo di flusso stabilisce le dimensioni della finestra. Buffer di invio e ricezione • Come abbiamo visto nelle lezioni precedenti. Elementi base del flusso TCP (2) Full duplex • Flusso bidirezionale in una singola connessione. Orientato alla connessione • Handshaking tra mittente e destinatario prima dell’invio dati. Controllato • Adattamento alle diverse velocità relative del mittente e del destinatario. Elementi base del flusso TCP (3) L’applicazione LEGGE i dati L’applicazione SCRIVE i dati Porta Socket Porta Socket TCP TCP Buffer Invio Buffer Ricezione SEGMENTO Segmento TCP URG: dati urgenti (non usato) 32 bit porta sorg. # porta dest. # numero di sequenza ACK: ACK valido PSH: push data (non usato) RST, SYN, FIN: Inizio, fine connessione Internet checksum (come UDP) numero di acknowledgement lungh. non intest. usato UA P R S F somma di controllo dim. fin. ricev. ptr dati urgenti Opzioni (lunghezza variabile) Dati applicativi (lunghezza variabile) # porta mittente e destinatario Conteggio in byte (NON in segmenti!) Advertised window: # byte che il ricevente accetta Intestazione TCP : campi principali Numero di sequenza (32 bit) • Numero del primo byte del segmento. Dimensioni finestra ricevente (16 bit) • Dimensione finestra come nel GBN o nel selective repeat; in TCP la dimensione della finestra è variabile. Acknowledgment (32 bit) • Contiene il successivo numero di sequenza atteso. Numeri di sequenza e ACK TCP Host A Host B Server di eco Utente digita ‘C’ B invia ACK per la ricezione di ‘C’, invia a sua volta ‘C’ A invia ACK per la ricezione di ‘C’ Tempo La gestione dei segmenti arrivati fuori ordine dipende dall’implementazione. Intestazione TCP: campi principali Lunghezza d’intestazione (4 bit) • I campi opzione possono variare la lunghezza dell’intestazione. • Il valore della lunghezza espresso in numero di parole da 32 bit = 4 byte. • 4 bit => 24 * 4 byte = 64 byte; poiché l’intestazione standard è lunga 20 byte ci sono 44 byte disponibili per le opzioni. • L’intestazione UDP, invece, è lunga solo 8 byte. Numeri di sequenza e finestra (1) L’intestazione comprende: • 32 bit per il numero di sequenza (e di acknowledgement); • 16 bit per la dimensione della finestra. Per la dimensione massima della finestra deve anzitutto valere: Dimensione finestra <= ½ SpazioNumeriSequenza • Condizione facilmente soddisfatta: la dimensione della finestra è di 16 bit 232 >> 2* 216 Numeri di sequenza e finestra La dimensione finestra è un campo di 16 bit => la finestra massima è di 64 KB • È sufficiente per riempire il pipeline? Non sempre • Lunghezza pipeline = delay*BW • Esempio: 100 ms roundtrip e 100 Mbps => 1.19 MB Numero di sequenza è un campo di 32 bit => 4 GB • Il tempo di vita massimo del segmento è di 120 sec. • Il wrap-around può arrivare troppo presto? Sì, è possibile per i seguenti motivi: – 4 GB/120 sec = 273 Mbps – < Gigabit Ethernet e STS-12 a 622 Mbps FINE (2)