開門見山,先上一張全景圖。
上帝視角 路由的概念 在 TCP/IP 通信中,
網(wǎng)絡層 的作用是實現(xiàn)終端的點對點通信。
IP 協(xié)議 通過 IP 地址將數(shù)據(jù)包發(fā)送給目的主機,能夠讓互聯(lián)網(wǎng)上任何兩臺主機進行通信。
IP 地址 可以識別主機和路由器,
路由器 可以把全世界的網(wǎng)絡連接起來。
網(wǎng)絡層 什么是路由器 路由器 可以連接多個網(wǎng)絡。它有多個端口,分別連接不同的網(wǎng)絡區(qū)域。
通過識別目的 IP 地址的網(wǎng)絡號,再根據(jù)路由表進行數(shù)據(jù)轉(zhuǎn)發(fā)。 路由器會維護一張
路由表 ,通過路由表的信息,路由器才能正確的轉(zhuǎn)發(fā) IP 報文。
路由器 什么是路由 路由是網(wǎng)絡設備根據(jù) IP 地址對數(shù)據(jù)進行轉(zhuǎn)發(fā)的操作。當路由器收到一個數(shù)據(jù)包時,它根據(jù)數(shù)據(jù)包的目的 IP 地址查詢路由表,如果有匹配的路由條目,就根據(jù)查詢結(jié)果將數(shù)據(jù)包轉(zhuǎn)發(fā)出去,如果沒有任何匹配的路由條目,則將數(shù)據(jù)包丟棄,這個過程就是
IP 路由 。除了路由器,三層交換機、防火墻、負載均衡設備甚至主機等設備都可以進行路由操作,只要這個設備
支持路由功能 。
路由 什么是路由表 為了將數(shù)據(jù)包發(fā)給目的節(jié)點,所有節(jié)點都維護著一張
路由表 。
路由表是路由器通過各種途徑獲得的路由條目,每一個路由條目包含目的網(wǎng)段地址 / 子網(wǎng)掩碼、路由協(xié)議、出接口、下一跳 IP 地址、路由優(yōu)先級和度量值等信息。 路由表記錄 IP 包在下一跳應該發(fā)給哪個路由器。IP 包根據(jù)路由表在各個數(shù)據(jù)鏈路上傳輸。
路由表 路由表來源 一個實際的網(wǎng)絡中,一臺路由器通常包含多條路由條目,這些路由條目從不同的來源獲取。路由表的來源可分為三類,分別是
直連路由 、
靜態(tài)路由 和
動態(tài)路由 。
直連路由 :路由器直接連接的路由條目,只要路由器接口配置了 IP 地址,接口狀態(tài)正常,就會自動生成對應的直連路由。直連路由 靜態(tài)路由 :通過命令手動添加的路由條目就是靜態(tài)路由。靜態(tài)路由 動態(tài)路由 :通過路由協(xié)議從相鄰路由器動態(tài)學習到的路由條目。動態(tài)路由 路由優(yōu)先級 不同來源的路由有不同的
優(yōu)先級 ,優(yōu)先級的值越小,則路由的優(yōu)先級就越高。當存在多條目的網(wǎng)段相同,但來源不同的路由時,具有最高優(yōu)先級的路由成為
最優(yōu)路由 ,將被
加入到路由表 中,而其它路由則處于未激活狀態(tài),不顯示在路由表中。路由協(xié)議的
默認優(yōu)先級 如下:
路由優(yōu)先級 路由環(huán)路 路由環(huán)路 是數(shù)據(jù)轉(zhuǎn)發(fā)形成死循環(huán),不能正確到達目的地。
路由環(huán)路 路由環(huán)路的主要生成原因是
配置錯誤的路由 或
網(wǎng)絡規(guī)劃錯誤導致 。比如:在兩臺路由器上配置到相同目的地址的路由表項,下一跳互相指向?qū)Ψ?,就會造成路由環(huán)路。另外某些動態(tài)路由協(xié)議配置不當,也有可能產(chǎn)生環(huán)路。
黑洞路由 一條路由條目,無論是靜態(tài)的還是動態(tài)的,都需要關聯(lián)到一個出接口,出接口指的是設備要到達目的網(wǎng)絡是的出站接口。路由的出接口可以是這個設備的物理接口,如千兆網(wǎng)口,也可以是邏輯接口,如 VLAN 接口,或者是隧道接口等。其中有一種接口非常特殊,那就是 Null 接口,只有一個編號,那就是 0 。
Null0 是一個系統(tǒng)保留的邏輯接口,當網(wǎng)絡設備在轉(zhuǎn)發(fā)數(shù)據(jù)包時,如果使用出接口 Null0 的路由,那么數(shù)據(jù)包將被丟棄,就像被扔進了一個黑洞里,因此出接口為 Null0 的路由條目又被稱為
黑洞路由 。
黑洞路由是一種非常有用的路由條目,適用于如下場景:
在網(wǎng)絡使用中,按需將數(shù)據(jù)包指向黑洞路由,實現(xiàn)流量過濾。 在已經(jīng)部署路由匯總的網(wǎng)絡中,用于防止數(shù)據(jù)轉(zhuǎn)發(fā)出現(xiàn)環(huán)路。 在部署了 NAT 的網(wǎng)絡中,用于防止數(shù)據(jù)轉(zhuǎn)發(fā)出現(xiàn)環(huán)路。 在 BGP 網(wǎng)絡中,用于發(fā)布特定網(wǎng)段的路由。 動態(tài)路由協(xié)議 靜態(tài)路由 是手動添加完成的。如果有 100 個網(wǎng)段,一個路由器就需要設置將近 100 條路由信息。網(wǎng)絡使用過程中,不可避免的出現(xiàn)網(wǎng)段新增、刪除、修改等情況,這些更新的路由信息需要在所有路由器上進行設置。還有一個不可忽視的問題,一旦某個路由器出現(xiàn)故障,數(shù)據(jù)傳輸無法自動繞過故障節(jié)點,只能通過手動設置才能恢復正常。
靜態(tài)路由 如果是使用
動態(tài)路由 ,提前設置好路由協(xié)議,路由器之間會定期交換路由信息,路由器會知道網(wǎng)絡中其它網(wǎng)段的信息,動態(tài)生成路由表。如果網(wǎng)絡出現(xiàn)變化,網(wǎng)段需要增刪改時,只需要在相應的路由器上配置動態(tài)路由即可。不需要像靜態(tài)路由那樣,在所有路由器上進行修改。對于大型網(wǎng)絡,路由器個數(shù)較多時,主要使用動態(tài)路由協(xié)議。
動態(tài)路由 即使網(wǎng)絡上的節(jié)點出現(xiàn)故障,只要有一個可繞行的其它路徑,那么路由器的路由表會
自動重新設置 ,數(shù)據(jù)包也會自動選擇這個路徑。采用路由協(xié)議后,網(wǎng)絡拓撲結(jié)果變化的
響應速度會大大提升 。無論網(wǎng)絡正常的增刪改,還是異常的網(wǎng)絡故障,相鄰的路由器都會檢測到變化,會把拓撲的變化通知網(wǎng)絡中其它的路由器,使它們的路由表產(chǎn)生相應的變化。這個過程比手動對路由表的修改要快很多,也準確很多。
對于少于 10 個路由器的小型網(wǎng)絡,靜態(tài)路由或許已經(jīng)能夠滿足需求,但是在大中型網(wǎng)絡中,通常會使用動態(tài)路由協(xié)議,或者動態(tài)路由與靜態(tài)路由協(xié)議相結(jié)合的方式來建設這個網(wǎng)絡。 路由協(xié)議基本原理 路由器之間需要運行相同的路由協(xié)議,才能相互交換路由信息。每種路由協(xié)議都有自己的語言,即相應的路由協(xié)議報文。如果兩臺路由器啟動了相同的路由協(xié)議,那么就有了相互通信的基礎。不同的路由協(xié)議,有相同的目的,就是計算和維護路由表。通常工作過程包含 4 個階段:
鄰居發(fā)現(xiàn)階段 :運行了路由協(xié)議后,路由器會主動把自己的網(wǎng)段信息發(fā)送給相鄰的路由器。既可以使用廣播發(fā)送路由協(xié)議消息,也可以單播將路由協(xié)議消息發(fā)送給指定的鄰居路由器。交換路由信息階段 :發(fā)現(xiàn)鄰居后,每臺路由器都將自己的路由信息發(fā)送給相鄰的路由器,相鄰路由器又發(fā)送給下一個相鄰的路由器。經(jīng)過一段時間后,每臺路由器都會收到網(wǎng)絡中所有的路由信息。計算路由階段 :每一臺路由器都會運行某種算法,計算出最終的路由表來。維護路由階段 :為了感知突然發(fā)送的網(wǎng)絡故障,比如:設備故障或線路中斷等,路由協(xié)議規(guī)定相鄰兩臺路由器之間,應該周期性發(fā)送協(xié)議報文。如果路由器在一段時間內(nèi),沒收到鄰居發(fā)來的協(xié)議報文,就認為鄰居路由器失效。路由協(xié)議 自治系統(tǒng) 隨著 IP 網(wǎng)絡的發(fā)展,網(wǎng)絡規(guī)模已經(jīng)很大了,無論哪種路由協(xié)議都不能完成全網(wǎng)的路由計算,因此網(wǎng)絡分成了很多個
自治系統(tǒng) ( AS , Autonomous System )或
路由選擇域 ( Routing Domain )。自治系統(tǒng)可以制定自己的路由策略,并管理自治系統(tǒng)內(nèi)進行具體路由控制的路由器集合。每個自治系統(tǒng)都有一個唯一的
自治系統(tǒng)編號 ,它的基本思路是希望通過不同的編號來區(qū)分不同的自治系統(tǒng)。通過路由協(xié)議和自治系統(tǒng)編號,路由器可以確定路由路徑和路由信息的交換方式。某個自治系統(tǒng)缺乏足夠的安全機制,就可以利用編號改變路徑回避它。自治系統(tǒng)的
編號 范圍是
1 ~ 65535
,其中
1 ~ 64511
是注冊的因特網(wǎng)編號,
64512 ~ 65535
是專用網(wǎng)絡編號。
自治系統(tǒng)和路由協(xié)議 EGP 和 IGP 自治系統(tǒng)(路由選擇域)內(nèi)部動態(tài)路由使用的協(xié)議是
域內(nèi)路由協(xié)議 ,即
IGP 。而自治系統(tǒng)之間的路由控制使用的是
域間路由協(xié)議 ,即
EGP 。IGP 和 EGP 的關系,跟 IP 地址網(wǎng)絡號和主機號的關系類似。根據(jù) IP 地址的網(wǎng)絡號在網(wǎng)絡中進行路由選擇,根據(jù)主機號在網(wǎng)段內(nèi)部進行主機識別一樣。既可以
根據(jù) ?EGP 在區(qū)域網(wǎng)絡之間進行路由選擇 ,也可以
根據(jù) IGP 在區(qū)域網(wǎng)絡內(nèi)部進行主機識別 。路由協(xié)議被分為 EGP 和 IGP 兩個層次。沒有 EGP 就不可能有世界上各個不同機構(gòu)網(wǎng)絡之間的通信,沒有 IGP 機構(gòu)內(nèi)部也就不可能進行通信。IGP 是指在同一個自治系統(tǒng)內(nèi)交換路由信息的路由協(xié)議。
RIP 、
RIP2 、
OSPF 屬于
IGP 。IGP 的主要目的是發(fā)現(xiàn)和計算自治系統(tǒng)內(nèi)的路由信息。EGP 與 IGP 不同,EGP 用于連接不同的自治系統(tǒng),并在不同自治系統(tǒng)間交換路由信息。EGP 的主要目的是使用路由策略和路由過濾等手段,控制路由信息在自治系統(tǒng)間的傳播。
BGP 屬于
EGP 。
動態(tài)路由協(xié)議類型 按照路由的算法和路由信息的交換方式,路由協(xié)議可以分
為距離矢量 ( Distance-Vector ,D-V )路由協(xié)議和
鏈路狀態(tài) ( Link-State )路由協(xié)議。其中典型的距離矢量協(xié)議是
RIP ,典型的鏈路狀態(tài)協(xié)議是
OSPF 。
距離矢量路由協(xié)議 距離矢量路由協(xié)議 指的是基于距離矢量的路由協(xié)議,RIP 是最具代表性的距離矢量路由協(xié)議。距離矢量這個概念包含兩個關鍵的信息:
距離 和
方向 ,其中距離是指到達目的網(wǎng)絡的度量值(即所要經(jīng)過路由器的個數(shù)),而方向指的是到達目的網(wǎng)絡的下一跳設備。
距離矢量路由協(xié)議 每一臺運行距離矢量路由協(xié)議的路由器會周期性的將自己的路由表通告出去,相鄰的路由器收到路由信息并更新自己的路由表,再繼續(xù)向其它直連的路由器通告路由信息,最終網(wǎng)絡中的每臺路由器都能知道各個網(wǎng)段的路由,這個過程稱為路由的泛洪過程。
路由宣告 路由器之間互換目的網(wǎng)絡的方向和距離的信息,并以這些信息更新路由表。這種方法在處理上比較簡單,不過由于只有距離和方向的信息,所以當網(wǎng)絡構(gòu)造變得復雜時,在獲得穩(wěn)定的路由信息之前需要消耗一定時間(即路由收斂時間長),也極易發(fā)生路由循環(huán)等問題。
路由收斂 鏈路狀態(tài)路由協(xié)議 運行鏈路狀態(tài)路由協(xié)議 的路由器會使用一些特殊的信息描述網(wǎng)絡的拓撲結(jié)構(gòu)和 IP 網(wǎng)段,這些信息被稱為
鏈路狀態(tài)信息 (
LSA ),所有路由器都會產(chǎn)生自己直連接口的鏈路狀態(tài)信息。
鏈路狀態(tài)路由協(xié)議 路由器將網(wǎng)絡中泛洪的鏈路狀態(tài)信息搜集起來,存入一個數(shù)據(jù)庫中,這個數(shù)據(jù)庫就是
LSDB (鏈路狀態(tài)數(shù)據(jù)庫),LSDB 是對整個網(wǎng)絡的拓撲結(jié)構(gòu)及 IP 網(wǎng)段的描述,路由器擁有相同的 LSDB 。對于任何一臺路由器,網(wǎng)絡拓撲都完全一樣。
LSDB 接下來所有的路由器都基于 LSDB 使用最短路由優(yōu)先算法進行計算,得到一棵已自己為根的、無環(huán)路的
最短路徑樹 ,并將得到的路由加載到路由表中。
帶權(quán)有向圖 鏈路狀態(tài)算法使用增量更新機制,只有當鏈路的狀態(tài)發(fā)生變化時,才發(fā)送路由更新信息。
最短路徑樹 相比距離矢量路由協(xié)議,鏈路狀態(tài)路由協(xié)議具有更大的擴展性和更快的收斂速度,但是它的算法消耗更多的內(nèi)存和 CPU 處理能力。
路由協(xié)議的性能指標 不同的路由協(xié)議,有不同的特點。各個路由協(xié)議的性能指標體現(xiàn)如下:
協(xié)議計算的正確性 :是指路由協(xié)議的算法會不會產(chǎn)生錯誤的路由導致網(wǎng)絡環(huán)路。不同的路由協(xié)議使用的算法不同,因此路由正確性也不相同。鏈路狀態(tài)路由協(xié)議(如 OSPF )在算法上杜絕了產(chǎn)生路由環(huán)路的可能性,比距離矢量路由協(xié)議更優(yōu)。路由收斂速度 :路由收斂是指全網(wǎng)路由器的路由表達到一致狀態(tài)。收斂速度快,意味著網(wǎng)絡拓撲結(jié)構(gòu)發(fā)生變化時,路由器能夠更快的感知,并及時更新相應的路由信息。OSPF 、BGP 等協(xié)議的收斂速度快于 RIP 。協(xié)議所占的系統(tǒng)開銷 :路由器在運行路由協(xié)議時,需要消耗的系統(tǒng)資源,比如:CPU 、內(nèi)存等。工作原理的不同,各個路由協(xié)議對系統(tǒng)資源的需求也不同。OSPF 路由技術的系統(tǒng)開銷要大于 RIP 協(xié)議。協(xié)議自身的安全性 :是指協(xié)議設計時,有沒有考慮防止網(wǎng)絡攻擊。OSPF 、RIPv2 有相應的防止攻擊的認證方法,而 RIPv1 沒有。協(xié)議適用網(wǎng)絡規(guī)模 :不同路由協(xié)議所適用的網(wǎng)絡規(guī)模、拓撲結(jié)構(gòu)不同。RIP 協(xié)議有 16 跳的限制,所以只能應用在較小規(guī)模的網(wǎng)絡中;而 OSPF 可以應用在幾百臺路由器的大規(guī)模網(wǎng)絡中;BGP 能夠管理全世界所有的路由器,其所管理的網(wǎng)絡規(guī)模大小只受系統(tǒng)資源的限制。主要路由協(xié)議 各種路由協(xié)議都需要使用 IP 來進行報文封裝,但其細節(jié)有所不同。
RIP 協(xié)議是最早的路由協(xié)議,是為小型網(wǎng)絡中提供簡單易用的動態(tài)路由。RIP 協(xié)議報文采用
UDP 封裝,端口號是
520 。由于 UDP 是不可靠的傳輸層協(xié)議,所以 RIP 協(xié)議需要周期性的廣播協(xié)議報文來確保鄰居收到路由信息。
OSPF 是目前應用最廣泛的路由協(xié)議,可為大中型網(wǎng)絡提供分層的、可靠的路由服務。OSFP 直接采用
IP 進行封裝,所有協(xié)議報文都由 IP 封裝后進行傳輸,協(xié)議號是
89 。IP 是盡力而為的網(wǎng)絡層協(xié)議,本身是不可靠的,所以為了保證傳輸?shù)目煽啃裕琌SPF 采用了復雜的確認機制來保證傳輸可靠。
BGP 采用 TCP 來保證協(xié)議傳輸?shù)目煽啃裕?strong>TCP 端口號是
179 。BGP 不需要自己設計可靠傳輸機制,降低了協(xié)議報文的復雜度和開銷。
路由協(xié)議的底層協(xié)議圖 幾種主要的路由協(xié)議表如下:
路由協(xié)議對比表