網路層概述#
實現網路互聯
主要解決以下問題:
- 為運輸層提供服務(可靠或不可靠);
- 網路尋址問題(網路編號與路由器介面)
- 路由選擇問題;
分組轉發和路由選擇#
網路層的主要任務:就是將分組從源主機經過多個網路和多段鏈路傳輸到目的主機,可以將該任務劃分為分組轉發和路由選擇兩種重要的功能
如上圖,路由器要處理怎麼有效地從 A 到 B 的問題
路由表需要對網路拓撲變化的計算最優化
轉發表是從路由表得出,轉發表的結構需要使查找最優化
網路層向上提供的兩種服務#
面向連接的虛電路服務#
== 看圖,核心是,直達,走出一條路來,放佛是拉著一根物理線 ==
- 核心思想是 “可靠通信應由網路自身來保證”。
- 必須首先建立網路層連接 —— 虛電路(Virtual Circuit,VC),以保證通信雙方所需的一切網路資源
- 通信雙方沿著已建立的虛電路發送分組。(是邏輯連接,分組沿著這條邏輯連接按照存儲轉發方式傳送,不是真正物理連接)
- 分組的首部僅在連接建立階段使用完整的目的主機地址,之後每個分組的首部只需要攜帶一條虛電路編號即可。
- 通信結束後,需要釋放之前所建立的虛電路。(有兩種,也有不釋放的虛電路)
- 使用虛電路 + 可靠傳輸的網路協議,就可使所發送的分組最終正確(== 無差錯按序到達、不丟失、不重複 ==)到達接收方
- 很多廣域分組交換網都使用面向連接的虛電路服務。例如,曾經的 X.25 和逐漸過時的幀中繼(Frame Relay,FR)、異步傳輸模式(Asynchronous Transfer Mode,ATM)。
但因特網沒有採用虛電路服務,而採用無連接的數據報服務。
無連接的數據報服務#
核心思想是 “可靠通信應由用戶主機來保證”(自己隨便走,問題留給接收方處理)
- 不需要建立網路層連接。(分組可能誤碼、丟失、重複和失序。)
- 每個分組可走不同的路徑。因此,每個分組的首部都必須攜帶目的主機的完整地址。
網際協議(IP)#
網際協議(Internet Protocol,IP)是 TCP/IP 系統架構網際層中的核心協議
TCP 和 IP 的通信來往
TCP 為應用層的某些協議提供可靠,UDP 為... 提供不可靠
與 IP 協議配套使用的四個協議:
ICMP:網際控制報文協議
IGMP:網際組管理協議
RARP:逆地址解析協議
ARP:地址解析協議
也就是網際層下有
ICMP IGMP
↓
IP
↓
ARP
的結構
與異構網路互聯#
網際層把一團網路視作一個統一網路處理
IPv4#
IPv4 是什麼#
因特網(Internet)上的每一個主機(或路由器)的每一個介面分配的一個在全世界範圍內唯一的 32 比特的標識符。
IPv6 有 128 比特
Pv 4 地址的編址方法:分類編制、劃分子網、無分類編制
IPV 4 地址表示方法(點分十進制表示方法)#
點分十進制表示方法:每 8 位一組,每組之間用。分割
二進制轉 10 進制再組合
分類編址方法#
A 類地址#
本地軟體環回測試地址,用於本主機內的進程之間的通信。
- 若主機發送一個目的地址為環回測試,例如 127.0.0.1 的 IP 數據報,則本主機的協議軟體就處理數據報中的數據,而不會把數據報發送到任何網路。目的地址為環回地址的 IP 數據報永遠不會出現在任何網路上,因為網路號為 127 的地址根本不是一個網路地址。
- 主機號全 0—— 網路地址:即是這個網路中的所有主機的地址
- 主機號全 1—— 廣播地址:即是向這個網路中所發送廣播的地址
127 開頭是定死了的,是本地使用的地址,127 後面的二進制數字組合就是我們可以在本地分配的地址
126 是最大的可以去聯網的 8 位前綴
不同的前綴也就是組合起來了不同的 "每個"A 類地址,每個 A 類地址中具體的地址數量也就是後面這 24 位決定的
B 類地址#
C 類地址#
地址間的對比#
ABCDE 五類 ipv 4 地址的指派範圍
18m51s
路由器之間的點對點鏈路也可看作是一個網路。該網路中有 65534 台主機和一個路由器介面,需要可分配的 ipv 4 地址數量為 65535 個,這超過了一個 b 類網,可分配的 I P V 4 地址數量只能為該網路分配一個 a 類網路號,也就是從 1- 126 中挑選一個。
該網路中有 254 台主機和一個路由器介面,需要可分配的 ipv 4 地址數量為 255 個,這超過了一個 c 類網可分配的 IPV 4 地址數量只能為該網路分配一個 b 類網路號,也就是從 128. 0 到 191. 255 中挑選一個。該網路中有 42 台主機和一個路由器介面,需要可分配的 IPV4 地址數量為 43 個,可以為該網路分配一個 c 類網路號,也就是從 192. 0. 0 到 223. 25 中挑選一。 255. 該網路中沒有主機,但包含兩個路由器介面,需要可分配的 IPV4 地址數量為兩個,可以為該網路分配一個 c 類網路號,也就是從 192. 0. 0 到 23. 25 武裝挑選一個,但不能與之前已分配的那個 c 類網路號相同。 255.
在給各網路分配了網路號後,就可以給各網路中的各主機和路由器的各介面分配相應網路號下的 IPV4 地址了。請同學們注意,同一個網路中,不同主機和路由器的各介面的 IPV4 地址的主機號必須各不相同,並且不能為全 0 和全一。因為主機號為全 0 的地址是網路地址,而主機號為全一的地址是廣播地址,這兩種地址是不能分配給主機或路由器介面的。通過本例可以看出, IPV4 分類編制方法最大的缺點就是容易造成 IPV4 地址的大量浪費。例如路由器 R1 的介面 2 所連接的網路需要的可分配 IPV4 地址數量為 255 個。由於一個 c 類網所包含的可分配 IPV4 地址數量為 254 個,無法滿足該網路對可分配 IBV4 地址數量的需求,因此不得不為該網路分配一個 b 類網路號。然而,一個 b 類網所包含的可分配 IPV4 地址數量為 65534 個,而該網路只需要 255 個地址,因此會造成 == 大量地址浪費 ==
IPv4 地址的劃分子網編址方法 - 第二階段 - 三級結構#
當一個團隊給自己的所有主機,申請到了,比如說 B 類地址,但是主機數量遠遠沒有達到 B 類的上限,就造成了浪費
從 IPv4 地址的主機號部分借用一些比特作為子網號來區分不同的子網,就可以利用原有網路中剩餘的大量 IPv4 地址,而不用申請新的網路地址了
IPv4 地址的劃分子網編址方法
- 子網掩碼可以表明分類 IPv4 地址的主機號部分被借用了幾個比特作為子網號。
- 與 IPv4 地址類似,子網掩碼也是由 32 比特構成的。
- 用左起多個連續的比特 1 對應 IPv4 地址中的網路號和子網號;
- 之後的多個連續的比特 0 對應 IPv4 地址中的主機號
- 將劃分子網的 IPv4 地址與相應的子網掩碼進行逐比特的邏輯與運算,就可得到該 IPv4 地址所在子網的網路地址。
- 關於默認子網掩碼:滿足既可以子網劃分又可以不進行子網劃分
例題:
無分類編址 -CIDR#
存在問題:數量巨大的 C 類網由於其每個網路所包含的地址數量太小,沒有得到充分使用。
地址掩碼
無分類編址方法使用的地址掩碼與劃分子網使用的子網掩碼類似,由 32 比特構成。
- 用左起多個連續的比特 1 對應 IPv 4 地址中的網路前綴;
- 之後的多個連續的比特 0 對應 IPv 4 地址中的主機號。
- 僅從 IPv 4 地址自身無法看出網路前綴和主機號各自的長度,必須配合地址掩碼使用
- 用無分類編址方法,可以根據客戶的需要分配適當大小的 CIDR 地址塊,因此可以更加有效地分配 IPv 4 的地址空間
斜線記法:
例題:
路由聚合#
- 網路前綴越長,地址塊越小,路由越具體
- 若路由器查表轉發分組時發現有多條路由條目匹配,則選擇網路前綴最長的那條路由條目,這稱之為最長路由匹配,因為這樣的路由更具體
拆分 CIDR 地址塊,目的地址的概念,也就是得到前綴後,主機那一部分全部都取成 0
這裡明確一個概念,題目裡說的,192.168.9.128/26 是子網,也就是說,它的那一類中,聚合的網路如果有,應該是比 26 要小於等於的,取 25 位的比特前綴也就有他了
應用規劃#
秉持原則
- 先分類
- 分類就是,就有個圖,我們就從主機號那裡看借來多少位取 2 的冪大於要覆蓋的圖
- 再分個數
- 主機號剩下的比特位就是我們能用來具體給每一個分配的地址
定長子網掩碼#
使用同一個子網掩碼來劃分子網
子網依次增大,主機號控制著每個之間內的覆蓋大小,這裡的主機號是 5 位,那麼它們網路地址之間的間隔就是 2 的五次方,也就是 32
如下所示,每個子網都分配 32 個,但實際需要的卻不要這麼多,故造成不必要的浪費
網路 5 只要 4 個地址,但是給他分配了 32 個
變長子網掩碼#
- 使用不同的子網掩碼來劃分子網;
- 每個子網所分配的 IP 地址數量可以不同,盡可能減少對 IP 地址的浪費;
子塊選擇原則:
- 每個子塊的起點位置不能隨便選取,只能選取主機號部分是塊大小整數倍的地址作為起點。
- 建議先為大的子塊選取。
例題:
二叉樹的劃分方法#
【定長子網劃分】
【變長子網劃分】
變長子網劃分的方法可能不止一種,但不是隨意选五個子塊都可以
【例題】
IPv 4 地址與 MAC 地址#
IPv 4 地址與 MAC 地址的封裝位置
數據包傳送過程中 IPv 4 地址與 MAC 地址的變化情況
在數據包的傳送過程中,數據包的源 IP 地址和目的 IP 地址保持不變(也就是出發地和最終目的地,下圖中的源 mac 1 和目的 mac 2)
在數據包的傳送過程中,數據包的源 MAC 地址和目的 MAC 地址逐鏈路(或逐網路)改變。
例題:
IPv4 地址與 MAC 地址的關係
因特網要使用 IP 地址和 MAC 地址這兩種類型的地址來共同完成尋址工作
路由器收到 IP 數據報後,根據其首部中的目的 IP 地址的網路號部分,基於自己的路由表進行查表轉發。
地址解析協議 ARP 會將 IP 地址對應成 MAC 地址
地址解析協議 Arp#
每台主機會維護自己的 ARP 緩存表,每次根據 ip 地址招人的時候,會先去自己的緩存表中找找看,目的地的 ip 地址有沒有對應的 ARP 緩存信息在自己的緩存表中
如果不在,它就會發送廣播幀(全 f)給到同一網路下的所有設備,攜帶的信息如下:
我是 xxx,我的目的是 xxx,我的 mac 地址是 xxx
如果每台主機檢查 ip 地址發現,自己和發出主機的目的地不是一致的,就會把它舍棄掉,如果是一致的,那麼就會發送單播的響應報文,
我是 xxx,我的目的地是 xxx,我的 mac 地址是 xxx
這個響應報文回到發出者以後,發出者就在自己的 ARP 緩存中把這個 ip 地址和 mac 地址的對應關係建立起來
動態靜態類型#
-- 動態:ARP 記錄是主機通過 ARP 自動獲取到的,生命周期默認為兩分鐘。生命周期結束後,該記錄自動刪除
-- 靜態:該記錄是由用戶或網路維護人員手工配置,不同操作系統下的生命周期不同,例如系統重啟後不存在或系統重啟後依然有效
週期性緩存表中的對應關係#
- 交換機轉發表中的 mac 地址和交換機介面號的對應關係是需要周期性刪除的,因為這種對應關係不是永久不變的
- 同理,arp 中的 ip 地址和 mac 地址的對應關係,也不是永久不變的,比如用戶更換了一塊新的網卡
ip 數據報的發送和轉發過程#
- 主機發送 ip 數據報
- 路由器轉發 ip 數據報
路由器維護自己介面所處的子網和子網驗碼及其自己的介面的對應關係
接收到出發點發來的目的地址以後,路由器把自己維護的介面對應的子網的地址掩碼和目的地址邏輯 & 運算,如果結果匹配上了自己的某個介面對應的子網,就從這個介面轉發出去
默認網關:如圖,主機 A 如何知道能在網路中通信,必須指定本網路中的一個路由器,由該路由器幫忙轉發,所指定的路由器為被稱為默認網關
路由器在接收到 IP 數據報如何轉發呢
❶ 檢查收到的 IP 數據報是否正確
生存時間是否結束;首部是否誤碼
若不正確,則丟棄該 IP 數據報,並向發送該 IP 數據報的源主機發送差錯報告
❷ 基於 IP 數據報首部中的目的 IP 地址在路由表中進行查找。
若找到匹配的路由條目,則按該路由條目的指示進行轉發,否則丟棄該 IP 數據報,並向發送該 IP 數據報的源主機發送 ICMP 差錯報告。
路由器將目的地址與路由條目中的地址掩碼相與得到目的網路地址,查看該目的網路是否匹配;
路由器對廣播數據報的處理#
路由器隔離廣播域,同子網下的其他設備都能接收到,路由器不會轉發廣播
例題:
12m35s
ip 數據報的首部格式#
- ipv 4 數據報的首部格式及其內容是實現本協議各種功能的基礎
- 在 tcp/ip 中,各種數據格式總是以 32 比特,也就是 4 個字節為單位來描述
分為固定部分和可變部分
固定部分:每個 ipv 4 數據報都要包含的部分 (理解為格式)
可變部分:某些 ipv 4 數據報的首部,除了包含 20 字節的固定部分(這是基礎),還包含一些可選地字段來增加 ipv 4 數據報的功能 (理解為插件)
版本:#
4 個比特,表示 ip 協議的版本,通信雙方必須使用一樣的版本
首部長度:#
表示 ip 數據報的首部的長度,字段取值以 4 字節為單位
- 首部長度的最小取值為 0101,也就是十進制的 5,再乘以 4 個字節每單位,也就表示 ==ipv 4 數據報首部占比有 20 字節的固定部分 ==(無可變部分)
- 首部長度的最大取值為 1111,也就是十進制的 15,再乘以 4 個字節每單位,也就是表示 ipv 4 數據報首部包含 20 字節固定部分和最大 40 字節可變部分
可選字段:#
長度從 1 到 40 字節不等,用來支持排錯、測量及安全等
用來增加 IP 數據報的功能,但也增加了路由器處理 IP 數據報的開銷,實際很少被使用;(在數據報的整個傳送路徑中的全部路由器,都要對選項字段進行檢查,降低了路由器處理數據報的速度)
04m14s
填充字段:#
確保首部長度為 4 字節的整數倍,使用全 0 進行填充
當首部長度(20 字節固定部分 + 可變部分)的長度不是 4 字節整數倍時,填充相應數量的全 0 字節,以確保 IPv4 數據報的首部長度是 4 字節的整數倍
區分服務:#
- 占 8 比特,用來獲得更好的服務,該字段一般不使用
總長度:#
- 占用 16 比特,表示 ip 數據報的總長度(首部 + 數據載荷)最大為 65535
- 標識 + 標誌 + 片偏移共同作用於 ipv 4 數據報分片
標識:#
占 16 比特,屬於同一個數據報的各分片數據報應該具有相同的標識,ip 軟體維持一個計數器,每產生一個數據報計數器 + 1,並將此值賦給標識字段
標誌:#
占 3 比特
- 最低位:MF 位,1 表示後面還有分片,0 表示是最後一個分片了
- 中間位:DF 位,1 表示不允許分片,0 標識為允許
- 最高位:保留位,必須為 0
片偏移:#
占 13 比特,指出分片數據報的數據載荷部分偏移其在原數據報的位置有多少個單位(以 8 字節為單位)
生存時間:#
占 8 比特,以秒為單位,最大生存周期為 255,路由器轉發 ip 數據報時,將 ip 數據報首部中的該字段的值減去 ip 數據報在本路由上所消耗的時間,若不為 0 就轉發,否則就丟棄
生存時間 TTL 字段的作用,防止被錯誤路由的 ipv 4 數據報無限制地困住在因特網中兜圈
協議#
長度為 8 個比特,用來指明 ipv 4 數據報的數據部分是何種協議數據單元 PDU
ICMP 協議:字段設置為 1
IGMP 協議:字段設置為 2
TCP 協議:字段設置為 6
UDP 協議:字段設置為 17
IPV 6 協議:字段設置為 41
OSPF 協議:字段設置為 89
首部檢驗和#
占 16 比特,用來檢驗首部再傳輸過程中是否出現差錯
IPv 4 數據報每經過一個路由器,其首部中的某些字段的值(例如生存時間 TTL、標誌以及片偏移等)都可能發生變化,因此路由器都要重新計算一下首部檢驗和。
發送端計算方法:以 16 bit 為單位,每個字相加後(先將首部檢驗和字段全置為 0),得到的結果取反碼後填入首部檢驗和字段
接收端:以 16 bit 為單位,每個字相加後,得到的結果取反碼
由於網際層並不向其高層提供可靠傳輸的服務,並且計算首部檢驗和是一項耗時的操作,因此在 IPv 6 中,路由器不再計算首部檢驗和,從而更快轉發 IP 數據報。
源 IP 地址#
占用 32 比特,發送端 IP 地址
目的 IP 地址#
占用 32 比特,接收端 IP 地址
分片的概念#
例題:
首部檢驗和計算的重點在於二進制反碼求和的運算
靜態路由配置#
03m23s
用戶或網路運維人員使用路由器的相關命令給路由器人工配置路由表。
優點:人工配置方式簡單、開銷小
缺點:不能及時適應網路狀態(流量、拓撲等)的變化
使用環境:一般只在小規模網路中採用。
默認路由的概念#
情景是,現在 R 1 要發送出去的目的上的設備太多了,不像上面一樣只有幾個設備,而是因特網,或者說超級多設備,這個時候,要在所有因特網中的設備的 ip 地址的映射關係手動寫進路由表裡就不太現實了
解決方案:添加一條默認條目,替代去往因特網眾多網路的海量路由條目
特定主機路由#
08m44s
手動添加去往的子網區域的路由器的端口作為下一跳,手動添加特定網路的地址作為目的網路,
路由選擇分類#
在一個自治系統內部,使用的具體的內部網關協議與外部的網關協議是沒有關係
- 自洽系統之間(比如這裡的 AS 1 和 AS 2 )叫做域間路由選擇,自洽系統內部,比如 as 1 自己內部,叫做域內路由選擇
- 域間路由:選擇外部網關協議 EGP (External Gateway Protocol) 這個類別的路由選擇協議,例如 BGP 4
- 域內路由:選擇內部網關協議 IGP (Interior Gateway Protocol) 這個類別的路由選擇協議,例如 RIP
- 外部網關協議 EGP 和內部網關協議 IGP 只是路由選擇協議的分類名稱,而不是具體的路由選擇協議。
- 外部網關協議和內部網關協議名稱中使用的是 “網關” 這個名詞,是因為在因特網早期的 RFC 文檔中,沒有使用 “路由器” 而使用的是 “網關” 這一名詞。
- 若源主機和目的主機處在不同的自治系統中(這兩個自治系統可能使用不同的內部網關協議),當數據報傳到一個自治系統的邊界時,就需要使用一種協議將路由選擇信息傳遞到另一個自治系統中 EGP
- 首先要知道的:RIP 基於 UDP,OSPF 基於 IP,BGP 基於 TCP,這些在 TCP/IP 協議棧中定義的路由協議用於發現和維護前往目的地的最短路徑。
- 然後怎麼判斷,某個協議是屬於哪一層的:一個協議的實現需要依賴協議所在層次的下一層功能。
TCP、UDP 是屬於傳輸層的協議;IP 是屬於網路層的協議;
(1):RIP 用 UDP(RIP 用到傳輸層),所以 ==RIP 是應用層的協議 ==;
(2):OSPF 用 IP(RIP 用到網路層),所以 ==OSPF 是網路層協議 ==;(有交材認為是傳輸層)
(比如在考研的考綱中:OSPF 協議是不使用 UDP 數據報傳送,而是直接使用 IP 數據報傳送,因此 OSPF 是被劃分到屬於網路層協議 - 這一點考研党要以考綱為標準);
(3):BGP 用 TCP(RIP 用到傳輸層),所以 BGP 是應用層協議;
路由信息協議 RIP - 工作在應用層,解決的是網路層的問題的協議#
路由信息協議 RIP 的相關基本概念
- 路由信息協議(Routing Information Protocol,RIP)
- RIP 要求自治系統 AS 內的每一個路由器都要維護從他自己到 AS 內每一個網路的距離記錄(距離向量 Distance-Vecto,D-V);
- RIP 使用跳數來衡量到達目的網路的距離;
- 路由器到直連網路的距離定義為 1;
- 路由器到非直連網路的距離定義為所經過的路由數加 1;
- 允許一條路徑最多只能包含 15 個路由器,只適用於小型互聯網;
“加 1” 是因為到達目的網路後就進行直接交付,而到直接連接的網路的距離已經定義為 1。
原理 :#
原則一:RIP 會選擇通過路由器數量最少的路由(走得慢,我也要走得少)
原則二:當到達同一目的網路有多條距離相等的路由時,可以進行等價負載均衡,將通信量均衡地分布到多條等價的路徑上(距離相等就分多波走)
三要素:#
- 和誰交換信息 - 僅和相鄰路由器交換;
- 交換什麼信息 - 路由器自己的路由表。
即本路由器到所在自治系統 AS 中各網路的最短 RIP 距離,以及到各網路應經過的下一跳路由器。
- 何時交換信息 - 週期性交換。即按固定的時間間隔交換路由信息。
為了加快 RIP 的收斂速度,當網路拓撲發生變化時,路由器要及時向相鄰路由器通告拓撲變化後的路由信息,這稱為觸發更新(變化了就立刻更新,而不需要等固定時間間隔)。
【基本工作過程】:
- 路由器剛開始工作時,只知道自己到直連網路的距離為 1;
- 每個路由器僅和相鄰路由器週期性地交換並更新路由信息;
- 若干次交換和更新後,每個路由器都知道到達本 AS 內各網路的最短距離和下一跳地址,稱為收斂;(“收斂” 就是在自治系統中所有的結點都得到正確的路由選擇信息的過程。)
RIP 的基於距離向量路由選擇算法
每個結點基於其與鄰居結點間的直接鏈路距離,以及鄰居交換過來的距離向量計算並更新其到達每個目的結點的最短距離,然後將新的距離向量再通告給其所有鄰居,直到距離向量不再改變。
對地址為 X 的相鄰路由器發來的 RIP 報文,先修改此報文中的所有項目:
把 “下一跳” 字段中的地址都改為 X,並把所有的 “距離” 字段的值加 1(見後面的解釋 1)。每一個項目都有三個關鍵數據,即:到目的網路 N,距離是 d,下一跳路由器是 X。
【RIP 路由更新規則】:
- 當有一個路由器 C,將其路由表中要到達的目的網路的下一跳都記為問號,若假設 C 的 RIP 更新報文發送周期到了,則 C 將自己路由表中的相關路由信息,封裝到 RIP 更新報文中發送給路由器 D,D 對 C 的路由表進行改造,並按照更新理由和不更新理由進行更新。
- 更新理由
- 發現了新的網路,添加
- 到達目的網路,相同的下一跳(指都經過 C 轉發),最新消息,要更新
- 到達目的網路,同的下一跳(指原來路徑不經過 C 轉發),新路由優勢,要更新
- 到達目的網路,不同的下一跳,RIP 距離相等,可以等價負載均衡,添加
- 不更新理由
- 到達目的網路,不同的下一跳,新路由劣勢,不更新
RIP 存在的問題 ——“壞消息傳播得慢”
“壞消息傳播得慢”(路由環路或 RIP 距離無窮計數問題)
- 是距離向量算法的一個固有問題。(無法徹底解決)
- 以下措施減少出現該問題的概率或減小該問題帶來的危害:
- 限制最大 RIP 距離為 15(16 表示不可達)。
- 當路由表發生變化時就立即發送路由更新報文(即 “觸發更新”),而不僅是周期性發送。
- 讓路由器記錄收到某個特定路由信息的介面,而不讓同一路由信息再通過此介面向反方向傳送(即 “水平分割”)。
5. RIP 版本和相關報文的封裝
RIP 使用 udp 協議傳輸的(UDP 端口號為 520),在 UDP 之上,屬於應用層
RIP 的封裝格式:L 2 Header + IP + UDP + RIP
6. RIP 的優缺點
OSPF 協議 - 開放最短路徑優先協議#
對於規模較大的自治系統 AS 應該使用 OSPF
OSPF 是為了解決 RIP 的問題而開發出來的,開放最短路徑優先只是個名字,並不表示其他的路由選擇協議不是最短路徑優先,事實上,每個對於自洽系統內的內部網關協議,比如 RIP,都是尋找的最短路徑
OSPF 的基本特徵是
- 基於鏈路狀態管理
- 採用最短路徑算法 SPF,保證不會產生路由環路
- OSPF 不限制網路規模,更新效率高,收斂速度快
- 使用 IP 數據報(協議號 89)進行封裝,而 RIP 使用 UDP 封裝(應用層)
- 多點接入的 OSPF 中,選舉 BR 和 BDR 來維護鄰居信息
鏈路狀態#
OSPF 是基於鏈路狀態的,而不是像 RIP 一樣是基於距離向量的
鏈路狀態指的是:本路由器都和哪些路由器相鄰以及相應的鏈路的代價 COST(這個代價用來表示費用、距離、時延和帶寬,由網路管理人員來做這個參數設置)
思科路由器中的 OSPF 協議的代價就是:$\displaystyle \frac {100Mb/s}{鏈路帶寬}$,計算結果如果小於 1 那麼進位計為 1,如果大於 1,那麼舍弃小數,保留整數
問候分組#
OSPF 使用問候分組來維護相鄰節點的信息
問候分組封裝在 IP 數據報中,發送組播地址 224.0.0.5
224.0.0.5 這是一個 D 類多播地址
IP 數據報首部中的協議號字段的取值為 89,標明 IP 數據報的數據載荷是 OSPF 分組
還記得 IP 數據報嗎,它長成這樣
通過發送問候分組,每個路由器都建立一張鄰居表
問候分組的發送周期是 10 秒,
如果 40 秒沒有收到來自鄰居的問候分組,那麼認為鄰居路由器不可達
以上面的 R1 為例,R4 和它的介面 0 相連,介面 1 和 R2 路由器相連,收到來自 R4 和 R2 的問候分組,就重置判活倒計時,直到下次收到來自他們的問候分組
LSA 鏈路狀態通告#
OSPF 中的路由器會產生鏈路狀態通告(LSA)
LSA 中會包含以下兩類鏈路狀態信息:
- 直連網路的鏈路信息
- 鄰居路由器的鏈路狀態信息
LSU 鏈路狀態更新#
LSA 被封裝在 LSU 分組中,採用 == 可靠 == 的 == 洪泛法 == 進行發送
洪泛法#
洪泛法的要點是 == 路由器向自己所有的鄰居路由器 == 發送 LSU 鏈路狀態更新分組
收到該分組的各路由器 == 又將該分組轉發給自己所有的鄰居路由器 ==(但其上游路由器除外),以此類推
像是多米諾骨牌一樣
可靠的洪泛法是指收到 LSU 鏈路狀態更新分組後要發送確認,收到重複的更新分組無需再次轉發,但要發送一次確認
LSDB 鏈路狀態數據庫#
每個 OSPF 中的路由器都維護一個 LSDB,用戶存儲 LSA 鏈路狀態通告
通過各路由器洪泛發送封裝有各自鏈路狀態通告 LSA 的鏈路狀態更新分組 LSU,各路由器的鏈路狀態數據庫 LSDB 最終將達到一致
基於鏈路狀態數據庫進行最短路徑優先計算#
對於每個路由器維護的 LSDB 進行最短路徑優先計算,構建出各自到達其他各路由器的最短路徑,即構建各自的路由表
OSPF 維護的五種分組#
- 問候分組
- LSDB
- LSR
- LSU
- LSA
OSPF 的工作過程#
多點接入網路中的 OSPF 路由器#
為了減少洪泛發送問候分組和鏈路狀態更新分組的數量,OSPF 採用以下措施
選舉指定路由器(Designated Router,DR)和備用的指定路由器(Backup Designated Router,BDR)
所有的非 DR/BDR 只與 DR/BDR 建立鄰居關係
非 DR/BDR 之間通過 DR/BDR 交換信息
通過選舉 BR 和 BDR 後,建立的鄰居關係數量為 $\displaystyle 2\times (n-1) + 1$
OSPF 劃分區域#
為了使 OSPF 協議能夠用於規模很大的網路,OSPF 把一個自治系統 AS 再劃分為若干個更小的範圍,稱為區域(area)
每個區域的規模不應太大,一般所包含的路由器不應超過 200 個
每個區域都由一個 32 比特的區域標識符,可用點分十進制表示
劃分區域的好處就是把利用洪泛法交換鏈路狀態信息的範圍局限於每一個區域,而不是整個自治系統 AS,這樣就減少了整個網路上的通信量。
第 4 章 - 網路層
主幹區域需要與其他自治系統交換路由信息,這樣的路由器稱為自治系統邊界路由器(AS Border Router,ASBR):R6
- 主幹區域內的路由器稱為主幹路由器(Backbone Router,BBR):R3、R4、R5、R6 和 R7
- 如果路由器的所有介面都在區域內,則該路由器稱為區域內路由器(Internal Router,IR):區域 1 內的 R1 和 R2,區域 2 內的 R8,區域 3 內的 R9
- 本區域與本自治系統內的別的區域聯通的路由器,稱為區域邊界路由器(Area Border Router,ABR):R3、R4 和 R7。區域邊界路由器的一個接用於連接自身所在區域,另一個介面用於連接主幹區域。
OSPF 例題#
BGP 邊界網關協議#
這是兩個自洽系統之間溝通使用的外部網關協議
- 因為在不同 AS 內度量路由的 “代價”(距離、帶寬、費用等)可能不同,因此對於 AS 之間的路由選擇,使用統一的 “代價” 作為度量來尋找最佳路由是不行的
比如下面這個圖中,根據不同的度量尺度,可能有多種最短路徑的答案
另一方面,我們可能因為自身的需求,有一些路徑上的個性化的需求 -
- 自治系統之間的路由選擇必須考慮相關策略 (政治,經濟,安全等);
-
- BGP 只能是力求尋找一條能夠到達目的網路且比較好的路由,而並非要尋找一條最佳路由 (不兜圈);
BGP 是怎麼運行的#
- 在配置 BGP 時,每個 AS 的管理員要選擇至少一個路由器作為該 AS 的 “BGP 發言人”
- 一般來說,兩個 BGP 發言人都是通過一個共享網路連接在一起的,而 BGP 發言人往往就是 ==BGP 邊界路由器 ==
- 使用TCP連接交換路由信息的兩個 BGP 發言人,彼此稱為對方的鄰站(neighbor)或對等站(peer)
- BGP 發言人除了運行 BGP 協議外,還必須運行自己所在 AS 所使用的內部網關協議 IGP,例如 RIP 或 OSPF
- 也就是說,發言人承擔著一個溝通內部和外部的角色
- BGP 發言人交換網路可達性的信息
- 也就是要到達某個網路所要經過的一系列自治系統
- 當 BGP 發言人相互交換了網路可達性的信息後
- 各 BGP 發言人就根據所採用的策略,從收到的路由信息中找出到達各自治系統的較好的路由
- 也就是構造出樹形結構且不存在環路的自治系統連通圖
![[第 4 章 - 網路層.pdf#page=350]]
- 也就是構造出樹形結構且不存在環路的自治系統連通圖
- 各 BGP 發言人就根據所採用的策略,從收到的路由信息中找出到達各自治系統的較好的路由
BGP 發言人交換路徑向量的例子#
BGP 適用於多級結構的因特網
![[第 4 章 - 網路層.pdf#page=351]]
可以達到目的地的,可沿路徑叫做路徑向量
AS3 要去到目的地,顯然不能選擇會經過自身的路徑
BGP 的四種報文#
BGP-4 是目前使用得最多的版本,在 [RFC 4271] 中規定了 BGP-4 的四種報文
[[第 4 章 - 網路層.pdf#page=352]]
- 打開 - OPEN;; 用來與相鄰的另一個 BGP 發言建立關係,使通信初始化
- 保活 - KEEPALIVE;; 用來周期性地證實鄰站的連通性
- 更新 - UPDATE;; 用來通告某一條路由的信息,以及列出要撤銷的多條路由
- 通知 - NOTIFICATION;; 用來發送檢測到的差錯
路由器的基本工作原理#
路由器的定義#
路由器是一種具有多個輸入端口和輸出端口的專用計算機,其任務是轉發分組
路由器的轉發流程#
- 信號從路由器的某個輸入端口進入路由器
- 物理層將信號轉換成比特流後,向上交付給數據鏈路層處理
- 數據鏈路層從比特流中識別出幀,去掉幀頭和幀尾後,向上交付給網路層處理
- 如果交付給網路層處理的分組是普通待轉發的數據分組
- 則根據分組首部中的目的地址進行查表轉發
1. 若找不到匹配的轉發條目,就丟棄該分組
2. 否則按照匹配條目中所指示的端口進行轉發 - 網路層更新數據分組首部中的某些字段的值
- 例如,將數據分組的生存時間 TTL 減一
- 然後向下交付給數據鏈路層進行封裝
- 數據鏈路層將數據分組封裝成幀後,向下交付給物理層處理
- 物理層將真看作比特流,將其變換成相應的電信號發送出去
在第四步中,會出現一個分支 - 如果交付給網路層處理的是攜帶有路由報文的路由分組
- 則把路由報文送交路由選擇處理機
- 路由選擇處理機根據路由報文的內容來更新自己的路由表
- 路由表一般僅包含從目的網路到下一跳的映射
- 路由表需要對網路拓撲變化的計算最優化,而轉發表是從路由表得出來的
- 轉發表的結構應當使查找過程最優化
- 路由選擇處理機除了處理收到的路由報文,還會周期性的給其他路由器發送自己所知道的路由信息
交付網路層的是數據分組#
交付網路層的是帶有路由報文的路由分組#
路由器的特點#
- 路由表一般僅包含從目的網路到下一跳的映射
- 路由表需要對網路拓撲變化的計算最優化
- 轉發表是從路由表得出的
- 轉發表的結構應當使查找過程最優化
- 路由器的各端口還應具有輸入緩衝區和輸出緩衝區
- 輸入緩衝區用來暫存新進入路由器但還來不