簡體   English   中英

為什么此TCP連接的一個端點發送帶有RST標志的數據包?

[英]Why is one endpoint of this TCP connection sending a packet with the RST flag?

我正在編寫一個嘗試執行以下操作的應用程序:

  1. 創建一個監聽可用端口的TCP服務器
  2. 創建一個連接到服務器的TCP套接字
  3. 讓服務器套接字將數據寫入客戶端
  4. 使服務器套接字關閉其連接的末端
  5. 讓客戶端向服務器寫一條消息

這就是問題所在。 當我嘗試運行該應用程序時,TCP交換如下所示:

前三個數據包建立三向握手 ,第四個和第五個數據包是服務器寫入的數據的傳輸及其確認。

如預期的那樣,服務器套接字發送一個設置了FIN標志的數據包,以指示它正在關閉其連接的末尾。 客戶端確認這一點,然后嘗試將其數據寫入套接字。 服務器立即發送RST數據包,過早終止連接。

為什么會這樣?

注意:以上捕獲是在Windows 8.1上完成的。

發送者無法在[FIN]之后發送數據。 這樣的動作將導致接收機發出[RST]。

FIN可能表明服務器已雙向完全關閉連接。 在這種情況下,如果它在連接上收到任何其他數據,它將發出RST。 這表明您有應用程序協議錯誤。 如果服務器發送答復然后關閉套接字,則客戶端無法通過該連接發送任何其他內容。

可能需要服務器使用SHUT_WR調用shutdown() ,然后在關閉套接字之前從客戶端讀取其他內容。 也許您只是做錯了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM