繁体   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