1. 程式人生 > 其它 >net.ipv4.tcp_timestamps

net.ipv4.tcp_timestamps

設計目的

tcp_timestamps設計目的是為了記錄資料包的傳送時間,過程如下

  1. 傳送方在傳送資料包時,在TCP協議中的TSopt選項記錄當前的傳送的時間戳TSval中
  2. 接收方收到資料包,進行拆封並把傳送的時間戳TSval記錄在TSecr返回給傳送方一個ack
  3. 傳送包收接收方的ack包,用當前時間戳 - ack中的TSecr時間戳就可以得到精確的RTT

資料結構

  • 資料包結構
    Kind: 8             // 標記唯一的選項型別,比如window scale是3
    Length: 10 bytes    // 標記Timestamps選項的位元組數
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    | Kind=8
    | Length=10 | TS Value (TSval) | TS ECho Reply (TSecr) | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 4 4

    值得注意,tcp_timestamps必須需要雙方都要開啟方可生效,這是前提條件,如果有一方沒有開啟則雙方進行資料傳送接收時該功能不起作用(比如client端傳送的SYN包中帶有timestamp選項,但server端並沒有開啟該選項。則回覆的SYN-ACK將不帶timestamp選項,同時client後續回覆的ACK也不會帶有timestamp選項。當然,如果client傳送的SYN包中就不帶timestamp,雙向都將停用timestamp

  • 該引數核心預設是啟用的,即為 1

功能作用

摘抄網路

如果沒有tcp_timestamps,看一下RTT是如何計算的

什麼是 RTT & RTO

  • RTO (Rerrtransmission TimeOut)即,資料包重傳超時時間

官方RFC2988文中定義

TheTransmissionControlProtocol(TCP)[Pos81]usesaretransmission timertoensuredatadeliveryintheabsenceofanyfeedbackfromthe remotedatareceiver.Thedurationofthistimerisreferredtoas RTO(retransmissiontimeout).RFC1122[Bra89]specifiesthatthe RTOshouldbecalculatedasoutlinedin[Jac88]

TCP超時與重傳中的一個相當重要的部分,是對一個已知連線的RTT時間的測量,由於網路波動則會根據實際的情況相應的調整RTO時間