BGP 不使用 TCP 保活,它使用自己的保活机制。我的问题是为什么bgp不能开启TCP的SO_KEEPaLIVE,开心的生活?为什么它不使用 tcp keepalive 并实现自己的 keepalive ?
为什么BGP实现了自己的keepalive而不是tcp keepalive?
网络工程
bgp
通讯协议
2021-07-14 15:59:56
1个回答
TCP“keepalive”是一项并非在所有操作系统上都存在的功能。它不在 TCP 标准中,也不可靠。RC1122指定了它,但明确指出:
实现者可以在他们的 TCP 实现中包含“keep-alives”,尽管这种做法并没有被普遍接受。如果包含保持连接,应用程序必须能够为每个 TCP 连接打开或关闭它们,并且它们必须默认为关闭。
更重要的是:
记住不包含数据的 ACK 段不能被 TCP 可靠地传输是非常重要的。因此,如果实现了保持活动机制,它不得将响应任何特定探测的失败解释为死连接。
TCP keepalive 以一种特殊的方式使用 TCP 协议,发送一个没有附加数据的重复 ACK。事实是:您不能指望它可用。还有一些防火墙过滤 TCP keepalive。
为了使 BGP 正常运行,您需要一种方法来实现可靠发送的保活(我们发送消息的频率)和保持(在此之后我们声明对等方无响应)的特定计时器。所以 BGP 使用它自己的 keepalive 消息,与 TCP keepalive 相比,这不是很多开销(19 字节)。