1 路由器與路由選擇
1.1 路由器
路由器是一種具有多個輸入端口和輸出端口的專用計算機,其任務(wù)是轉(zhuǎn)發(fā)分組和路由選擇。
實現(xiàn)的網(wǎng)絡(luò)模型:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層。
路由器的結(jié)構(gòu)分為兩個部分:
- 路由選擇部分(控制部分):核心是路由選擇處理機,它根據(jù)路由選擇協(xié)議構(gòu)造出路由表,路由表需要對網(wǎng)絡(luò)拓?fù)渥兓挠嬎阕顑?yōu)化。
-
分組轉(zhuǎn)發(fā)部分:由三部分組成:交換結(jié)構(gòu)、輸入端口、輸出端口。
- 輸入端口:物理層的比特流–>數(shù)據(jù)鏈路層中解析出幀–>網(wǎng)絡(luò)層中解析出 IP 數(shù)據(jù)報–>輸入端口。
- 輸出端口:輸出端口–>網(wǎng)絡(luò)層封裝 IP 首部–>數(shù)據(jù)鏈路層封裝幀首部–>物理層傳輸比特流。
- 交換結(jié)構(gòu):路由器的關(guān)鍵部件,它根據(jù)轉(zhuǎn)發(fā)表對分組進(jìn)行處理。轉(zhuǎn)發(fā)表是由路由器得來的,轉(zhuǎn)發(fā)表的結(jié)構(gòu)應(yīng)當(dāng)使查找過程最優(yōu)化。
【注】實現(xiàn)交換結(jié)構(gòu)的三種基本方式是:通過存儲器、通過總線以及通過互連網(wǎng)絡(luò)。這三種交換結(jié)構(gòu)可實現(xiàn)的路由器轉(zhuǎn)發(fā)速率依次提高。
1.2 路由表(RIB 表)
1.2.1 路由表項
路由表(Route Information Base,RIB)的主要用途是路由選擇。路由表的每一表項都是一條路由信息,一般包含以下信息:
- 目的地/子網(wǎng)掩碼(Destination/Genmask):若掩碼長度為 32,則目的地是一個目的主機地址;否則,目的地是一個目的網(wǎng)絡(luò)地址。
- 下一跳(Next Hop):分組到達(dá)下一個路由器的 IP 地址。
- 接口(Interface):從該路由器的哪個接口將分組發(fā)送出去。
1.2.2 動態(tài)路由
- 動態(tài)路由:路由器通過路由選擇協(xié)議自動獲取路由信息。
- 動態(tài)路由選擇算法(自適應(yīng)路由算法):路由器間彼此交換信息,按照路由算法優(yōu)化出路由表項。
- 動態(tài)路由選擇算法比較復(fù)雜、開銷比較大,但能較好地適應(yīng)網(wǎng)絡(luò)狀態(tài)的變化。
- 動態(tài)路由選擇算法適用于大規(guī)模網(wǎng)絡(luò)。
1.2.3 靜態(tài)路由
- 靜態(tài)路由:采用人工配置的方式給路由器添加網(wǎng)絡(luò)路由、默認(rèn)路由和特定主機路由等路由條目。
- 靜態(tài)路由選擇算法(非自適應(yīng)路由算法):管理員手工配置路由信息。
- 靜態(tài)路由選擇算法簡單、開銷小,但不能及時適應(yīng)網(wǎng)絡(luò)狀態(tài)(流量、拓?fù)涞龋┑淖兓?/li>
- 靜態(tài)路由選擇算法一般只在小規(guī)模網(wǎng)絡(luò)中采用。
靜態(tài)路由有兩種特殊的路由:
路由 | 默認(rèn)路由 | 特定主機路由 |
---|---|---|
目的網(wǎng)絡(luò) | 0.0.0.0/0 | a.b.c.d/32 |
用途 | 使用一條默認(rèn)路由條目,替代了去往因特網(wǎng)中眾多網(wǎng)絡(luò)的海量路由條目 | 出于某種安全問題的考慮,同時為了使網(wǎng)絡(luò)運維人員更方便地控制網(wǎng)絡(luò)和測試網(wǎng)絡(luò),指明到某一臺主機的特定主機路由是十分有用的 |
優(yōu)先級 | 路由器在查找轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā) IP 數(shù)據(jù)報時,遵循最長前綴匹配的原則,因此默認(rèn)路由條目的匹配優(yōu)先級最低 | 路由器在查找轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā) IP 數(shù)據(jù)報時,遵循最長前綴匹配的原則,按照匹配優(yōu)先級最高的特定主機路由條目進(jìn)行轉(zhuǎn)發(fā) |
【注】進(jìn)行靜態(tài)路由配置需要注意:
- 路由條目配置錯誤,甚至導(dǎo)致出現(xiàn)路由環(huán)路。
- 聚合路由條目時可能引入不存在的網(wǎng)絡(luò)。
1.2.4 直連路由
- 直連路由:由鏈路層協(xié)議發(fā)現(xiàn)的,一般指去往路由器的接口地址所在網(wǎng)段的路徑,該路徑信息不需要網(wǎng)絡(luò)管理員維護(hù),也不需要路由器通過某種算法進(jìn)行計算獲得,只要該接口處于活動狀態(tài)(Active),路由器就會把通向該網(wǎng)段的路由信息填寫到路由表中去。
例如以下網(wǎng)絡(luò):
初始時,各路由器往路由表中填寫直連路由,如下:
- 路由器 R1 的路由表:
目的網(wǎng)絡(luò) | 下一跳 | 接口 | 類型 |
---|---|---|---|
192.168.1.0/24 | 接口 0 | 接口 0 | 直連 |
10.0.0.0/30 | 接口 1 | 接口 1 | 直連 |
- 路由器 R2 的路由表:
目的網(wǎng)絡(luò) | 下一跳 | 接口 | 類型 |
---|---|---|---|
10.0.0.0/30 | 接口 0 | 接口 0 | 直連 |
192.168.2.0/24 | 接口 1 | 接口 1 | 直連 |
但是 R1 到目的網(wǎng)絡(luò) 192.168.2.0/24 的路由沒有配置,R2 到目的網(wǎng)絡(luò) 192.168.1.0/24 的路由也沒有配置,除此之外,R1 和 R2 去往因特網(wǎng)的路由也沒有配置。我們可以進(jìn)行人工配置,也可以依據(jù)路由選擇協(xié)議(下面將詳細(xì)介紹)讓路由器自己獲取路由。以下是人工配置后的路由表:
- 路由器 R1 的路由表:
目的網(wǎng)絡(luò) | 下一跳 | 接口 | 類型 |
---|---|---|---|
192.168.1.0/24 | 接口 0 | 接口 0 | 直連 |
10.0.0.0/30 | 接口 1 | 接口 1 | 直連 |
192.168.2.0/24 | 10.0.0.2 | 接口 1 | 靜態(tài) |
0.0.0.0/0 | 10.0.0.2 | 接口 0 | 靜態(tài) |
【注】最后一個路由表項即為默認(rèn)路由,默認(rèn)路由必須為人工配置。R2 成為該網(wǎng)絡(luò)的默認(rèn)網(wǎng)關(guān),它是本網(wǎng)絡(luò)與外網(wǎng)連接的設(shè)備,就像古代扼守出入的“關(guān)口”。當(dāng)分組目的地址找不到對應(yīng)的目的網(wǎng)絡(luò)時,路由器 R1 便認(rèn)為該分組的目的地址在互聯(lián)網(wǎng)中,因此將該分組從接口 1 轉(zhuǎn)發(fā)出去。
- 路由器 R2 的路由表:
目的網(wǎng)絡(luò) | 下一跳 | 接口 | 類型 |
---|---|---|---|
10.0.0.0/30 | 接口 0 | 接口 0 | 直連 |
192.168.2.0/24 | 接口 1 | 接口 1 | 直連 |
0.0.0.0/0 | 接口 2 | 接口 2 | 靜態(tài) |
192.168.1.0/24 | 10.0.0.1 | 接口 0 | 靜態(tài) |
如果新增加的路由是依據(jù)路由選擇協(xié)議得出的,則類型應(yīng)為“動態(tài)”。
1.3 轉(zhuǎn)發(fā)表(FIB 表)
轉(zhuǎn)發(fā)表(Forward Information Base,F(xiàn)IB)是從路由表得出的,其表項和路由表項有直接的對應(yīng)關(guān)系。分組抵達(dá)路由器后,解析出分組的目的地址,并根據(jù)轉(zhuǎn)發(fā)表將分組從適當(dāng)?shù)亩丝谵D(zhuǎn)發(fā)出去。
轉(zhuǎn)發(fā)表項的格式為:
目的地址 | 下一跳 |
---|---|
分組將要發(fā)往的目的地址 | 下一個接收者的目的地址,實際是 MAC 地址 |
路由表存在下一跳非直連的表項,而轉(zhuǎn)發(fā)表不存在這樣的表項。
【注】轉(zhuǎn)發(fā)和路由選擇(路由轉(zhuǎn)發(fā))的區(qū)別:
- 轉(zhuǎn)發(fā):路由器根據(jù) IP 數(shù)據(jù)報的要求從正確的端口轉(zhuǎn)發(fā)出去。
- 路由選擇:涉及很多路由器,根據(jù)從各相鄰路由器得到的網(wǎng)絡(luò)拓?fù)淝闆r,動態(tài)改變自己的路由表。可以這么認(rèn)為,路由表將整個網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)都記錄了下來。
1.4 自治系統(tǒng) AS
- 自治系統(tǒng)(Autonomous System,AS):單一技術(shù)管理下的一組路由器,這組路由器使用同一個路由選擇協(xié)議,并且所有路由器都是互相連通的。同時,在自治系統(tǒng)的外部,采用其他的路由選擇協(xié)議。
- 域內(nèi)路由選擇:指的是在自治系統(tǒng)內(nèi)部的路由選擇,采用內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol,IGP)。IGP 不是一個具體的協(xié)議,而是一個分類名稱,包括 RIP 和 OSPF。
- 域間路由選擇:指的是在自治系統(tǒng)之間的路由選擇,采用外部網(wǎng)關(guān)協(xié)議(External Gateway Protocol,EGP)。EGP 不是一個具體的協(xié)議,而是一個分類名稱,包括 BGP。
2 內(nèi)部網(wǎng)關(guān)協(xié)議 IGP——路由信息協(xié)議 RIP
路由信息協(xié)議(Routing Information Protocol,RIP)是內(nèi)部網(wǎng)關(guān)協(xié)議中最先得到廣泛使用的協(xié)議之一,其相關(guān)標(biāo)準(zhǔn)文檔為[RFC 1058]。
RIP 是應(yīng)用層協(xié)議,它使用 UDP 封裝數(shù)據(jù),UDP 端口號為 520。所以當(dāng)傳輸?shù)骄W(wǎng)絡(luò)層時,報文將會是這個樣子:
IP 首部 | UDP 首部 | RIP 首部 | RIP 路由部分 |
---|
2.1 RIP 規(guī)定
- 自治系統(tǒng) AS 內(nèi)的每一個路由器,都要維護(hù)從它自己到 AS 內(nèi)其他每一個網(wǎng)絡(luò)的距離記錄。這是一組距離,稱為距離向量(Distance-Vector,D-V)。
- 使用跳數(shù)(Hop Count)作為度量(Metric)來衡量到達(dá)目的網(wǎng)絡(luò)的距離。
-
路由器到直連網(wǎng)絡(luò)的距離 ::= 1
。 -
路由器到非直連網(wǎng)絡(luò)的距離 ::= 所經(jīng)過的路由器數(shù) + 1
。 -
距離 ≤ 15
,距離 = 16
表示該網(wǎng)絡(luò)不可達(dá)。
-
【注 1】由于距離限制,RIP 只適用于小型互聯(lián)網(wǎng)。規(guī)定最高跳數(shù)是為了防止出現(xiàn)路由環(huán)路的情況。
【注 2】哪怕存在另一條傳輸速率更快、路由器更多的路徑,RIP 依然會選擇路由器最少的路徑。
- 最優(yōu)路由:通過路由器數(shù)量最少的路由。
- 等價負(fù)載均衡:若有多條 RIP 距離相等的路由,則可以進(jìn)行等價負(fù)載均衡,也就是將通信量均衡地分布到多條等價的路徑上。
- 交換信息:和相鄰路由器交換自己的路由表,每隔一段周期(比如 30s)交換一次。
- 收斂速度:指把一個信息傳遍所有路由的速度。
【注 1】為了加快 RIP 的收斂速度,當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時,路由器要及時向相鄰路由器通告拓?fù)渥兓蟮穆酚尚畔ⅲ@稱為觸發(fā)更新。
【注 2】什么是相鄰路由器?例如:
R1—R2—R3
,則 R1 和 R2、R2 和 R3 均為相鄰路由器,而 R1 和 R3 不是相鄰路由器。
- 使用 RIP 的路由表:
目的網(wǎng)絡(luò) | RIP 距離 | 下一跳 |
---|---|---|
… | … | … |
- 為方便后續(xù)討論,我們將每一個路由表項寫為
<目的網(wǎng)絡(luò), RIP 距離, 下一跳>
。
2.2 RIP 的工作原理
假設(shè)有以下自治系統(tǒng) AS:
- 路由器剛開始工作時,只知道自己到直連網(wǎng)絡(luò)的 RIP 距離為 1。如下表為各路由器的路由表:
路由表項 | R1 路由表 | R2 路由表 | R3 路由表 | R4 路由表 |
---|---|---|---|---|
1 | <N1, 1, 直連> | <N1, 1, 直連> | <N2, 1, 直連> | <N3, 1, 直連> |
2 | <N2, 1, 直連> | <N4, 1, 直連> | <N3, 1, 直連> | <N4, 1, 直連> |
3 | <N4, 1, 直連> |
- 每個路由器僅和相鄰路由器周期性地交換并更新路由信息。若干次交換和更新后,每個路由器都知道到達(dá)本自治系統(tǒng) AS 內(nèi)各網(wǎng)絡(luò)的最短距離和下一跳路由器,稱為收斂。如下表為收斂后各路由器的路由表:
路由表項 | R1 路由表 | R2 路由表 | R3 路由表 | R4 路由表 |
---|---|---|---|---|
1 | <N1, 1, 直連> | <N1, 1, 直連> | <N2, 1, 直連> | <N3, 1, 直連> |
2 | <N2, 1, 直連> | <N4, 1, 直連> | <N3, 1, 直連> | <N4, 1, 直連> |
3 | <N3, 2, R3> | <N2, 2, R1> | <N4, 1, 直連> | <N1, 2, R2> |
4 | <N4, 2, R2> | <N2, 2, R3> | <N1, 2, R1> | <N2, 2, R3> |
5 | <N3, 2, R4> | <N1, 2, R2> |
各路由器是通過怎樣的步驟得出各自的路由表?這就是距離向量算法所處理的事情。
2.3 RIP 的距離向量算法
假設(shè)有兩個相鄰的路由器:路由器C--------路由器D
路由器 C 和 D 的路由表如下:
路由表項 | C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 4, B> | <N1, 7, A> |
2 | <N3, 8, A> | <N2, 1, C> |
3 | <N6, 4, F> | <N6, 8, F> |
4 | <N8, 3, F> | <N8, 4, E> |
5 | <N9, 5, A> | <N9, 4, F> |
現(xiàn)路由器 C 發(fā)送一個 RIP 更新報文給路由器 D。路由器 D 收到報文后,將該報文作修改,然后與自己的路由表對比,并修改自己的路由表。步驟如下:
-
把“下一跳”改為路由器 C,并將所有“RIP 距離”加 1。為何加 1?因為有
N2----(距離4)----路由器C----(距離1)----路由器D
。
路由表項 | 修改 C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 5, C> | <N1, 7, A> |
2 | <N3, 9, C> | <N2, 1, C> |
3 | <N6, 5, C> | <N6, 8, F> |
4 | <N8, 4, C> | <N8, 4, E> |
5 | <N9, 6, C> | <N9, 4, F> |
-
若“目的網(wǎng)絡(luò)”相同,“下一跳”相同,則更新對應(yīng)條目。為什么需要更新?因為網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)是動態(tài)變化的,需要不斷更新。例如:
N2----(距離2)----路由器C----(距離1)----路由器D
,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)變化后:N2----(距離4)----路由器C----(距離1)----路由器D
。
路由表項 | 修改 C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 5, C> | <N1, 7, A> |
2 | <N3, 9, C> | <N2, 5, C> |
3 | <N6, 5, C> | <N6, 8, F> |
4 | <N8, 4, C> | <N8, 4, E> |
5 | <N9, 6, C> | <N9, 4, F> |
- 若發(fā)現(xiàn)新的“目的網(wǎng)絡(luò)”,加入該條目。
路由表項 | 修改 C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 5, C> | <N1, 7, A> |
2 | <N3, 9, C> | <N2, 5, C> |
3 | <N6, 5, C> | <N6, 8, F> |
4 | <N8, 4, C> | <N8, 4, E> |
5 | <N9, 6, C> | <N9, 4, F> |
6 | <N3, 9, C> |
- 若“目的網(wǎng)絡(luò)”相同,“下一跳”不同,“RIP 距離”比之前的更小,則更新對應(yīng)條目。如果“RIP 距離”比之前的更大,則不更新對應(yīng)條目。
路由表項 | 修改 C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 5, C> | <N1, 7, A> |
2 | <N3, 9, C> | <N2, 5, C> |
3 | <N6, 5, C> | <N6, 5, C> |
4 | <N8, 4, C> | <N8, 4, E> |
5 | <N9, 6, C> | <N9, 4, F> |
6 | <N3, 9, C> |
- 若“目的網(wǎng)絡(luò)”相同,“下一跳”不同,“RIP 距離”相等,則加入該條目,以實現(xiàn)等價負(fù)載均衡。
路由表項 | 修改 C 路由表 | D 路由表 |
---|---|---|
1 | <N2, 5, C> | <N1, 7, A> |
2 | <N3, 9, C> | <N2, 5, C> |
3 | <N6, 5, C> | <N6, 5, C> |
4 | <N8, 4, C> | <N8, 4, E> |
5 | <N9, 6, C> | <N9, 4, F> |
6 | <N3, 9, C> | |
7 | <N8, 4, C> |
- 路由器每隔大約 30 秒向其所有相鄰路由器發(fā)送路由更新報文。
- 若 180 秒(默認(rèn)超時時間)沒有收到某條路由條目的更新報文,則把該路由條目標(biāo)記為無效(即把 RIP 距離設(shè)置為 16,表示不可達(dá)),若再過一段時間(如 120 秒),還沒有收到該路由條目的更新報文,則將該路由條目從路由表中刪除。
2.4 RIP 存在的問題
假設(shè)網(wǎng)絡(luò) N1 到路由器 R1 之間出現(xiàn)了故障:N1----x----路由器R1--------路由器R2
路由器 R1 的路由:<N1, 16, 直連>
,路由器 R2 的路由:<N1, 2, R1>
(R2 還不知道 N1 與 R1 之間出了故障)
- 若 R2 的 RIP 更新報文先到 R1,則 R1 被“謠言”所誤導(dǎo),修改了自己的路由:
<N1, 3, R2>
- R1 向 R2 發(fā)送 RIP 更新報文,則 R2 路由:
<N1, 4, R1>
- 30s 后,R2 向 R1 發(fā)送 RIP 更新報文,則 R1 路由:
<N1, 5, R2>
- R1 向 R2 發(fā)送 RIP 更新報文,則 R2 路由:
<N1, 6, R1>
- 30s 后,R2 向 R1 發(fā)送 RIP 更新報文,則 R1 路由:
<N1, 7, R2>
- R1 向 R2 發(fā)送 RIP 更新報文,則 R2 路由:
<N1, 8, R1>
- …
- 30s 后,R2 向 R1 發(fā)送 RIP 更新報文,則 R1 路由:
<N1, 13, R2>
- R1 向 R2 發(fā)送 RIP 更新報文,則 R2 路由:
<N1, 14, R1>
- 30s 后,R2 向 R1 發(fā)送 RIP 更新報文,則 R1 路由:
<N1, 15, R2>
- R1 向 R2 發(fā)送 RIP 更新報文,則 R2 路由:
<N1, 16, R2>
此時路由器 R2 才發(fā)現(xiàn) N1 是不可達(dá)的,整個自治系統(tǒng)才達(dá)到收斂,即 R1 和 R2 均知道 N1 不可達(dá)。
如果一個路由器發(fā)現(xiàn)了 RIP 距離更短的路由,那么這種更新信息就傳播得很快,即“好消息傳得快”。
但一旦出現(xiàn)不可達(dá)的故障,則更新過程的收斂時間長,收斂速度很慢,即“壞消息傳得慢”。
2.5 RIP 的優(yōu)缺點
- 優(yōu)點:
- 實現(xiàn)簡單,路由器開銷小。
- 如果一個路由器發(fā)現(xiàn)了 RIP 距離更短的路由,那么這種更新信息就傳播得很快,即“好消息傳播得快”。
- 缺點:
- RIP 限制了最大 RIP 距離為 15,這就限制了使用 RIP 的自治系統(tǒng) AS 的規(guī)模。
- 相鄰路由器之間交換的路由信息是路由器中的完整路由表,因而隨著網(wǎng)絡(luò)規(guī)模的擴大,開銷也隨之增大。
- “壞消息傳播得慢”,使更新過程的收斂時間過長。因此,對于規(guī)模較大的自治系統(tǒng) AS,應(yīng)當(dāng)使用 OSPF 協(xié)議。
3 內(nèi)部網(wǎng)關(guān)協(xié)議 IGP——開放最短路徑優(yōu)先協(xié)議 OSPF
開放最短路徑優(yōu)先(Open Shortest Path First,OSPF)協(xié)議是為了克服路由信息協(xié)議 RIP 的缺點而開發(fā)出來的。
OSPF 不使用 UDP 數(shù)據(jù)報傳送,而是直接使用 IP 數(shù)據(jù)報傳送。
OSPF 是基于鏈路狀態(tài)的,而不像 RIP 是基于距離向量的。
3.1 OSPF 的相關(guān)概念
- 鏈路狀態(tài)(Link State,LS):指本路由器都和哪些路由器相鄰,以及相應(yīng)鏈路的“代價”。
- 代價(度量,metric):用來表示費用、距離、時延和帶寬等,這些都由網(wǎng)絡(luò)管理人員來決定。
【注】“代價”可理解為圖上的邊的權(quán)重值,在 OSPF 中一般稱為成本度量 metric。
- OSPF 的五種報文類型:
類型 | 用途 |
---|---|
問候(Hello) | 用來發(fā)現(xiàn)和維護(hù)鄰居路由器的可達(dá)性 |
數(shù)據(jù)庫描述(Database Description) | 用來向鄰居路由器給出自己的鏈路狀態(tài)數(shù)據(jù)庫中的所有鏈路狀態(tài)項目的摘要信息 |
鏈路狀態(tài)請求(Link State Request) | 用來向鄰居路由器請求發(fā)送某些鏈路狀態(tài)項目的詳細(xì)信息 |
鏈路狀態(tài)更新(Link State Update) | 路由器使用鏈路狀態(tài)更新分組將其鏈路狀態(tài)信息進(jìn)行洪泛發(fā)送,即用洪泛法對整個系統(tǒng)更新鏈路狀態(tài) |
鏈路狀態(tài)確認(rèn)(Link State Acknowledgement) | 對鏈路狀態(tài)更新分組的確認(rèn)分組 |
3.2 OSPF 的工作原理
假設(shè)有以下自治系統(tǒng) AS,連線上的數(shù)值即為度量代價 metric,該自治系統(tǒng)連接了外部網(wǎng)絡(luò) N1。
R1------(1)------R2
| |
| |
| |
(5) (2)
| |
| |
| |
R3------(4)------R4---(6)---N1
3.2.1 鄰居關(guān)系的維護(hù)
OSPF 相鄰路由器之間通過交互問候(Hello)分組來建立和維護(hù)鄰居關(guān)系。
- 問候分組封裝在 IP 數(shù)據(jù)報中,發(fā)往組播地址 224.0.0.5。IP 數(shù)據(jù)報首部中的協(xié)議號字段的取值為 89,表明 IP 數(shù)據(jù)報的數(shù)據(jù)載荷為 OSPF 分組:
… | 目的地址 | 協(xié)議號 | … | OSPF 問候分組 |
---|---|---|---|---|
… | 224.0.0.5 | 89 | … | xxx |
- 問候分組的發(fā)送周期為 10 秒。若 40 秒未收到來自鄰居路由器的問候分組,則認(rèn)為鄰居路由器不可達(dá)。
- 每個路由器都會建立一張鄰居表。比如 R1 的鄰居表:
鄰居 ID | 接口 | 倒計時 |
---|---|---|
R2 | 0 | 36s |
R3 | 1 | 18s |
- 不僅如此,每個路由器都會產(chǎn)生鏈路狀態(tài)通告(Link State Advertisement,LSA),其包含兩種信息:
- 直連網(wǎng)絡(luò)的鏈路狀態(tài)信息;
- 鄰居路由器的鏈路狀態(tài)信息。
- 例如,R4 的鏈路狀態(tài)通告見下表:
路由器/網(wǎng)絡(luò) | 度量代價 metric |
---|---|
直連網(wǎng)絡(luò) N1 | 6 |
鄰居路由器 R2 | 2 |
鄰居路由器 R3 | 4 |
3.2.2 鏈路狀態(tài)數(shù)據(jù)庫的建立
- 鏈路狀態(tài)通告 LSA 被封裝在鏈路狀態(tài)更新(Link State Update,LSU)分組中,采用可靠的洪泛法(Flooding)進(jìn)行發(fā)送。
- 洪泛法:路由器向自己所有的鄰居路由器發(fā)送鏈路狀態(tài)更新分組,收到該分組的各路由器又將該分組轉(zhuǎn)發(fā)給自己所有的鄰居路由器(但其上游路由器除外),以此類推。
- 可靠:指收到鏈路狀態(tài)更新分組后要發(fā)送確認(rèn),收到重復(fù)的更新分組無需再次轉(zhuǎn)發(fā),但要發(fā)送一次確認(rèn)。
- 如下圖所示為洪泛法(^ 和 < 表示傳送方向):
R1<<<<<<(LSU)------R2
^ ^
^ ^
^ ^
(LSU) (LSU)
| |
| |
| |
R3<<<<<<(LSU)------R4------N1
- 鏈路狀態(tài)數(shù)據(jù)庫(Link State Database,LSDB):使用 OSPF 的每一個路由器都有一個鏈路狀態(tài)數(shù)據(jù)庫,用于存儲鏈路狀態(tài)通告 LSA。
- 通過各路由器洪泛發(fā)送封裝有各自鏈路狀態(tài)通告 LSA 的鏈路狀態(tài)更新分組 LSU,各路由器的鏈路狀態(tài)數(shù)據(jù)庫 LSDB 最終將達(dá)到一致。
- 如下表為 R1 的數(shù)據(jù)庫:
R1 的 LSDB |
---|
R1 的 LSA |
R2 的 LSA |
R3 的 LSA |
R4 的 LSA |
- 最后,使用 OSPF 的各路由器,基于鏈路狀態(tài)數(shù)據(jù)庫 LSDB 進(jìn)行最短路徑優(yōu)先計算(采用 Dijkstra 算法,用來求單源最短路徑),構(gòu)建出各自到達(dá)其他各路由器的最短路徑,即構(gòu)建各自的路由表。
- 如此往復(fù),每隔 30 min 或鏈路狀態(tài)變化時,都要經(jīng)歷以上過程,使得各路由器的鏈路狀態(tài)數(shù)據(jù)庫 LSDB 重新達(dá)到一致。
3.2.3 鏈路狀態(tài)路由算法
下面來總結(jié) OSPF 的工作流程。
鏈路狀態(tài)數(shù)據(jù)庫的建立:
- 每個路由器發(fā)送問候分組,了解鄰居的地址和 metric。
- 路由器 A 發(fā)送數(shù)據(jù)庫描述分組,向鄰居 B 給出自己數(shù)據(jù)庫中的摘要信息。
- 路由器 B 收到鄰居 A 發(fā)來的數(shù)據(jù)庫描述分組,解析其中的摘要:
- 若自己數(shù)據(jù)庫都有,則不作處理;
- 若存在缺失的或需要更新的,發(fā)送鏈路狀態(tài)請求分組,請求新的信息。
- 路由器 A 收到鄰居 B 發(fā)來的鏈路狀態(tài)請求分組后,向 B 發(fā)送鏈路狀態(tài)更新分組。
- 路由器 B 收到鄰居 A 發(fā)來的鏈路狀態(tài)更新分組后,B 更新自己的信息,再向鄰居 A 發(fā)送鏈路狀態(tài)確認(rèn)分組。
- 每個路由器根據(jù)自己的數(shù)據(jù)庫,使用 Dijkstra 算法構(gòu)造去往其他路由器的最優(yōu)路徑。
只要有一個路由器的鏈路狀態(tài)發(fā)生變化:
- 該路由器泛洪發(fā)送鏈路狀態(tài)更新分組。
- 更新完畢后,每個路由器返回鏈路狀態(tài)確認(rèn)分組進(jìn)行確認(rèn)。
- 每個路由器根據(jù)自己的數(shù)據(jù)庫,使用 Dijkstra 算法構(gòu)造去往其他路由器的最優(yōu)路徑。
【注】OSPF 沒有“壞消息傳得慢”的問題,收斂速度很快。
3.2.4 多點接入網(wǎng)絡(luò)中的 OSPF 路由器
為了減少洪泛發(fā)送問候分組和鏈路狀態(tài)更新分組的數(shù)量,OSPF 選舉指定路由器(Designated Router,DR)和備用指定路由器(Backup Designated Router,BDR)。
- 所有的非 DR/BDR 只與 DR/BDR 建立鄰居關(guān)系。
- 非 DR/BDR 之間通過 DR/BDR 交換信息。
3.3 OSPF 劃分區(qū)域
為使 OSPF 協(xié)議能夠用于規(guī)模很大的網(wǎng)絡(luò),OSPF 把一個自治系統(tǒng) AS 再劃分為若干個更小的范圍,稱為區(qū)域(area)。
- 優(yōu)點:將洪泛的范圍限制在每個區(qū)域而非整個自治系統(tǒng)中,減少了網(wǎng)絡(luò)的通信量。
- 缺點:交換信息的種類增多,同時也使 OSPF 協(xié)議更加復(fù)雜。
- 自治系統(tǒng)邊界路由器(AS Border Router,ASBR):R6
- 主干路由器(Backbone Router,BBR):R3、R4、R5、R6
- 區(qū)域內(nèi)路由器(Internal Router,IR):區(qū)域 1 的 R1、R2,區(qū)域 2 的 R8,區(qū)域 3 的 R9
- 區(qū)域邊界路由器(Area Border Router,ABR):R3、R4、R7
4 外部網(wǎng)關(guān)協(xié)議 EGP——邊界網(wǎng)關(guān)協(xié)議 BGP
邊界網(wǎng)關(guān)協(xié)議(Border Gateway Protocol,BGP)屬于外部網(wǎng)關(guān)協(xié)議 EGP,用于自治系統(tǒng) AS 之間的路由選擇協(xié)議。
對于 AS 之間的路由選擇,使用統(tǒng)一的“代價”作為度量來尋找最佳路由是不行的。因為不同的 AS 可能使用不同的 IGP,且不是每個 AS 都允許經(jīng)過。
4.1 BGP 的工作原理
文章來源:http://www.zghlxwxcb.cn/news/detail-432650.html
- 在配置 BGP 時,每個 AS 的管理員要選擇至少一個路由器作為該 AS 的“BGP 發(fā)言人”。
- 使用 TCP 連接交換路由信息的兩個 BGP 發(fā)言人,彼此稱為對方的鄰站(neighbor)或對等站(peer)。
- BGP 發(fā)言人除了運行 BGP 協(xié)議外,還必須運行自己所在 AS 所使用的內(nèi)部網(wǎng)關(guān)協(xié)議 IGP,例如 RIP 或 OSPF。
- BGP 發(fā)言人交換網(wǎng)絡(luò)可達(dá)性的信息,也就是要到達(dá)某個網(wǎng)絡(luò)所要經(jīng)過的一系列自治系統(tǒng)。
- 為了與其他 AS 中的 BGP 發(fā)言人交換路由信息,就要先建立 TCP 連接,然后在此連接上交換 BGP 報文以建立 BGP 會話,利用 BGP 會話交換路由信息。
- BGP 采用路徑向量算法:
文章來源地址http://www.zghlxwxcb.cn/news/detail-432650.html
- BGP 支持 CIDR,因此 BGP 的路由表也就應(yīng)當(dāng)包括目的網(wǎng)絡(luò)前綴、下一跳路由器,以及到達(dá)該目的網(wǎng)絡(luò)所要經(jīng)過的各個自治系統(tǒng)序列。
- 在 BGP 剛剛運行時,BGP 的鄰站是交換整個的 BGP 路由表。但以后只需要在發(fā)生變化時更新有變化的部分(交換路徑向量)。這樣做對節(jié)省網(wǎng)絡(luò)帶寬和減少路由器的處理開銷都有好處。
4.2 BGP 的報文類型
報文 | 用途 |
---|---|
打開(Open) | 用來與相鄰的另一個BGP發(fā)言人建立關(guān)系,使通信初始化 |
更新(Update) | 用來周期性地證實鄰站的連通性 |
?;睿↘eepalive) | 用來通告某一條路由的信息,以及列出要撤銷的多條路由 |
通知(Notification) | 用來發(fā)送檢測到的差錯 |
5 路由選擇協(xié)議總結(jié)
協(xié)議 | RIP | OSPF | BGP |
---|---|---|---|
類型 | IGP | IGP | EGP |
傳遞協(xié)議 | UDP | IP | TCP |
路由算法 | 距離向量算法 | 鏈路狀態(tài)路由算法 | 路徑向量算法 |
路徑選擇 | 跳數(shù)(hop)最小 | 代價(metric)最低 | 較好 |
收斂速度 | 好消息快,壞消息慢 | 快 | 慢 |
交換結(jié)點 | 本網(wǎng)絡(luò)中的相鄰路由器 | 本網(wǎng)絡(luò)中的所有路由器 | 相鄰路由器 |
交換內(nèi)容 | 整個路由表 | 相鄰路由器的鏈路狀態(tài)信息 | 首次:整個路由表;非首次:變化部分 |
到了這里,關(guān)于【計算機網(wǎng)絡(luò)-網(wǎng)絡(luò)層】路由選擇協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!