1. 程式人生 > >網絡是怎樣連接的學習筆記-第三章-路由器的包轉發操作

網絡是怎樣連接的學習筆記-第三章-路由器的包轉發操作

相同 col 數字 spc 技術 ima 這一 同時 個數

3.3 路由器的包轉發操作

3.3.1 路由器的基本知識

路由器通過查表判斷轉發目標

網絡包經過集線器和交換機之後到達了路由器,並在此被轉發到下一個路由器。

這一步轉發的工作原理和交換機類似,不過在具體的操作過程上,路由器和交換機是有區別的,因為路由器是基於 IP 設計的,而交換機是基於以太網設計的。

路由器概概況

路由器的內部結構如下圖所示。只要看明白路由器包括轉發模塊和端口模塊兩部分就可以了。

其中轉發模塊負責判斷包的轉發目的地,端口模塊負責包的收發操作。

二者關系,就相當於協議棧的 IP 模塊和網卡之間的關系,將路由器的轉發模塊想象成 IP 模塊,將端口模塊想象成網卡。

技術分享圖片

通過更換網卡,計算機不僅可以支持以太網,也可以支持無線局域網。如果路由器的端口模塊安裝了支持無線局域網的硬件,就可以支持無線局域網了。

計算機的網卡除了以太網和無線局域網之外很少見到支持其他通信技術的品種,而路由器的端口模塊則支持除局域網之外的多種通信技術,如 ADSL、FTTH,以及各種寬帶專線等,只要端口模塊安裝了支持這些技術的硬件即可。

路由器工作原理

根據端口對應通信技術將包接收

路由器轉發包時通過端口將發過來的包接收進來,具體取決於端口對應的通信技術。

對於以太網端口來說,就是按照以太網規範進行工作,而無線局域網端口則按照無線局域網的規範工作,總之就是委托端口的硬件將包接收進來。

根據包中IP頭部中IP地址進行查詢後轉發包到對應端口

接下來,轉發模塊會根據接收到的包的 IP 頭部中記錄的接收方 IP 地址,在路由表中進行查詢,以此判斷轉發目標。

然後,轉發模塊將包轉移到轉發目標對應的端口,端口再按照硬件的規則將包發送出去,也就是轉發模塊委托端口模塊將包發送出去的意思。

端口具有MAC地址和IP地址

端口模塊是以實際的發送方或者接收方的身份來收發網絡包的。

以以太網端口為例,路由器的端口具有 MAC 地址,因此它就能夠成為以太網的發送方和接收方。

和網卡一樣,MAC 地址也是在生產時寫入端口的 ROM 中的。但端口並不會成為 IP 的發送方和接收方。

端口還具有 IP 地址,從這個意義上來說,它和計算機的網卡是一樣的。

當轉發包時,首先路由器端口會接收發給自己的以太網包,然後查詢轉發目標,再由相應的端口作為發送方將以太網包發送出去。

這一點和交換機是不同的,交換機只是將進來的包轉發出去而已,它自己並不會成為發送方或者接收方。

端口是按照以太網規範接收包的,即當端口的 MAC 地址和包的接收方MAC 地址一致時,端口才接受這個包,否則就丟棄包。

3.3.2 路由表中的信息

使用路由表判斷轉發目標

交換機是通過 MAC 頭部中的接收方 MAC 地址來判斷轉發目標的,而路由器則是根據 IP 頭部中的 IP 地址來判斷的。

由於使用的地址不同,記錄轉發目標的表的內容也會不同。路由器中的表叫作路由表,其中包含的信息如下圖所示

路由表的結構

目標地址中的IP地址是子網的地址

目標地址列記錄的是接收方的信息。實際上這裏的 IP 地址只包含表示子網的網絡號部分的比特值,而表示主機號部分的比特值全部為0B。

路由器會將接收到的網絡包的接收方 IP地址與路由表中的目標地址進行比較,並找到相應的記錄。

交換機在地址表中只匹配完全一致的記錄,而路由器則會忽略主機號部分,只匹配網絡號部分。

打個比方,路由器在轉發包的時候只看接收方地址屬於哪個區,×× 區發往這一邊,×× 區發往那一邊。

技術分享圖片

路由聚合

剛才我們說過,目標地址列中的 IP 地址表示的是子網,但也有一些例外,有時地址本身的子網掩碼和路由表中的子網掩碼是不一致的,這是路由聚合的結果。

路由聚合會將幾個子網合並成一個子網,並在路由表中只產生一條記錄。

如圖 3.14 所示,我們現在有 3 個子網,分別為10.10.1.0/24、10.10.2.0/24、10.10.3.0/24,路由器 B 需要將包發往這 3 個子網。

路由器 B 的路由表中原本應該有對應這 3 個子網的 3條記錄,但在這個例子中,無論發往任何一個子網,都是通過路由器 A 來進行轉發。

因此我們可以在路由表中將這 3 個子網合並成 10.10.0.0/16,這樣也可以正確地進行轉發,但我們減少了路由表中的記錄數量,這就是路由聚合。

經過路由聚合,多個子網會被合並成一個子網,子網掩碼會發生變化,同時,目標地址列也會改成聚合後的地址。

技術分享圖片

路由表的子網掩碼列只表示在匹配網絡包目標地址時需要對比的比特數量

