本文為大家徹底澄清子網掩碼、反掩碼、通配符掩碼以及ospf network命令誤區,并介紹一些正確的示例:
1.子網掩碼(IP subnet mask)
用途:標識一個IP地址的網絡位,主機位
網絡設備判斷目的IP跟自己是否同一網段的依據。
特點:1和0絕對不可能間隔,1總在0的前面。
網絡通信角度,子網掩碼只具有本地意義。跟對端沒有匹配的硬性要求。
誤區:一條鏈路兩端的子網掩碼必須一致(是習慣不是必須)
例外:ospf 多路訪問網絡中,掩碼不一致會影響ospf鄰居關系建立
2.通配符掩碼 wildcard mask
用途:選出一組符合否規則的IP地址
特點:0表匹配,1表示不需要匹配。0和1 的位置根據需求可隨意穿插
示例1:
deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
deny ip 192.168.1.2 0.0.0.255 192.168.2.2 0.0.0.255
deny ip 192.168.1.3 0.0.0.255 192.168.2.3 0.0.0.255
這三跳條目是完全相同的,效果都是阻止192.168.1.x 訪問192.168.1.x (x表示任意數字)
紅色字體部分對應的是全1,所以是忽略的 ,寫什么都無所謂了
實例2:
deny ip 192.168.1.0 255.0.0.255 192.168.2.0 255.0.0.255
deny ip 193.168.1.0 255.0.0.255 193.168.2.0 255.0.0.255
deny ip 194.168.1.0 255.0.0.255 194.168.2.0 255.0.0.255
這三跳條目是完全相同的,效果都是阻止x.168.1.x 訪問 x.168.2.x (x表示任意數字)
紅色字體部分對應的是全1,所以是忽略的 ,寫什么都無所謂了
3. 反掩碼(中國式教育的敗筆,誤人子弟的一個說法,通配符掩碼的錯誤理解)
需求1:阻止192.168.1.0/24 訪問 192.168.2.0/24
命令:deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
看起啦確實是把掩碼反過來寫正好滿足要求,實際上邏輯關系已經變了。只是恰巧蒙對了而已。
少有求知欲的同學都有必要問一下,為什么要把掩碼反過來寫呢?
如果寫成 deny ip 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0
嚴格解讀效果是:拒絕 x.x.x.0 訪問 x.x.x.0
但是很多版本故作人性化,show run的時候自己給該成了:
deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
這屬于操作系統對客戶錯誤理解的妥協
后期的思科版本不再做此修改
-----------------------------------------------------------------
需求2:阻止 X.168.1.x 訪問 X.168.2.x
命令:deny ip 192.168.1.0 255.0.0.255 192.168.2.0 255.0.0.255
這個需求用反掩碼的邏輯恐怕就行不通了吧? 當然這個需求屬于怪異需求。
4.ospf的network命令(非rfc規定,各廠家可以自行設計,以下為大部分廠家邏輯)
正解:
Network + IP + wild card bits
Network 通過 IP 和 wild card bits 篩選出一組IP地址,從而定位出需要開啟OSPF的接口(誰擁有其中一個IP地址誰就開啟OSPF)
接口開啟ospf 含義有二:1. 從該接口收發ospf報文
2.該接口所在的網絡對應的路由成為ospf的資源,從其他接口發給鄰居(當然ospf發的不是路由條目)
示例:inter f0/1
ip add 10.1.1.1 255.255.255.0
router ospf 1
network 10.1.1.1 0.0.0.255 area 0
這個network命令實際上宣告了10.1.1.0-10.1.1.255 這256個地址。
當然在這個環境下恰好有且僅有一個接口在這個范圍內。
也就是說把接口的掩碼反過來寫正好能且只能宣告一個接口。不會多宣告
如果寫成
network 10.1.1.1 0.0.0.0 area 0 效果也完全一樣
或者寫成
network 10.1.1.2 0.0.0.255 area 0 紅色字體部分隨便寫,效果也是一樣的
如果寫成
network 0.0.0.0 255.255.255.255 area 0 宣告所有的IP地址,也就是所有的接口
如果寫成
network 0.0.0.0 0.0.0.0 area 0 也是宣告所有接口,邏輯上講不通(這個背過吧)
重大誤區:
1. network 宣告的是路由,影響鄰居學習路由的掩碼
2. network IP 后面跟的是反掩碼,必須把掩碼反過來寫,否則會影響路由學習
錯誤理解示例1:
network 10.1.1.1 0.0.0.0
會導致鄰居學到 10.1.1.1/32位的路由(已經遇到好多人跟我糾結這種問題,唉,網絡世界,其實難尋知己)