重学TCP协议(7) Timestamps 选项
1.Timestamps 選項的組成部分
時間戳選項占10個字節(jié)= kind(1字節(jié)) + length(1字節(jié)) + info (8字節(jié)),其中kind=8,length=10,info由timestamp(TS value)和timestamp echo(TS Echo Reply)兩個值組成,各4個字節(jié)的長度。
2. Timestamps 選項工作原理
以一次抓包為例:
3. Timestamps 選項的作用
時間戳選項主要的功能有兩個:
3.1 用來計算往返時間RTT。
發(fā)送方在發(fā)送報文段時把當(dāng)前時鐘的時間值放入時間戳字段,接收方在確認該報文段時把時間戳字段值復(fù)制到時間戳回送回答字段。因此,發(fā)送方在收到確認報文后,可以準確計算出RTT。時間戳是一個單調(diào)增長的值,接收方只需要回顯收到的內(nèi)容,因此是不需要關(guān)注時間戳的單元是什么,也不需要連接雙發(fā)的時鐘同步。
例如:主機a向主機b發(fā)送一個報文s1,在發(fā)送時將內(nèi)核時刻ta1記錄到報文s1的選項字段時間戳timestamp區(qū)域;主機b接收到報文s1后,從s1的時間戳timestamp區(qū)域?qū)a1取出來,復(fù)制到應(yīng)答報文s2的時間戳timestampecho區(qū)域。如此一來,主機a收到s2時,此時的內(nèi)核時刻是ta2,那么RTT = ta2 - ta1。這在一定程度上就能反映網(wǎng)絡(luò)的擁堵情況了。
為什么需要用Timestamps計算RTT
TCP 在發(fā)送一個包時,會記錄這個包的發(fā)送的時間 t1,用收到這個包的確認包時 t2 減去 t1 就可以得到這次的 RTT。這里有一個問題,如果發(fā)出的包出現(xiàn)重傳,計算就變得復(fù)雜起來。無法得知收到的確認 ACK 是對第一次包還是重傳包的的確認。
3.2 PAWS:防止回繞的序號。
我們知道序列號只有32位,而每增加2^32個序列號后就會重復(fù)使用原來用過的序列號。假設(shè)我們有一條高速網(wǎng)絡(luò),通信的主機雙方有足夠大的帶寬用來快速的傳輸數(shù)據(jù)。例如1Gb/s(TCP 的窗口經(jīng)過窗口縮放可以最高到 1GB(2^30))的速率發(fā)送報文段,則不到35秒鐘數(shù)據(jù)字節(jié)的序列號就會重復(fù)。這樣對TCP傳輸帶來混亂的情況。這種情況之出現(xiàn)在高速鏈路上。而采用時間戳選項,可以很容易的分辨出相同序列號的數(shù)據(jù)報,哪個是最近發(fā)送,哪個是以前發(fā)送的。
4. Timestamps 選項在三次握手中造成的RST
三次握手中的第二步,如果服務(wù)端回復(fù) SYN+ACK 包中的 TSecr 不等于握手第一步客戶端發(fā)送 SYN 包中的 TSval,客戶端在對 SYN+ACK 回復(fù) RST。示例包如下所示。
5.使用Timestamps 選項的注意事項
- Timestamps是雙向的,必須雙方都開啟才有效
- Timestamps也會溢出回繞
- timestamps 值是一個單調(diào)遞增的值,但是兩端 timestamps 值增加的間隔也可能步調(diào)不一致
總結(jié)
以上是生活随笔為你收集整理的重学TCP协议(7) Timestamps 选项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到皮鞋是什么意思
- 下一篇: 梦到化妆是什么意思