Networking 如果没有数据,TCP断开连接

Networking 如果没有数据,TCP断开连接,networking,tcp,disconnect,Networking,Tcp,Disconnect,我已经查看了TCP协议Wiki,但没有发现,如果长时间内没有数据传输,套接字连接是否会超时。我是说。。不会有物理问题,但两台计算机在一段时间内将没有数据可以互相发送。连接将如何继续存在?是否会有一些低级别的数据传输来帮助it部门理解它没有被破坏 谢谢大家!!抱歉,如果问题是哑的。连接通常使用保持打开。连接通常使用保持打开。不,它不会。如果您需要任何一方断开数据传输的连接,您需要自己实现,使用某种保持活动的机制。不,不会。如果您需要任何一方断开数据传输的连接,您需要使用某种保持活动的机制自己实现它

我已经查看了TCP协议Wiki,但没有发现,如果长时间内没有数据传输,套接字连接是否会超时。我是说。。不会有物理问题,但两台计算机在一段时间内将没有数据可以互相发送。连接将如何继续存在?是否会有一些低级别的数据传输来帮助it部门理解它没有被破坏


谢谢大家!!抱歉,如果问题是哑的。

连接通常使用保持打开。

连接通常使用保持打开。

不,它不会。如果您需要任何一方断开数据传输的连接,您需要自己实现,使用某种保持活动的机制。

不,不会。如果您需要任何一方断开数据传输的连接,您需要使用某种保持活动的机制自己实现它。

TCP连接将保持打开状态,直到两端都关闭为止


尽管要注意,防火墙,尤其是NAT网关,经常会超时其TCP连接条目,这意味着如果您的连接通过一个条目,如果网关删除了该TCP连接的映射,则发送数据可能会出错。只有从TCP连接读取网关超时时才会被检测到,除非您的应用程序协议中有某种心跳或启用TCP keepalive。

TCP连接将保持打开状态,直到两端都关闭它


尽管要注意,防火墙,尤其是NAT网关,经常会超时其TCP连接条目,这意味着如果您的连接通过一个条目,如果网关删除了该TCP连接的映射,则发送数据可能会出错。只有从TCP连接读取网关超时时才会被检测到,除非您的应用程序协议中有某种心跳或启用TCP keepalive。

没有通过网络发送数据来维护TCP连接。您可以通过从对等方发送零字节数据包或启用套接字选项让操作系统定期为您发送数据包来发送网络层保持活动。在我看来,应用层保持有效您的应用协议管理它提供了比传输层机器更好的设计/可靠性

在设计基于TCP的应用程序协议以获得最大的可靠性时,通常需要在协议设计中加入某种非操作NOOP、ping和heartbeat

这一点非常重要,因为例如,如果您的服务器正在侦听来自客户端的请求,而客户端在建立连接后关闭,则TCP会话实际上是孤立的,并且您的服务器可能会永远侦听。如果从未发送或接收数据,则无法检测到连接中断

如果服务器至少定期发送noop/ping/heartbeats,则传出请求将触发TCP层重传/超时机制,然后服务器将能够检测到死连接。如果您的应用程序发送应用程序层ping或hi,您感觉如何?消息您可以进一步使用它来查询对等方的状态,而不仅仅是底层连接


例如,如果对等机卡在无限循环中或其磁盘驱动器着火,仅TCP keepalives无法帮助您理解并解决根本问题。

不会通过网络发送数据来维护TCP连接。您可以通过从对等方发送零字节数据包或启用套接字选项让操作系统定期为您发送数据包来发送网络层保持活动。在我看来,应用层保持有效您的应用协议管理它提供了比传输层机器更好的设计/可靠性

在设计基于TCP的应用程序协议以获得最大的可靠性时,通常需要在协议设计中加入某种非操作NOOP、ping和heartbeat

这一点非常重要,因为例如,如果您的服务器正在侦听来自客户端的请求,而客户端在建立连接后关闭,则TCP会话实际上是孤立的,并且您的服务器可能会永远侦听。如果从未发送或接收数据,则无法检测到连接中断

如果服务器至少定期发送noop/ping/heartbeats,则传出请求将触发TCP层重传/超时机制,然后服务器将能够检测到死连接。如果您的应用程序发送应用程序层ping或hi,您感觉如何?消息您可以进一步使用它来查询对等方的状态,而不仅仅是底层连接


例如,如果对等机陷入无限循环或其磁盘驱动器着火,仅TCP keepalives无法帮助您理解和解决根本问题。

您需要了解一些编程任务吗?否则就更好了
er适用于服务器故障通信。。它与C++、Boosi::ASIO相关,你需要它来了解一些编程任务吗?否则,它更适合于serverfault.comm。。它与C++、Boosi::ASIO相关,要保持特殊的连接。根据标准TCP协议,Keep alives不会阻止连接关闭。Ibrahim,感谢链接!所以,连接会在一段时间后关闭,对吗?因为默认情况下,keep-alive机制是关闭的,这并不是我所能说的。只是TCP实现可以选择实现keepalive机制。你不能指望它就在那里,联系永远是开放的。根据标准TCP协议,Keep alives不会阻止连接关闭。Ibrahim,感谢链接!所以,连接会在一段时间后关闭,对吗?因为默认情况下,keep-alive机制是关闭的,这并不是我所能说的。只是TCP实现可以选择实现keepalive机制。你不能指望它就在那里。对不起,我不明白。。keep alives能帮我保持连接畅通吗?反之亦然?谢谢你的回答。对不起,我不明白。。keep alives能帮我保持连接畅通吗?反之亦然?谢谢你的回答。我想这清楚地回答了我的问题:谢谢。据我所知,当防火墙关闭连接时,我在尝试发送数据时只会收到套接字错误?是的,您会收到某种错误。这可能需要一段时间。有人对NAT和防火墙的行为进行了一些研究,得出的结论是,每30秒一个数据包将使您的映射基本上对所有首先工作的连接保持打开状态。我想这清楚地回答了我的问题:谢谢。据我所知,当防火墙关闭连接时,我在尝试发送数据时只会收到套接字错误?是的,您会收到某种错误。这可能需要一段时间。对NAT和防火墙的行为进行了一些研究,得出的结论是,每30秒一个数据包将使您的映射基本上对所有首先工作的连接保持打开状态。