为什么BGP实现自己的keepalive而不使用tcp keepalive?


14

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

Answers:


19

TCP“ keepalive”是并非所有操作系统上都具有的功能。它不是TCP标准本身,也不可靠。RC1122对此加以说明,但明确指出:

实施者可以在其TCP实施中包括“保持活动”,尽管这种做法未被普遍接受。如果包括保持活动,则应用程序必须能够为每个TCP连接打开或关闭它们,并且必须默认为关闭。

更重要的是:

切记,不包含任何数据的ACK段不会被TCP可靠地传输,这一点非常重要。因此,如果实施了保持活动机制,则绝不能将对任何特定探测器的响应失败解释为无效连接。

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

为了使BGP正常运行,您需要一种方法来实现特定的计时器,以确保可靠地发送keepalive(发送消息的频率)并保持(在此时间之后,我们宣布对等端无响应)。因此,BGP使用它自己的keepalive消息,与TCP keepalive相比,开销不大(19字节)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.