router ospf 1 network 192.168.1.0 0.0.0.255 area 0
一般我們在設定 OSPF 時, 通常都使用類似於以下的命令片段, 啟用 OSPF 協定:
router ospf 1
network 192.168.1.0 0.0.0.255 area 0
! ...
應該大家都知道, 其中 192.168.1.0 0.0.0.255 代表 "基準位址" 和 "Wildcard Mask", 跟 Access Control List (ACL) 一樣, 二進位表示法中, "Wildcard Mask" 標示為 "0" 的位元代表比對基準位址的相同位元需要符合, 標示為 "1" 的位元代表不需比對 ("Don't Care"). 然後所有的網路卡中, 如果IP位址符合, 就啟動 OSPF; 否則就不啟動.
但是如果我們改用等價的 Subnet Mask 取代, 也就是說, 本例子改成以下片段, 是否可以設定得進去?
router ospf 1
network 192.168.1.0 255.255.255.0 area 0
! ...
試驗結果, 竟然是可以的! 只不過, 當我們檢查 "show run" 時, 會發現 IOS 自動會幫我們轉成等價的 "Wildcard Mask" 格式.
另外, OSPF "network area" 命令中的 Wildcard Mask, 是否可以像 ACL 中一樣地彈性, 將 "0" 和 "1" 的位元自由調配嗎? 試驗結果發現 "並不是"!
R0(config)#router ospf 1 R0(config-router)# network 10.1.0.1 0.15.255.248 area 0 OSPF: Invalid address/mask combination (discontiguous mask) R0(config-router)#
自由調配, 會有 "OSPF: Invalid address/mask combination (discontiguous mask)" 的錯誤訊息.
結論
從以上分析, 發現 OSPF network area 命令中的 Wildcard Mask 功能, 甚至可以完全使用 Network Mask 來取代.至於 Cisco 當時為何要設計成使用 Wildcard Mask, 我猜想只是軟體設計的方向不同, 也許當初Cisco 的 OSPF 軟體開發小組, 想法/偏好跟其他像是 RIP, EIGRP 的開發小組不一樣吧! 然後為了向後相容, 所以就不改過來了!
至於平常應該如何設定 OSPF? 我建議還是按照官方文件的說明, 使用 Wildcard Mask. 養成好習慣, 所有的 IOS 版本都可以適用.
EIGRP也是這樣,可以直接使用subnet mask來取代wildcard
回覆刪除http://www.cisco.com/en/US/tech/tk365/technologies_q_and_a_item09186a008012dac4.shtml
Q. When I configure EIGRP, how can I configure a network statement with a mask?
A. The optional network-mask argument was first added to the network statement in Cisco IOS Software Release 12.0(4)T. The mask argument can be configured in any format (such as in a network mask or in wild card bits). For example, you can use network 10.10.10.0 255.255.255.252 or network 10.10.10.0 0.0.0.3.
還是劉老師比較厲害! 幫大家找到官方文件, 同時文件中還說明了 EIGRP 也是一樣的!
回覆刪除感謝! Happy New Year 2010!
不過在新版的IOS上面,我偏好使用-if)#ip ospf {process-id} area x這個interface指令,我喜歡這個指令的簡潔和明確,又跟IPv6的格式一致
回覆刪除我贊成藍天使的建議! 改天我們可以一起寫一些相關的文章跟大家分享!
回覆刪除感謝補充!