5

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

如果它可以,那么它与“在 FIN 之后发送东西”的声明相矛盾,即使它是 keepalive 但不是数据。

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

例如:

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

这会发生吗?

4

1 回答 1

5

根据RFC-1122

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

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

于 2013-08-07T18:29:38.323 回答