已发送 FIN 的 TCP 端点是否仍发送 keepalive?

Nik*_*hil 5 networking tcp

发送一个 FIN 表示该端不会发送任何数据。但是它可以发送 TCP keepalive 吗?

如果可以,那么即使它是保活但不是数据,它也与“在 FIN 之后发送内容”的声明相矛盾。

如果它不发送keepalive,它就不会检测到另一端是否消失了。

例如:

客户端发送 FIN 并得到 ACK。然后服务器发送了一个丢失的重置。客户端可以检测到服务器已消失的唯一方法是发送 keepalive,它将以重置进行响应,然后客户端关闭。

这会发生吗?

jxh*_*jxh 5

根据RFC-1122

只有在一个时间间隔内没有收到连接的数据或确认包时,才必须发送保活包。

发送FIN只是表示不会再发送数据,而不是不能再接收数据。如果发送后的应用程序FIN仍然在等待数据,则 RFC 指示它可以发送一个保活数据包以确保另一端仍然存在。