【正文】
mands) bytes 接收方愿意接受的 按發(fā)送數(shù)據(jù)的字節(jié)計算 (不是按段數(shù) !) Inter checksum (as in UDP) 主講人: 西安交通大學(xué) 程向前 第 4講 傳輸層之二 44 TCP seq. ’s 和 ACKs Seq. ’s: ? 該數(shù)據(jù)段第一個字節(jié)在(整個報文)字節(jié)流中 “編號 ” ACKs: ? seq 為預(yù)期從對方發(fā)來的“下一個”字節(jié)的編號 ? 積累的 ACK Q: 接收方如何接受失序的數(shù)據(jù)段 ? A: TCP 沒有定義 , 由程序設(shè)計者決定 Host A Host B User types ‘C’ host ACKs receipt of echoed ‘C’ host ACKs receipt of ‘C’, echoes back ‘C’ time 簡單的 tel 場景 主講人: 西安交通大學(xué) 程向前 第 4講 傳輸層之二 45 TCP: 可靠數(shù)據(jù)傳輸 簡化的發(fā)送方 , 假設(shè) wait for event wait for event event: data received from application above event: timer timeout for segment with seq y event: ACK received, with ACK y create, send segment retransmit segment ACK processing ?單向數(shù)據(jù)傳輸 ?無流量 , 擁塞控制 主講人: 西安交通大學(xué) 程向前 第 4講 傳輸層之二 46 TCP: 可靠數(shù)據(jù)傳輸 00 sendbase = initial_sequence number 01 nextseqnum = initial_sequence number 02 03 loop (forever) { 04 switch(event) 05 event: data received from application above 06 create TCP segment with sequence number nextseqnum 07 start timer for segment nextseqnum 08 pass segment to IP 09 nextseqnum = nextseqnum + length(data) 10 event: timer timeout for segment with sequence number y 11 retransmit segment with sequence number y 12 pue new timeout interval for segment y 13 restart timer for sequence number y 14 event: ACK received, with ACK field value of y 15 if (y sendbase) { /* cumulative ACK of all data up to y */ 16 cancel all timers for segments with sequence numbers y 17 sendbase = y 18 } 19 else { /* a duplicate ACK for already ACKed segment */ 20 increment number of duplicate ACKs received for y 21 if (number of duplicate ACKS received for y == 3) { 22 /* TCP fast retransmit */