0

为什么 BGP 协议限制它的数据包大小小于 4096 字节?</p>

如果BGP数据包大小超过4096字节,该如何处理?</p>

4

2 回答 2

2

“为什么 BGP 协议将其数据包大小限制为小于 4096 个八位字节?”

Tony Li 在这个IDR 线程中给出了官方答案。引用他的回答:

  1. 首先,实现不应该使用
    与指定的 4k 消息大小限制不同的消息大小。如果一个
    实现发送超过 4k 的消息,那么其他
    实现将无法解析它们。如果一个实现
    无法接收 4k 消息,那么它也将无法
    互操作。

1a) 具有固定大小是好的,因为它使协议
实现变得容易。
如果它没有提供任何好处,那么在实现中具有复杂性是没有意义的。大消息并不能
带来很大的好处,因为它们需要足够大以承载
路径属性和相关的前缀。为此
,迄今为止,4k 可能就足够了。

1b) 从历史上看,4k 被认为有点浪费。当然,
与使用分段数据包的 EGP 相比,它非常简单
。关心解析一个 16k 的 jumbo-gram 吗?关心调试吗?相信
我,这并不好玩。

  1. 4k 消息大小完全独立于 TCP 窗口
    大小。一个实现可以完全自由地编写任意数量的
    消息,每条消息都在 4k 限制内。然后,该实现
    可以将任意数量的消息塞入其 TCP 套接字,直至该 TCP 的
    缓冲限制。

2a) 因此,消息大小不受性能限制,除非
实现实际上可能会溢出消息。维护
当前实现的人可能会在这里插话,看看他们是否
看到了这一点。所以,总而言之,是的,4k 消息大小限制对于
BGP
来说是一个很好的情况,因为它的行为方式和它所做的工作。这
不一定适用
于 4k 超过最常见 MTU 的其他协议(例如 OSPF) 。在这些情况下,您最终会出现
碎片化,这很糟糕。

如何处理大小超过 4096 的 BGP 数据包?

在现实世界中,我们通过记录 BGP 格式错误的消息来处理这种情况,然后通过发送带有代码 Message Header Error(1) 和子代码 Bad Message Length(2) 的 BGP 通知来终止会话。终止会话是BGP错误处理的方法之一。您可以参考 BGP 错误处理rfc7606

于 2016-01-09T01:54:43.107 回答
0

规范是如何编写的。查看http://www.faqs.org/rfcs/rfc1771.html了解更多详情。这意味着理论上您不应该收到大于 4k 的 BGP 数据包。也许他们认为发送的包含大型路由表更新等的大型数据包不应干扰大型数据传输,因此他们将数据包分解以利用不同的队列。不过,这完全是 SWAG。:)

于 2015-12-16T00:08:35.007 回答