還有另外一些情況,如將一個子網進行細分並註冊在路由表中,然後拆分成多條記錄。

從結果上看,路由表的子網掩碼列只是用來在匹配目標地址時告訴路由器應該匹配多少個比特。

而且,目標地址中的地址和實際子網的網絡號可能並不完全相同,但即便如此路由器依然可以正常工作。

通過上述方法,我們也可以將某臺具體計算機的地址寫入路由表中,這時的子網掩碼為 255.255.255.255,也就是說地址中的全部 32 個比特都為 1。

這樣一來,主機號部分比特全部為 0 可以表示一個子網,主機號部分比特不全部為 0 可以表示某一臺計算機,兩種情況可以用相同的規則來處理。

網關、接口和躍點計數

網關和接口它們表示網絡包的轉發目標。根據目標地址和子網掩碼匹配到某條記錄後,路由器就會將網絡包交給接口列中指定的網絡接口(即端口),並轉發到網關列中指定的 IP 地址。

躍點計數表示距離目標 IP 地址的距離是遠還是近。這個數字越小,表示距離目的地越近;數字越大,表示距離目的地越遠。

路由表的維護

路由器中對路由表的維護是與包轉發操作相互獨立的,在轉發包的過程中不需要對路由表的內容進行維護。

對路由表進行維護的方法有幾種,大體上可分為以下兩類:

①由人手動維護路由記錄

②根據路由協議機制,通過路由器之間的信息交換由路由器自行維護路由表的記錄

其中提到的路由協議有很多種,例如 RIP、OSPC、BGP 等都屬於路由協議。

3.3.3 路由器的包接收操作

路由器接收網絡包後的操作

路由器接收包後存入緩存區

路由器的端口有各種不同的類型,這裏我們只介紹以太網端口是如何接收包的。

以太網端口的結構和計算機的網卡基本相同,接收包並存放到緩沖區中的過程也和網卡幾乎沒有區別。

PHY模塊和MAC模塊處理信號為數字信息

首先,信號到達網線接口部分,其中的 PHY(MAU)模塊和 MAC 模塊將信號轉換為數字信息,然後通過包末尾的 FCS 進行錯誤校驗。

如果沒問題則檢查 MAC 頭部中的接收方 MAC 地址,看看是不是發給自己的包,如果是就放到接收緩沖區中,否則就丟棄這個包。

如果包的接收方 MAC地址不是自己,說明這個包是發給其他設備的,如果接收這個包就違反了以太網的規則。

路由器的端口都具有 MAC 地址,只接收與自身地址匹配的包,遇到不匹配的包則直接丟棄

3.3.4 查詢路由表確定輸出端口

完成接收包後的操作

丟棄MAC頭

完成包接收操作之後,路由器就會丟棄包開頭的 MAC 頭部。

MAC 頭部的作用就是將包送達路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。

因此,當包到達路由器之後,MAC 頭部的任務就完成了,於是 MAC 頭部就會被丟棄。

通過路由器轉發的網絡包,其接收方 MAC 地址為路由器端口的MAC 地址。

根據IP頭部查詢路由表

根據最長原則匹配目標地址

如下圖所示,假設地址為 10.10.1.101 的計算機要向地址為 192.168.1.10 的服務器發送一個包,這個包先到達圖中的路由器。

然後根據包的接收方 IP 地址查詢路由表中的目標地址欄,以找到相匹配的記錄。

技術分享圖片

這個匹配並不是匹配全部 32 個比特,而是根據子網掩碼列中的值判斷網絡號的比特數,並匹配相應數量的比特。

按照這樣的規則,第3、4、5行都可以匹配。其中,路由器首先尋找網絡號比特數最長的一條記錄。

網絡號比特數越長,說明主機號比特數越短,子網中可能存在的主機數量越少,這一規則的目的是盡量縮小範圍,所以根據這條記錄判斷的轉發目標就會更加準確。

這一規則稱為“最長匹配”原則。

相比服務器所屬的子網來說,直接指定服務器本身的地址時範圍更小,因此這裏應該選擇第 4 行作為轉發目標。

按照最長匹配原則篩選後,如果只剩一條候選記錄,則按照這條記錄的內容進行轉發。

根據躍點值篩選網絡號相同的記錄

有時候路由表中會存在網絡號長度相同的多條記錄,例如考慮到路由器或網線的故障而設置的備用路由就屬於這種情況。

這時需要根據躍點計數的值來進行判斷。躍點計數越小說明該路由越近,因此應選擇躍點計數較小的記錄。

無法匹配記錄的包直接丟棄

如果在路由表中無法找到匹配的記錄,路由器會丟棄這個包,並通過ICMP消息告知發送方。

因為交換機根據以太網協議可以將包發送到所有的端口上,而路由器工作的網絡環境就是互聯網,連接設備遠大於交換機。

如果產生大量的網絡包會造成網絡擁塞,所以路由器遇到不知道該轉發到哪裏的包,就會直接丟棄。

ICMP

Internet Control Message Protocol,Internet 控制報文協議。

當包傳輸過程中發生錯誤時,用來發送控制消息。2.5.11 節介紹過 ICMP。

網絡是怎樣連接的學習筆記-第三章-路由器的包轉發操作