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

fin/ack终止序列的tcp定时器值

尉迟清野
2023-03-14

我有一个tcp客户端向tcp服务器发送HTTP POST请求。一旦建立连接,数据将从服务器传输到客户端。最后,服务器向客户端发送[FIN,ACK]。客户端发送一个ACK。37秒后,客户机发送[FIN,ACK],但客户机没有从服务器获得ACK,因此客户机继续在指数计时器上重新发送[FIN,ACK]。问题:是否允许客户端以37秒的延迟发送[FIN,ACK]?在这种情况下有没有标准的计时器值?在这种情况下,客户端的预期行为和服务器的预期行为是什么?

共有1个答案

蓬琦
2023-03-14

服务器发送FIN和客户端发送FIN之间的时间没有限制。在TCP中,连接的两个方向基本上是独立的,并且连接可以在任意长度的时间内保持这种“半开放”状态。

服务器没有理由不为客户端的FIN/ACK发送ACK。如果它由于某种原因破坏了TCB(可能是服务器进程关闭了套接字和/或退出,因此无法从客户端接收进一步的数据),它应该发送RST而不是ACK,但接收FIN/ACK后应该返回一些内容。如果没有返回任何内容,则表示服务器的TCP实现中存在错误。

 类似资料:
  • 正如维基百科上所写,关闭TCP连接应该使用FIN数据包-

  • 在Mac OS X 10.8机器上,我有一台Tomcat 7.0.40服务器和一台客户端,都在本地运行。通过三方握手建立TCP连接,然后立即从服务器发送FIN、ACK和RST。客户端收到“来自服务器的文件结束”或“连接重置”。 TCP序列: 客户端SYN 服务器SYN,确认 客户端确认 服务器[TCP窗口更新]确认字符 服务器FIN,确认字符 客户端确认字符 服务器[TCP Dup确认字符]确认字

  • 我试图使用Apache的Java async HTTP客户端库开发对HTTP请求的代理链接支持。这主要是通过提供一些自定义的SchemeIOSessionStrategy类来完成的。我发现在配置多个代理时,[FIN,ACK]序列和丢失连接重置存在一些问题。 如果没有配置代理,正在开发的代码将独占地使用Apache库。如果配置了多个代理,则自定义SchemeIOSessionStrategy类提供连

  • 有人能告诉我,为什么我不会得到一个异常,如果远程套接字正在关闭并发送FIN确认字符?Wireshark告诉我,FIN确认字符是由操作系统接收和发送的。 这是我的代码。我真的尝试了一切。 Instream是Socket.getInputStream(),Socket.getOutputStream()的外流。 连接将被我15秒的心跳关闭。

  • 让我们创建tcp连接建立、http请求和响应以及tcp连接终止的整个过程。 我的文件内容: /var/www/html/phplearn/send.php /var/www/html/phplearn/do。php 使用以下参数打开tcpump: sudo tcpdump-i本地主机127.0.0.1-w/tmp/dataDst。pcap 用curl发送信息 curl-d"userName=tes

  • 问题内容: 我有一个应用程序可以通过TCP接收相对稀疏的流量,而没有应用程序级别的响应。我认为TCP堆栈正在发送延迟的ACK(基于对网络数据包捕获的浏览)。建议为单个套接字禁用网络堆栈中的延迟ACK的推荐方法是什么?我看过了,但看来堆栈还是会改变我的脚下。 它运行在Linux 2.6内核上,我不担心可移植性。 问题答案: 你可以以后每次执行。看来只有在发送或接收数据时才复位;如果您不发送任何数据,