当前位置: 首页 > 知识库问答 >
问题:

TCP:半封闭连接上的数据

邵博艺
2023-03-14

我正在实现一个TCP堆栈,并且遇到了半关闭连接的问题。

我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送“FIN”消息。然后,服务器确认来自客户端的数据,发送自己的一些数据,然后才关闭其一半的连接(发送“FIN”)。

问题是,客户端没有确认服务器在半封闭连接上发送的数据,也没有确认其最终的“FIN”消息。根据netstat,客户端处于FIN_WAIT2状态。在服务器不发送任何数据的相同情况下,情况会很顺利。有问题的客户端是netcat,所以我认为问题出在我这边:)

此处提供屏幕截图。此处提供了实际的PCAP文件。

我的问题是,一般来说,我是否应该对半封闭连接上发送的数据期望ACKS;特别是,我在上面的例子中做错了什么。

任何帮助都将不胜感激!

共有2个答案

凌经赋
2023-03-14

FIN-WAIT-2意味着它看到了ACK,因此序列号必须正确,但也意味着它没有在同一段中看到FIN。如果FIN计数为1字节,则LEN应为1?

糜野
2023-03-14

也许服务器应该发送ACK=2561而不是FIN/ACK中的2562?

 类似资料:
  • 提前致谢

  • 问题内容: 我正在实现一个小型TCP服务器。我怎么知道我的一位客户是否关门?我应该只是尝试读取或写入并检查是否为零? 问题答案: 该线程“ 的最佳方式可靠地检测TCP连接被关闭 ”,使用了“ ”(也可见于或或许多其他情况下): 为了检测超时,建议: 更新2019:tuxedo25在评论中提到: 在Go 1.7+中,零字节读取立即返回,并且永远不会返回错误。 您必须读取至少一个字节。 参见commi

  • 问题内容: 我有一个ResultSet方法,该方法将最终关闭连接: 但是我得到了错误: 编辑整个ErrorTrace 我在做什么不对? 问题答案: 您将返回一个a 以便将来使用,但是在使用它之后,您将关闭连接,因此由于资源已关闭,因此您无法检索数据。请注意,即使您在或代码块中返回了某些内容,也始终会调用它, 详细来说,这就是问题所在: 打开连接 准备一份声明 获取结果集 返回结果集 关闭连接(可能

  • 我在Android(2.3.x)上使用带有的,将HTTP请求发送到我的REST服务器(嵌入式Jetty)。 大约200秒的空闲时间后,服务器使用[FIN]关闭TCP连接。Android客户端以[ACK]作为响应。这应该并且确实使套接字处于半关闭状态(服务器仍在监听,但不能发送数据)。 我希望当客户端再次尝试使用该连接时(通过),将检测到半关闭状态,关闭客户端的套接字(从而发送它的[FIN/确认字符

  • 我试图使用Akka和Scala编写一个TCP服务器,它将实例化参与者,并在客户端分别连接和断开连接时停止参与者。我有一个TCP绑定执行器, 上面实例化上的TCP侦听器,并将处理程序参与者注册到每个连接。 我没有在附近配置的非Windows机器上进行测试,因为我认为这与我在Windows上运行有关,因为在搜索之后,我发现了一个仍然打开的bug--https://github.com/akka/akk

  • 我已经配置了HAProxy(1.5.4,但我也尝试了1.5.14),以便在TCP模式下平衡5672端口上公开AMQP协议(WSO2 Message Broker)的两台服务器。客户端通过Haproxy创建并使用到AMQP服务器的永久连接。 我更改了客户端和服务器TCP keepalive超时,设置net.ipv4.tcp_keepAlive_time=120(CentOS 7)。 在HAProxy