如果尝试在没有匹配 MTU 的情况下配置邻居邻接,路由器将无法成为邻居。我认为这是为了保护路由协议不受它自身的影响,但我不明白它是从什么地方拯救自己的?如果不匹配 MTU,结果会(可能)是什么?
为什么 MTU 需要匹配 EIGRP 和 OSPF 等内部链路状态路由协议?
皮特说:
我想不出你需要这个的情况。我只是想知道在这些路由协议中进行显式检查的逻辑是什么。
简答
路由协议是互联网上一些最基本的构建块;我们需要它们在所有可能的情况下都非常可靠。在不匹配的 MTU 上建立 OSPF 或 EIGRP 邻接关系没有好处。
路由协议必须从路由器的转发路径中删除任何潜在的不匹配 MTU。
长答案
我可以想到三种可能的情况,您会发现 IGP MTU 不匹配......
- 第 2 层无意的 MTU 不匹配(例如,如果有人不小心在串行线路上不匹配 MTU,或者不同供应商在同一媒体上具有不同的默认 MTU)
- 匹配第 2 层 MTU,但路由器实现存在错误计算所需接口 IP MTU 的错误
- 故意的 MTU 不匹配
IP MTU 与第 2 层 MTU 直接相关(至少对于上述案例 1)。无论我们做什么,我们总是受制于减轻无意的第 2 层 MTU 不匹配带来的问题,因为没有第 2 层 MTU 发现机制(与具有 ICMP 错误消息的 IP 不同)。
这意味着我们必须尽一切可能避免第 2 层 MTU 不匹配,即使上述案例 2 和案例 3 是缓解案例 1 问题的牺牲品。案例 1 具有巨大的影响,除非我们解决它;即,仅仅因为我们允许不匹配的 MTU 就对所有流量进行黑洞处理。
我们总是限于链接上的最小公分母。大于接口接收 MTU 的帧将被静默丢弃,路由器无法知道MTU 是故意不匹配还是意外发生。
因此,EIGRP 和 OSPF 需要有效的第 2 层邻接注释 1(包括 MTU)。
如果不匹配 MTU,结果会(可能)是什么?
在 RFC 2329 Page 4 中引用John Moy(OSPF 的作者):
- 所有 IP 转发的问题
- OSPF 问题
还从OSPF 邮件列表中引用了他的话:
注 1有些人将邻接的含义误解为严格的 IP 路由协议概念。这个断言忽略了这样一个现实,即一切(包括 IP)都需要匹配的第 2 层 MTU,才能使第 2 层域正常工作。
路由协议最重要的功能之一是构建有效的 FIB/CEF/转发表。该表将通过路由协议学习到的信息映射到第 2 层重写信息。同一物理链路上的那些第 2 层关系也就是思科所说的邻接关系。
根据OSPF RFC 2328 (10.6):
如果数据库描述数据包中的接口 MTU 字段指示的 IP 数据报大小大于路由器在接收接口上可以接受且不分片的 IP 数据报大小,则数据库描述数据包将被拒绝。
简单的答案是,该标准旨在仅丢弃太大的数据报,而不是将它们分段。碎片化的流量会增加设备的 CPU 负担并降低性能,因为碎片化需要额外的流量。考虑到动态路由协议的目标是它是一个稳定且快速收敛的协议,任何与这些目标相反的东西都应该被消除。将 MTU 的要求设置为匹配有助于强制执行此性能要求。
更多来自 OSPF RFC:
4.3. Routing protocol packets
The OSPF protocol runs directly over IP, using IP protocol 89.
OSPF does not provide any explicit fragmentation/reassembly
support. When fragmentation is necessary, IP
fragmentation/reassembly is used. OSPF protocol packets have
been designed so that large protocol packets can generally be
split into several smaller protocol packets. This practice is
recommended; IP fragmentation should be avoided whenever
possible.