为什么BGP协议要求其数据包大小小于4096个二进制八位数?
如果BGP报文超过4096字节,该如何处理?
发布于 2016-01-09 09:54:43
“为什么BGP协议将其数据包大小限制为小于4096个八位字节?”
托尼·李在这篇IDR thread中给出了官方答案。引用他的回答:
不同于指定的4k邮件大小限制。如果一个
实现发送超过4k的消息,然后发送其他消息
实现将无法解析它们。如果一个实现
不能接收4k消息,那么它也不能
互操作。
1a)有一个固定的大小是好的,因为它使协议
实现起来很简单。中具有复杂性是没有意义的。
实现,如果它没有提供任何好处。大消息不会
提供了极大的好处,因为它们需要足够大以便于携带
路径属性和关联的前缀。为此,4k是
可能到目前为止已经足够了。
1b)从历史上看,4k被认为有点浪费。当然,它
与使用碎片化的EGP相比,非常简单
数据包。想要解析一个16k的巨型数据吗?想调试一下吗?信任
我,这一点都不好玩。
TCP
大小。一个实现可以完全自由地组合任意数量的
消息,每个消息都在4k限制内。实现
然后,可以在其TCP套接字中塞入任意数量的消息,直到
TCP的缓冲限制。
2a)因此,消息大小不是性能限制,除非当
一个实现实际上可能会过度填充一条消息。乡亲们
维护当前实现可能会涉及到以下问题:
或者他们看不到这个。因此,总而言之,是的,4k消息大小限制对于
BGP,它的行为方式和它所做的工作。这
不一定适用于其他协议(例如OSPF)
其中4k超过了最常见的MTU。在这种情况下,你最终会
碎片化,这是不好的。
如何处理超过4096的BGP报文?
在现实世界中,我们通过记录BGP格式错误的消息来处理这种情况,然后通过发送带有代码消息报头错误(1)和子代码错误消息长度(2)的BGP通知来终止会话。终止会话是BGP错误处理的方法之一。您可以参考BGP错误处理rfc7606。
发布于 2015-12-16 08:08:35
说明书是怎么写的。有关更多详细信息,请查看http://www.faqs.org/rfcs/rfc1771.html。这意味着,从理论上讲,您不应该收到大于4k的BGP数据包。也许他们认为发送的包含大型路由表更新之类的大型数据包不应该干扰大型数据传输,因此他们将数据包拆分以利用不同的队列。不过,这可真是个不错的选择。:)
https://stackoverflow.com/questions/33830210
复制相似问题