TCP 的保活定时器
引言
可以没有任何数据流过一个空闲的 TCP 连接。
这意味着我们可以启动一个客户与服务器建 立一个连接,然后离去数小时、数天、数个星期或者数月,而连接依然保持。中间路由器可以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保持建立。
然而,很多时候一个服务器希望知道客户主机是否崩溃并关机或崩溃又重新启动。许多实现提供的保活定时器可以提供这种能力。然而保活并不是 TCP 规的一部分。
Host Requirements RFC提供了3个不使用保活定 时器的理由:
- 在出现短暂差错的情况下,这可能会使一个非常好的连接释放掉;
- 它们耗费不必要的带宽;
- 在按分组计费的情况下会在互联网上花掉更多的钱。 然而,许多实现提供了保活定时器。
还有一个理由
在连接两个端系统的网络出现临时故障的时候,保活选项会引起一个实际上很好的连接终止。例如,如果在一个中间路由器崩溃并重新启动时发送保活探查,那么TCP 会认为客户的主机已经崩溃,而实际上所发生的并非如此。