【问题标题】:Does TCP endpoint that has sent a FIN, still send keepalive?已发送 FIN 的 TCP 端点是否仍发送 keepalive?
【发布时间】:2013-08-09 05:37:07
【问题描述】:

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

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

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

例如:

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

会发生这种情况吗?

【问题讨论】:

    标签: networking tcp


    【解决方案1】:

    根据RFC-1122:

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

    发送FIN 只是表示不会再发送数据,而不是表示无法接收更多数据。如果发送 FIN 后的应用程序仍在等待数据,则 RFC 表明它可以发送一个 keep-alive 数据包以确保另一端仍然存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2019-06-09
      • 2021-02-25
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多