ISP路由器上是不是擁有Internet中所有路由條目?
答案是否定的!
為了解釋“否定”這兩個字,卻需要很多文字。
一條神奇的路由
使用Windows操作系統(tǒng)的讀者,可以在CLI命令行里敲入命令“Route print”,會呈現(xiàn)主機的路由表,一定會有這條神奇的路由:
0.0.0.0/0
這條神奇的路由,稱之為默認路由、缺省路由。Internet上千萬萬條路由可以高度抽象成這條神奇路由0.0.0.0/0,所以即使主機上沒有Internet路由表,訪問Internet卻一點問題沒有。
如果沒有發(fā)現(xiàn)這條神奇的路由,訪問Internet一定有問題,各位不妨試試看去掉這條神奇的路由,還能訪問互聯(lián)網(wǎng)嗎?
各位在互聯(lián)網(wǎng)上沖浪浪的朋友,要由衷地感謝這條神奇的路由!
Internet上有沒有不需要“0.0.0.0/0”的設(shè)備?
有,運營商核心路由器PE(Provider Edge),PE路由器通過BGP路由協(xié)議,與其它運營商交換全球路由表。
由于PE路由器知曉到達世界任何地方的路由,所以PE路由器是沒有0.0.0.0/0的。
下一個問題,運營商的路由器是否都需要運行BGP路由協(xié)議?都需要全球路由表?
運營商還有更多的路由器,稱之為P(Provider)路由器,并沒有運行BGP協(xié)議,也沒有全球路由表。
為什么P路由器不跑BGP協(xié)議?
(1) 跑BGP協(xié)議,需要路由器具有強大的CPU計算能力,同時具有超大的內(nèi)存用于記錄、保存全球龐大的路由表,目前只有高端路由器才能勝任該項任務,這是一筆龐大的開支。
(2) 因為沒有必要,P路由器只要學習到運營商內(nèi)部的路由表,再加上0.0.0.0/0路由,通過這條神奇的路由,就可以找到通向Internet的PE路由器,而PE路由器是知道如何世界任何角落的。
(3) 只要P、PE路由器運行IGP路由協(xié)議,如OSPF/ISIS,就可以完成(2)的描述。
來驗證一下,以上的講述有沒有問題:
PE1接收一個目的IP =8.8.8.8的IP報文,查詢路由表需要發(fā)給PE2,那PE1如何到達PE2呢?需要先把IP報文發(fā)給P1路由器,IP報文到達P1路由器。
現(xiàn)在該P1路由表來決策了,由于P1沒有全球路由表,只好使用0.0.0.0/0來路由IP報文了。
很不幸的是,P1的0.0.0.0/0的下一跳是PE1,于是又把IP報文扔給PE1。
看,環(huán)路了吧?
如果P1路由器沒有0.0.0.0/0,可以避免環(huán)路嗎?
可以,但是沒有8.8.8.8的路由,無法轉(zhuǎn)發(fā)該IP報文,同樣會被丟掉!
如何能克服以上困難?
最好的方案就是,P1路由器在收到IP報文時,避免查詢自己的路由表,而使用標簽轉(zhuǎn)發(fā)。IP報文攜帶的標簽,指示P1路由器將IP報文發(fā)給PE2。
標簽哪里來?
通過在PE1、P、PE2上運行LDP(Label DistributionProtocol), 事先為各個PE生成分發(fā)標簽,這項技術(shù)就是MPLS。
通過MPLS技術(shù),可以避免P路由器沒有全球路由表而可能造成的路由環(huán)路、次優(yōu)路徑轉(zhuǎn)發(fā),同時還可以被用來運載客戶公司的私有IP報文,這個就是三層的MPLS VPN技術(shù)。