之前在《深入理解并行編程》的群里,有個小米的兄弟問了一個問題,服務器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.
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
服務器
+關注
關注
14文章
10253瀏覽量
91487 -
協議棧
+關注
關注
2文章
146瀏覽量
34590 -
報文
+關注
關注
0文章
39瀏覽量
4357
原文標題:干貨 | tcp協議棧中rst報文的seq跳變問題
文章出處:【微信號:ZTEdeveloper,微信公眾號:中興開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
14-TCP 協議(連接異常與RST)
1. RST 段當 TCP連接出現嚴重的錯誤時,必須釋放連接。通過將 TCP 首部中的 RST 標志位置 1,就可以通知對端發生錯誤,以終止
發表于 07-24 10:01
怎么使用stm32的LWIP協議棧進行報文調度算法的開發?
各位朋友好,我的導師要求我設計一個新的報文調度算法,能夠實現不同優先級的報文在發送的過程中,實現高優先級報文的低延時和低抖動。要求使用stm32的LWIP
發表于 04-07 04:35
LWIP TCP報文基礎知識及其LWIP中TCP協議的實現
LWIP TCP報文基礎TCP協議(Transmission Control Protocol)傳輸控制協議在LWIP
發表于 10-18 14:54
tcp報文格式詳解
TCP(Transmission ControProtocol)傳輸控制協議是一種面向連接的、可靠的、基于字節流的傳輸層協議。TCP報文是
發表于 12-08 11:11
?3.4w次閱讀
Microchip TCP/IP協議棧
的開發人員可以很容易找到許多Microchip產品的商業和非商業的TC P/IP實現方案。本應用筆記詳細說明了Microchip公司自己免費提供的TC P/IP協議棧。 Microchip TCP/IP
發表于 04-20 16:04
?5次下載
Microchip TCP/IP精簡協議棧
本應用筆記描述 Microchip 傳輸控制協議 / 互聯網協議(TCP/IP)精簡協議棧庫的結構和接口,并提供部分簡單的演示應用。實現
發表于 04-01 15:36
?18次下載
Microchip TCP/IP協議棧
。感興趣的開發人員可以很容易找到許多 Microchip 產品的商業和非商業的TCP/IP 實現方案。本應用筆記詳細說明了 Microchip 公司自己免費提供的 TCP/IP 協議棧
發表于 04-02 14:28
?22次下載
Linux網絡技術中最核心的部分--TCP/IP協議棧
今天給大家介紹Linux網絡技術中最核心的部分--TCP/IP協議棧 。 我們先看一下抽象的網絡協議棧模型 再按分層思想看Linux內核
關于tcp協議棧中rst報文的seq跳變問題
評論