TCP 可靠傳輸的實現-02超時重傳時間的選擇/03選擇確認 SACK
02超時重傳時間的選擇
- TCP 每傳送一個報文段,就對這個報文段設定一次計時器。
- 只要計時器設定的重傳時間到但還沒有收到確認,就要重傳這一報文段。
由於TCP的下層是網際網路環境,傳送的報文段可能只經過一個高速率的區域網,也可能經過多個低速率的網路,並且每個IP資料包所選擇的路由還可能不同。如果把超時重傳時間設定得太短,就會引起很多報文段的不必要的重傳,使網路負荷增大。但若把超時重傳時間設定得過長,則又使網路的空閒時間增大,降低了傳輸效率。
TCP 採用了一種自適應演算法,它記錄一個報文段發出的時間,以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間 RTT。
超時重傳時間 RTO介紹
往返時間 (RTT) 的測量
如何判定此確認報文段是對原來的報文段 1 的確認,還是對重傳的報文段 2 的確認?
Karn 演算法
- 在計算平均往返時間 RTT 時,只要報文段重傳了,就不採用其往返時間樣本。
- 這樣得出的加權平均平均往返時間 RTTS 和超時重傳時間 RTO 就較準確。
- 但是,這又引起新的問題。當報文段的時延突然增大了很多時,在原來得出的重傳時間內,不會收到確認報文段。於是就重傳報文段。但根據Karn演算法,不考慮重傳的報文段的往返時間樣本。這樣,超時重傳時間就無法更新。
修正的 Karn 演算法
03選擇確認 SACK
問題:若收到的報文段無差錯,只是未按序號,中間還缺少一些序號的資料,那麼能否設法只傳送缺少的資料而不重傳已經正確到達接收方的資料?
答案是可以的。選擇確認 SACK
(Selective ACK) 就是一種可行的處理方法。
RFC 2018 的規定
- 如果要使用選擇確認,那麼在建立 TCP 連線時,就要在 TCP 首部的選項中加上“允許 SACK”的選項,而雙方必須都事先商定好。
- 如果使用選擇確認,那麼原來首部中的“確認號欄位”的用法仍然不變。只是以後在 TCP 報文段的首部中都增加了 SACK 選項,以便報告收到的不連續的位元組塊的邊界。
- 由於首部選項的長度最多隻有 40 位元組,而指明一個邊界就要用掉 4 位元組,因此在選項中最多隻能指明 4 個位元組塊的邊界資訊。另外還需要兩個位元組。一個位元組用來指明是SACK選項,另一個位元組是指明這個選項要佔用多少位元組。如果要報告五個位元組塊的邊界資訊,那麼至少需要42個位元組。
相關文章
- 計算機網路之傳輸層TCP與UDP對比、流量控制、擁塞控制、超時重傳時間的選擇、可靠傳輸計算機網路TCPUDP
- element 時間選擇器禁止選擇以前的時間
- IOS之UIDatePicker實現時間日期選擇iOSUI
- element-ui 時間選擇器設定時間選擇範圍UI
- 自定義時間選擇器
- TCP可靠傳輸原理TCP
- ant-design date-picker 可以選擇當天,時間不能選擇過去的小時
- uniapp 周選擇範圍時間APP
- React Native日期時間選擇元件React Native元件
- 實時渲染:更優的渲染選擇
- [轉帖]【tcp】關於tcp 超時重傳次數TCP
- 直播帶貨原始碼,日期時間選擇器 選擇範圍限制原始碼
- 4種傳輸協議設定,檔案傳輸協議如何選擇?協議
- 何時選擇敏捷?敏捷
- LSTM擇時+StockRanker選股的視覺化策略實現視覺化
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- 選擇華瑞,是我做的最正確的選擇
- 計算機網路之八:TCP協議(2) TCP可靠傳輸的實現計算機網路TCP協議
- 微信小程式-選擇時間(一週的某一時刻)微信小程式
- 選擇排序中用異或實現swap()時出現的問題排序
- 監獄單位如何選擇適合的FTP傳輸替代方案?FTP
- vue 手寫一個時間選擇器Vue
- 設計表時,如何選擇正確的資料型別資料型別
- 如何確保TCP包的有序傳輸?TCP
- 小程式年月日時間段區間選擇
- 選擇的勝利:博德3,星空與影片傳播時代的RPG設計
- 新加坡為什麼是ICO的最後選擇,同時也是最佳選擇?
- 遊戲陪玩系統開發,日期時間選擇介面的實現遊戲
- 如何用 UDP 實現可靠傳輸?UDP
- 選擇catalyst是正確的麼?
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- TCP 學習筆記(三) 可靠傳輸TCP筆記
- 使用 CSS 選擇器實現對不含 title 屬性元素的選擇CSS
- QFileDialog實現同時選擇檔案和資料夾,確認取消按鈕英文問題解決方法
- 安裝APK時SO庫的選擇策略APK
- iOS倒數計時的探究與選擇iOS
- 選擇排序(python)實現排序Python
- iOS仿滴滴預約用車時間選擇器iOS