2. Trasferimento affidabile (generalità) Mittente (sender) Ricevente (receiver) rdt_send(): chiamata da “ sopra”, (es. app.). Dati da inviare 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 deliver_data(): invocata da rdt per consegnare i dati
30. Struttura dei segmenti TCP URG: dati urgnti (di solito non usato) ACK: # ACK valido PSH: push data now (di solito non usato) RST, SYN, FIN: Controllo conness. (comandi di inst., abbattimento) # byte rcvr disposto ad accettare Si contano i byte di dati (non i segmenti!) Internet checksum (come in UDP) source port # dest port # 32 bit Dati (lunghezza variabile) sequence number acknowledgement number rcvr window size ptr urgent data checksum F S R P A U head len not used Opzioni (lunghezza variabile)
31.
32.
33. TCP – generazione degli ACK [RFC 1122, RFC 2581] Evento Arrivo segmento in ordine, nessun buco, tutti i segmenti precedeni confermati Arrivo segmento in ordine, nessun buco, un ACK ritardato in attesa Arrivo segmento fuori ordine, # seq maggiore di quello atteso, individuato buco Arrivo segmento che riempie un buco parzialmente o totalmente Azione del ricevente ACK ritardato. Attendi il prossimo segmento per al più 500ms. Se non arriva invia ACK Manda subito un ACK cumulativo Manda ACK duplicato, con numero sequenza del prossimo byte atteso ACK immediato se il segmento inizia all’estremità inferiore del buco
34. TCP: possibili casi di ritrasmissione Host A Seq=100, 20 bytes data ACK=100 Seq=92 timeout Scenario2: timeout prematuro, ACK cumulativi Host B Seq=92, 8 bytes data ACK=120 Seq=92, 8 bytes data Seq=100 timeout ACK=120 Host A Seq=92, 8 bytes data ACK=100 loss timeout Tempo Scenario 1: ACK perso Host B X Seq=92, 8 bytes data ACK=100 Tempo
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46. TCP: controllo della congestione /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 perform slowstart Controllo congestione 1 1: TCP Reno non fa slowstart dopo Ricezione di tre ACK duplicati