客户端被杀死或崩溃时由内核发送的TCP RST

时间:2017-06-05 05:17:43

标签: c linux sockets tcp network-programming

我在同一台服务器(Linux机器)上运行的客户端和服务器以及它们之间的TCP连接。 我观察到当我杀死客户端时,内核/操作系统在客户端被杀后2秒后发送RST数据包。 我的问题是哪个内核参数os Socket选项控制这个计时器(2秒)?

2 个答案:

答案 0 :(得分:0)

UNIX Network programming Volume 1 Section Generic socket options中所述,如果客户端被杀死,则TCP将通过连接发送FIN。

答案 1 :(得分:0)

在正常的连接终止中,通常不会在对等体之间发送RSTFIN 。当您杀死客户端时,将在连接上发送FIN,以指示服务器该客户端将不再发送任何数据。

但是服务器显然没有注意客户端被杀死时收到的FIN ie 它需要在套接字上尝试recv并做出反应到文件末尾的指示(通常意味着close自己的套接字)。随后,服务器尝试将send数据发送到客户端,但是连接已关闭。 是导致发送RST数据包的原因。

RST的意思是(大致)“没有可用的活动连接来接收您正在发送的数据;发送更多数据毫无意义。”

因此,RST的时间安排很可能取决于服务器下次尝试send到客户端的时间,而不是基于任何内核/操作系统配置设置。如果服务器不尝试send 并且也不尝试close,则连接应该永远处于空闲状态,并且不会发送RST