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

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

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。