預備知識:TCP報文格式字段
1、分爲首部和數據兩部分,二十個字節固定首部;
2、分析:
1)兩個字節源端口、兩個字節目的端口;
2)四個字節序號(報文段序號)、四個字節確認號(期望收到對方下一個報文段的第一個數據字節的序號);
3)四位數據偏移、六位保留、六位控制位:緊急URG、確認ACK、推送PSH、復位RST、同步SYN、終止FIN;
4)兩字節窗口(窗口值作爲接收方讓發送方設置其發送窗口的依據);
5)兩字節檢驗和(檢驗方法類似UDP,加僞首部)、兩字節緊急指針(結合緊急控制位URG);
6)最大四十個字節選項,包括MSS(最大報文段長度,默認536)、十字節時間戳(時間戳值、時間戳回送回答,計算RTT,防止序號繞回)等
一、理想條件:
傳輸信道不產生差錯;與速度無關,接收方總能及時處理收到的數據。
二、簡單的可靠傳輸:
停止等待協議:每發送完一個分組就停止發送,等待對方確認。收到確認再發送下一個分組。
1、無差錯情況;
2、出現差錯:設置超時計時器。
注意三點:1)發送方保留分組副本;2)分組和確認分組進行編號;3)超時計時器比平均往返時間長一些。
3、確認丟失和確認遲到:
超時。重新發送分組,接收方兩個個操作:1)丟棄重複分組;2)向A發送確認;
這種可靠傳輸機制也稱ARQ(自動重傳請求)
特點:接收方不用請求發送方重傳某個出錯分組;信道利用率低。
改進:連續ARQ協議(流水線傳輸)與滑動窗口協議
三、實際中的可靠傳輸:
1、滑動窗口協議:
1)發送窗口與接收窗口不總是一樣大;發送方和接收方各自維護一個發送窗口和接收窗口,單位是字節
2)對於不按序到達的數據不丟棄,臨時存放在接收窗口中;
3)接收方必須有累計確認功能;
2、超時重傳時間的選擇:TCP中記錄發送時間和接收到的時間RTT
平均往返時間RTT,加權平均往返時間RTTs
新RTTs =(1 - a)*(舊的RTTs)+ a *(新的RTT樣本)(0 <= a < 1,推薦0.125)
超時重傳時間RTO,RTT偏差的加權平均值RTTd
RTO = RTTs + 4 x RTTd
新的RTTd =(1 - y)*(舊的RTTd)+ y * |RTTs –新的RTT樣本| (y推薦0.25)
在計算平均加權RTTs時,只要報文段重傳了,就不採用其往返時間樣本。這樣RTTs和RTO比較精確;
3、選擇確認SACK
如果收到的報文段無差錯,只是未按序號,中間缺少一些序號數據。可以在首部添加選項“選擇確認”記錄缺少序號段的邊界,在建立連接時協商。