net.ipv4.tcp_timestamps
阿新 • • 發佈:2021-11-29
設計目的
tcp_timestamps設計目的是為了記錄資料包的傳送時間,過程如下
- 傳送方在傳送資料包時,在TCP協議中的TSopt選項記錄當前的傳送的時間戳TSval中
- 接收方收到資料包,進行拆封並把傳送的時間戳TSval記錄在TSecr返回給傳送方一個ack
- 傳送包收接收方的ack包,用當前時間戳 - ack中的TSecr時間戳就可以得到精確的RTT
資料結構
- 資料包結構
Kind: 8 // 標記唯一的選項型別,比如window scale是3 Length: 10 bytes // 標記Timestamps選項的位元組數 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | Kind=8
值得注意,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時間