在TCP可選項字段中為TCP預留有時間戳功能。
1、TCP可選項格式:
關於TCP可選項字段的詳細內容可以查看我的另一篇博客:淺析TCP頭部可選項
時間戳選項占10個字節= kind(1字節) + length(1字節) + info (8字節),其中kind=8,length=10,info由timestamp和timestamp echo兩個值組成,各4個字節的長度。
2、TCP時間戳字段存放的內容注解:
發送方在發送報文段時把當前時鍾的時間值放入時間戳字段,接收方在確認該報文段時把時間戳字段值復制到時間戳回送回答字段。因此,發送方在收到確認報文后,可以准確計算出RTT。
下面我們以一個例子理解timestamp和timestamp echo字段中存放的內容:假設a主機和b主機之間通信,a主機向b主機發送一個報文段,那么:
1)timestamp字段中存放的內容:a主機向b主機發送報文s1,在s1報文中timestamp存儲的是a主機發送s1時的內核時刻ta1。
2)timestamp echo字段中存放的內容:b主機收到s1報文並向a主機發送含有確認ack的報文s2,在s2報文中,timestamp為b主機此時的內核時刻tb,而timestamp echo字段為從s1報文中解析出的ta1.
這些時刻具體的作用,我們繼續向下看,將結合TCP時間戳選項的功能進行說明。
3、TCP時間戳選項的功能:
1)計算往返時延RTT:
當a主機接收到b主機發送過來的確認ack報文s2時,a主機此時內核時刻為ta2.
a主機從s2報文的timestamp echo選項中可以解析出該確認ack確認的報文的發送時刻為ta1.
那么:RTT=接收ack報文的時刻-發送報文的時刻=ta2 -ta1.
ta2和ta1都來自a主機的內核,所以不需要在tcp連接的兩端進行任何時鍾同步的操作。
2)防止回繞的序號:
我們知道TCP報文的序列號只有32位,而沒增加2^32個序列號后就會重復使用原來用過的序列號。假設我們有一條高速網絡,通信的主機雙方有足夠大的帶寬涌來快速的傳輸數據。例如1Gb/s的速率發送報文,則不到35秒報文的序號就會重復。這樣對TCP傳輸帶來混亂的情況。而采用時間戳選項,可以很容易的分辨出相同序列號的數據報,哪個是最近發送,哪個是以前發送的。
轉自https://blog.csdn.net/Mary19920410/article/details/77255967
喜歡這篇文章?歡迎打賞~~