BGP不使用TCP keepalive,它使用自己的keepalive机制。我的问题是为什么bgp无法打开TCP的SO_KEEPaLIVE并快乐地生活?为什么不使用tcp keepalive并实现自己的keepalive?

#1 楼

TCP“ keepalive”是并非所有操作系统上都具有的功能。它不是TCP标准本身,也不可靠。 RC1122对此加以说明,但明确指出:尽管这种做法尚未普遍接受,但实现者可以在其TCP实现中包括“保持活动”。如果包含保持活动,则应用程序必须能够为每个TCP连接打开或关闭它们,并且
它们必须默认为关闭。


更重要的是:


非常重要的是要记住,TCP不能可靠地传输不包含数据的ACK段。
因此,如果keep-实现活动机制
绝不能将对任何特定探测器的响应解释为无效连接。


TCP keepalive以特殊方式使用TCP协议,发送没有附加数据的重复ACK。事实是:您不能指望它可用。还有一些防火墙会过滤TCP Keepalive。

要使BGP正常运行,您需要一种方法来实现用于keepalive的特定计时器(我们发送消息的频率)并保持(之后我们声明对等体(无响应))。因此,BGP使用它自己的keepalive消息,与TCP keepalive相比,开销并不大(19个字节)。