tcp出現rst的情況

2021-07-24 10:59:52 字數 1104 閱讀 4970

正常情況tcp四層握手關閉連線,rst基本都是異常情況,整理如下:

1. gfw 

2. 對方埠未開啟,發生在連線建立

如果對方sync_backlog滿了的話,sync簡單被丟棄,表現為超時,而不會rst

3. close socket 時recv buffer 不為空

例如,客戶端發了兩個請求,伺服器只從buffer 讀取第乙個請求處理完就關閉連線,tcp層認為資料沒有正確提交到應用,使用rst關閉連線。

3. 移動鏈路

流動網路下,國內是有5分鐘後就**信令,也就是im產品,如果心跳》5分鐘後伺服器再給客戶端發訊息,就會收到rst。也要查流動網路下im 保持<5min 心跳。

4. 負載等裝置

負載裝置需要維護連線**策略,長時間無流量,連線也會被清除,而且很多都不告訴兩層機器,新的包過來時才通告rst。

曾經被它折騰沒轍,因此開啟每2秒一次tcp keepalive,固定5分鐘tcp連線**,而且發現連線出錯時,重發之前10s內訊息。

5. so_linger 應用強制使用rst 關閉

該選項會直接丟棄未傳送完畢的send buffer,可能造成業務錯誤,慎用;當然內網服務間http client 在收到應該時主動關閉,使用改選項,會節省資源。

好像曾經測試過haproxy 某種配置下,會使用rst關閉連線,少了網路互動而且沒有time_wait 問題

6. 超過超時重傳次數、網路暫時不可達

7. time_wait 狀態

tw_recycle = 1 時,sync timestamps 比上次小時,會被rst

7. 設定 connect_timeout

應用設定了連線超時,sync 未完成時超時了,會傳送rst終止連線。

8. 非正常包

連線已經關閉,seq 不正確等

9. keepalive 超時

公網服務tcp keepalive 最好別開啟;流動網路下會增加網路負擔,切容易掉線;非流動網路核心isp裝置也不一定都支援keepalive,曾經也發現過廣州那邊有個核心節點就不支援。

10. 待整理

參考:setsockopt :so_linger 選項設定***

原 幾種tcp連線中出現rst的情況

幾種TCP連線中出現RST的情況

應該沒有人會質疑,現在是乙個網路時代了。應該不少程式設計師在程式設計中需要考慮多機 區域網 廣域網的各種問題。所以網路知識也是避免不了學習的。而且筆者一直覺得tcp ip網路知識在乙個程式設計師知識體系中必需占有一席之地的。在tcp協議中rst表示復位,用來異常的關閉連線,在tcp的設計中它是不可或...

幾種TCP連線中出現RST的情況

在tcp協議中rst表示復位,用來異常的關閉連線,在tcp的設計中它是不可或缺的。傳送rst包關閉連線時,不必等緩衝區的包都發出去,直接就丟棄快取區的包傳送rst包。而接收端收到rst包後,也不必傳送ack包來確認。其實在網路程式設計過程中,各種rst錯誤其實是比較難排查和找到原因的。下面列出幾種會...

幾種TCP連線中出現RST的情況

應該沒有人會質疑,現在是乙個網路時代了。應該不少程式設計師在程式設計中需要考慮多機 區域網 廣域網的各種問題。所以網路知識也是避免不了學習的。而且筆者一直覺得tcp ip網路知識在乙個程式設計師知識體系中必需占有一席之地的。在tcp協議中rst表示復位,用來異常的關閉連線,在tcp的設計中它是不可或...