【发布时间】:2013-05-30 18:43:04
【问题描述】:
如果 TCP 客户端与 TCP 服务器建立 TCP 连接。然后 TCP 客户端永远不会向服务器发送任何数据包。
首先,我大致知道 TCP 服务器附近的防火墙可能会向它发送 RST。或者存在强制 TCP 连接结束的保持活动超时。但我不知道具体会发生什么?谁能解释一下?
第二,如果我不希望它结束,是否可以保持这个 TCP 连接?
我只是希望 TCP 服务器可以在它的 TCP 堆栈上保持这个 TCP 连接。但是我不想让 TCP 客户端参与进来,我不想让客户端发送 KEEP-ALIVE 消息。我不希望涉及任何其他第三方实体。我不在乎 TCP 客户端是否丢失了连接。我只是希望我在写TCP服务器源代码的时候,源代码能够在服务器端保持TCP连接。
注意:我的编程语言是LINUX C
谢谢!
【问题讨论】:
-
这是 TCP 的一种奇怪用法。为什么要在服务器上建立连接,而不关心客户端是否断开连接?还是我错过了什么?
-
是的,这很奇怪。我正在做研究工作,我想拆分TCP。
-
所以您希望您的服务器即使客户端退出也能保持 TCP 连接?拿起剪刀剪断电缆。否则,来自垂死客户的
FINs,或来自中间设备的RSTs 因无流量而超时,将会扼杀您的研究。 -
FIN来自垂死的客户是没有问题的。我可以处理得很好。我只是害怕来自节点的RST。对于RST,我可以使用 iptables 对其进行过滤。还有其他可能会终止 tcp 连接的可能性吗? -
@misteryes 在这种情况下,机器只会认为连接是打开的。如果您尝试在其上发送任何内容,它最终会因缺少确认而超时,如果防火墙或类似设备使连接超时,您也不会收到任何来自它的信息。而且您无法区分来自防火墙的 RST 和来自客户端的 RST。
标签: c linux networking tcp network-programming