TCP/IP之RTO、RTT

什麼是 RTO、RTT

底層的網絡是不可靠的, 超時、丟包各類問題, 但 TCP 協議的設計初衷是做爲一個可靠的數據傳輸協議, 超時重傳機制是實現可靠性很重要的一個設計.html

每次 TCP 握手過程都會啓動一個定時器, 若是在定時器時間內沒有收到, 則進行重傳.算法

而重傳的超時時間 則成爲 RTO (Retransmission TimeOut)網絡

咱們知道網絡是一直在波動的, 因此超時重傳也是隨着網絡一直變化的, 那咱們基於什麼來計算 RTO 呢?tcp

答案是 基於 TCP 單次握手的往返時間. 鏈接的往返時間成爲 RTT (Round Trip Time)設計

正常網絡狀況示意

異常狀況 RTT 值

經過上圖咱們發現其實還有幾種特殊場景的計算, 但實際計算是以發送數據包時間算起, 基於協議實現裏面的 timestamp 值計算差值就能夠了.cdn

簡單概念理解:htm

  1. RTT(Round Trip Time):一個鏈接的往返時間,即數據發送時刻到接收到確認的時刻的差值;
  2. RTO(Retransmission Time Out):重傳超時時間,即從數據發送時刻算起,超過這個時間便執行重傳, RTO協議實現值最小1s

RTT 和 RTO 的關係是:因爲網絡波動的不肯定性,每一個RTT都是動態變化的,因此 RTO 也應隨着 RTT 動態變化。blog

當 RTO < RTT 時, 將會觸發大量的重傳, 當 RTO > RTT 時候, 若是頻繁出現丟包, 重傳不及時, 又會形成網絡的反應慢, 最好的結果是 RTO 略大於 RTT.ip

上面說到了 網絡是一直波動的, RTT 是一直變化的, RTO 的值基於上次 RTT 往返時間動態計算出來的.文檔

這裏基於一套公式(主要Jacobson / Karels 算法), 內容過於炸裂, 這裏我要偷懶, 詳情查看RFC6298 tools.ietf.org/html/rfc629…

參考文檔

sgros.blogspot.com/2012/02/cal…

更多精彩內容關注公衆號 (呆呆熊的技術路):

相關文章
相關標籤/搜索