本文說明為什麼最好不要使用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節規定:如果資料庫說明資料包中的Interface MTU欄位指示接收介面上大於路由器可以接受而不進行分段的IP資料包大小,則拒絕資料庫說明資料包。
使用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路由器之間的介面MTU不匹配,使用此命令也允許OSPF鄰接關係達到FULL狀態。
此命令是以Cisco錯誤ID CSCdr20891匯入。
此命令會影響Cisco錯誤ID CSCsk86476後OSPF資料包的實際資料包大小。
此命令不會影響傳輸的IP資料包的實際資料包大小,也不會影響通過路由器的流量的路徑MTU發現行為。使用該命令可能有助於啟動OSPF鄰接關係,但是通過路由器的傳輸流量仍可能會對大型IP資料包產生影響。
在思科錯誤ID CSCse01519之前,OSPF DBD資料包的大小限製為1500位元組。這樣在使用OSPF mtu-ignore功能時,即使在MTU不匹配的情況下,OSPF也能正常工作。
如果沒有使用Cisco錯誤ID CSCse01519和ip ospf mtu-ignore命令,則當實際OSPF資料包大於1500位元組時,OSPF鄰接可能會失敗。
在思科錯誤ID CSCse01519之後,使用ip ospf mtu-ignore指令,在思科錯誤ID CSCsk86476之前,可能會有那麼大(> 1500位元組)的OSPF封包遭捨棄。這導致OSPF鄰接無法達到FULL狀態。
在思科錯誤ID CSCsk86476後,如果使用ip ospf mtu-ignore指令,路由器將回退到為OSPF封包使用一個安全最大MTU值。此值為1300位元組。由於此值相當小,因此可能會影響OSPF泛洪。OSPF資料包越大,OSPF泛洪效率越高。
在所有情況下,正確的解決方案是在介面上配置正確的MTU。在鏈路兩端的路由器上,此MTU值必須匹配。