之前在《深入理解并行編程》的群里,有個小米的兄弟問了一個問題,服務器A發包給服務器B,Seq是1,但是在未能收到服務器B的報文回復的情況下,發送了rst,但是rst報文中,對應的seq是1461,一堆人都在猜測,為什么seq跳變了,由于當時只看到一半的圖片,所以我讓他發送完整報文出來之后,我發現其實rst的seq不是1的原因,并不是因為跳變,而是正常的,因為發送給B的報文,長度為1460,但是這個報文沒有得到回復,所以在超時之后,應用程序關閉了這條連接,導致內核協議棧發送了一個rst報文,而rst報文選取seq的時候,并不是選取的確定已經發送的seq,而是當前連接已經用掉的seq,也就是當前seq,哪怕這個報文沒有收到回復,也會使用。
具體看代碼:
其中關注下報文的init過程:
那么傳入的seq是多少呢?
注釋寫得比較清楚,如果窗口沒有shrunk,也就是tp->snd_nxt 沒有out of window 的話,則取得就是tp->snd_nxt,而這個值,就是報文長度+1了,也就是1461.
-
服務器
+關注
關注
12文章
9596瀏覽量
86952 -
協議棧
+關注
關注
2文章
145瀏覽量
33953 -
報文
+關注
關注
0文章
39瀏覽量
4130
原文標題:干貨 | tcp協議棧中rst報文的seq跳變問題
文章出處:【微信號:ZTEdeveloper,微信公眾號:中興開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
14-TCP 協議(連接異常與RST)
怎么使用stm32的LWIP協議棧進行報文調度算法的開發?
LWIP TCP報文基礎知識及其LWIP中TCP協議的實現
tcp報文格式詳解

Microchip TCP/IP協議棧

Microchip TCP/IP精簡協議棧

Microchip TCP/IP協議棧

評論