關於CIDR聚合我有個問題想了很久都沒想明白?
書上說通過CIDR聚合技術可以縮短路由表的表項,這個很容易理解,對於最長匹配原則我也明白,可是我考慮到這麼一個問題:
假如某路由器的轉發表如下圖:先對前兩項進行CIDR聚合,前13位相同;再對後兩項聚合,前13位相同,可關鍵聚合後的結果是一樣的啊!因為這四個地址前13位都相同啊!那聚合後豈不是變成了這個樣:
這不就亂套了嗎???我一直好奇這個問題,但是書上也沒有講這種情況,百度也找不到資料,還請各位幫我解答疑惑。
看似很簡單的問題,要想回答好卻不容易!
先來看看這個問題,這四個IP號段如下:
1111 1111.1110 0111/16
1111 1111.1110 0011/16
1111 1111.1110 0001/16
1111 1111.1110 0110/16
這四個IP號段有共同特徵,從左到右數一數有多少位是相同的?不用數了,一共13位,即
1111 1111.1110 0/13
對應的十進位是
255.224/13
為了滿足強迫症患者的意願,我們會把右側用0補足成32位,即
255.224.0.0/13
這個歸納後的IP號段還把另外一些IP號段囊括其中,其中還有12個:
1111 1111.1110 0000/16
1111 1111.1110 0010/16
1111 1111.1110 0100/16
…
1111 1111.1110 0101/16
有同學會說,囊括它們又如何?不是按照最長匹配原則嗎?如果別人的路由表有以下兩條路由,肯定選擇前者,因為它16位,後者13位。
1111 1111.1110 0100/16
1111 1111.1110 0/13
看似很有道理,但萬一路由1111 1111.1110 0100/16由於介面down,從全球路由表消失了,但我們的歸納路由1111 1111.1110 0/13不會消失,所以發往1111 1111.1110 0100/16的流量全部被歸納路由吸引了過來,流量吸引過來還不算最壞的狀況,甚至能造成路由的環路,因為流量過來了,全球的路由表不能及時同步,會將流量繼續發給1111 1111.1110 0100/16,而有一些及時得到同步的路由器會使用1111 1111.1110 0/13,將流量發送回來,於是一個環路就形成了。
歸納路由要保證子路由是連續的
依據此原則,以上四條路由只有
1111 1111.1110 0111/16
1111 1111.1110 0110/16
是可以歸納的,歸納為
1111 1111.1110 011/15
歸納路由有什麼好處?
假如上文中,本地路由器上擁有全部16條路由,則完全可以歸納為一條/13的路由條目,這樣通告給別人時,就少了15條路由條目!
如果16條任意幾條down掉了,通告出去的依然是一條歸納路由,這樣可以將路由震蕩限制在最小範圍,對全球路由表沒有任何影響!
切記
歸納路由時,最好要加上一條靜態路由
255.224.0.0 255.224.0.0 null0
更新一下,路由聚合一般要求網路連續,但實際上手工這樣聚合其實沒啥問題,只是一般不會這麼做,聚合後的路由直接指Null0口,所以不存在兩條這樣的路由了。
BGP還可以選擇到底要不要把聚合路由宣告出去,或者明細是不是一起宣告出去。
所以樓主這個不算問題。
____________
原答案:
路由聚合第一個問題就是丟失路由細節。
題主這樣搞一般來說是手工聚合,雖然說強行這樣聚合也沒問題,最多是本機多了兩條等價路由而已,原本的4條明細不會被覆蓋,但如果發布出去就會有問題。(補充: 想了想,具體問題具體分析,不一定出問題,反正明細都在哈哈。)
書上說路由聚合可以減少路由條目,是針對全網而言,並非針對單一路由器。怎麼理解呢?你身上有100條明細,你聚合成10條,然後宣告出去,這樣你的鄰居從你這隻學到10條路由,從而提升了你鄰居的效率。
另外,工程上一般不會為聚合路由指定真實的出介面,而是指到Null0口做黑洞路由。我們用ip地址表示
第一個255.231.0.0/16
第二個255.227.0.0/16
第三個255.225.0.0/16
第四個255.230.0.0/16
這四個ip地址無法用cidr進行匯總
建議答主再仔細看看ip地址與子網掩碼的相關章節
~~~~~~~
我們在計算聚合時,要考慮網段的連續性和掩碼長度。
比如10.0.0.0/25和10.0.0.128/25,就可以聚合成10.0.0.0/24。
比如10.0.0.0/24和10.0.1.0/24,就可以聚合成10.0.0.0/23
車總說的很清楚啦,我也有過這種困惑。其實先搞明白連續子網的概念就好理解多啦,您這個問題恰恰說明了不連續子網盲目匯總會造成的災難性後果。
我忘了CIDR的內容了,但我想了一下覺得題主的做法應該是有不合規範之處的。
如果聚合只要前綴相同就可以聚合的話,那我豈不是可以聚合為
11111111.0.0.0/8?
更甚者,聚合為
10000000.0.0.0/1?
所以我想題主應該是忽略了什麼聚合的條件吧
推薦閱讀:
※如何去劫持一個路由器的DNS?
※互聯網上怎麼會遇到區域網的ip地址?
※DNS 網關 路由 交換機 網橋 協議 伺服器 這些都是什麼關係?
※處於不同網段的子網內的計算機是怎麼找到對方子網IP的?