我在同一台服务器(Linux机器)上运行的客户端和服务器以及它们之间的TCP连接。 我观察到当我杀死客户端时,内核/操作系统在客户端被杀后2秒后发送RST数据包。 我的问题是哪个内核参数os Socket选项控制这个计时器(2秒)?
答案 0 :(得分:0)
如UNIX Network programming Volume 1 Section Generic socket options中所述,如果客户端被杀死,则TCP将通过连接发送FIN。
答案 1 :(得分:0)
在正常的连接终止中,通常不会在对等体之间发送RST
。 FIN
是。当您杀死客户端时,将在连接上发送FIN
,以指示服务器该客户端将不再发送任何数据。
但是服务器显然没有注意客户端被杀死时收到的FIN
( ie 它需要在套接字上尝试recv
并做出反应到文件末尾的指示(通常意味着close
自己的套接字)。随后,服务器尝试将send
数据发送到客户端,但是连接已关闭。 那是导致发送RST
数据包的原因。
RST
的意思是(大致)“没有可用的活动连接来接收您正在发送的数据;发送更多数据毫无意义。”
因此,RST
的时间安排很可能取决于服务器下次尝试send
到客户端的时间,而不是基于任何内核/操作系统配置设置。如果服务器不尝试send
并且也不尝试close
,则连接应该永远处于空闲状态,并且不会发送RST