本文档介绍为什么最好不使用命令ip ospf mtu-ignore。
OSPF MTU和LSA打包技术说明解释了与最大传输单位(MTU)相关的一个原因,即开放最短路径优先(OSPF)邻接未达到FULL状态。
当接口MTU值较高时(例如9000),而可通过此接口转发的数据包大小的实际值为1500时,可能会发生这种情况。
如果运行OSPF的链路两端的MTU不匹配,则OSPF邻接关系将不会形成,因为MTU值在数据库描述(DBD)数据包中携带,并在另一端检查。
DBD数据包(也在RFC 2328中指定)描述了OSPF链路状态数据库的内容:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version # | 2 | Packet length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | AuType |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface MTU | Options |0|0|0|0|0|I|M|MS
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DD sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+- -+
| |
+- An LSA Header -+
| |
+- -+
| |
+- -+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
RFC 2328的附录A.3.3.将接口MTU描述为:最大IP数据报的大小(以字节为单位),可从关联接口发送,而不进行分段。
当初始化OSPF邻接关系时,连接到链路的路由器会在DBD数据包中交换其接口MTU值。
RFC 2328第10.6节规定:如果Database Description数据包中的Interface MTU字段指示的IP数据报大小大于路由器在接收接口上可以接受的大小,而不进行分段,则Database Description数据包将被拒绝。
使用debug ip ospf adj命令时,您可以看到这些DBD数据包的到达。
在本例中,两个OSPF邻居之间的MTU值不匹配。此路由器的MTU 1600:
OSPF: Rcv DBD from 10.100.1.2 on GigabitEthernet0/1 seq 0x2124 opt 0x52 flag 0x2
len 1452 mtu 2000 state EXSTART
OSPF: Nbr 10.100.1.2 has larger interface MTU
另一台OSPF路由器的接口为MTU 2000:
OSPF: Rcv DBD from 10.100.100.1 on GigabitEthernet0/1 seq 0x89E opt 0x52 flag 0x7
len 32 mtu 1600 state EXCHANGE
OSPF: Nbr 10.100.100.1 has smaller interface MTU
DBD数据包会持续重新传输,直到OSPF邻接关系最终被破坏。
OSPF: Send DBD to 10.100.1.2 on GigabitEthernet0/1 seq 0x9E6 opt 0x52 flag 0x7
len 32
OSPF: Retransmitting DBD to 10.100.1.2 on GigabitEthernet0/1 [10]
OSPF: Send DBD to 10.100.1.2 on GigabitEthernet0/1 seq 0x9E6 opt 0x52 flag 0x7
len 32
OSPF: Retransmitting DBD to 10.100.1.2 on GigabitEthernet0/1 [11]
%OSPF-5-ADJCHG: Process 1, Nbr 10.100.1.2 on GigabitEthernet0/1 from EXSTART to
DOWN, Neighbor Down: Too many retransmissions
接口命令ip ospf mtu-ignore禁用此检查OSPF DBD数据包中的MTU值。因此,使用此命令可使OSPF邻接关系达到FULL状态,即使两台OSPF路由器之间的接口MTU不匹配。
此命令是随Cisco Bug ID CSCdr20891引入的。
此命令确实会影响Cisco Bug ID CSCsk86476之后OSPF数据包的实际数据包大小。
此命令不影响传输的IP数据包的实际数据包大小,也不影响通过路由器的流量的路径MTU发现行为。使用命令可能有助于建立OSPF邻接关系,但对于大型IP数据包,通过路由器的中转流量仍然会受到影响。
在Cisco Bug ID CSCse01519之前,OSPF DBD数据包的大小限制为1500字节。这使得OSPF即使在使用OSPF mtu-ignore功能时,在MTU不匹配的情况下也能正常工作。
未使用Cisco Bug ID CSCse01519和ip ospf mtu-ignore命令后,当实际OSPF数据包大于1500字节时,OSPF邻接可能会失败。
在Cisco Bug ID CSCse01519和ip ospf mtu-ignore命令之后,在Cisco Bug ID CSCsk86476之前,可能会丢弃大(> 1500字节)的OSPF数据包。这阻止了OSPF邻接关系达到FULL状态。
在Cisco Bug ID CSCsk86476之后,如果使用ip ospf mtu-ignore命令,则路由器将回退到为OSPF数据包使用一个安全的最大MTU值。该值为1300字节。由于此值很小,这可能影响OSPF泛洪。更大的OSPF数据包对OSPF泛洪更有效。
所有情况下的正确解决方案都是在接口上配置正确的MTU。该MTU值在链路两端的路由器上必须匹配。