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

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

3.3.5 找不到匹配路由時選擇預設路由

不是所有的轉發目標都需要配置在路由表中

如果是公司或者家庭網路,這樣的做法也沒什麼問題,但網際網路中的轉發目標可能超過 20 萬個,如果全部要配置在路由表中實在是不太現實。

其中有一行子網掩碼為 0.0.0.0,意思是網路包接收方 IP 地址和路由表目標地址的匹配中需要匹配的位元數為 0,換句話說,就是根本不需要匹配。

只要將子網掩碼設定為 0.0.0.0,那麼無論任何地址都能匹配到這一條記錄,這樣就不會發生不知道要轉發到哪裡的問題了。

只要在這一條記錄的閘道器列中填寫接入網際網路的路由器地址,當匹配不到其他路由時,網路包就會被轉發到網際網路接入路由器。

預設路由和預設閘道器

因此這條記錄被稱為預設路由,這一行配置的閘道器地址被稱為預設閘道器。

在計算機的TCP/IP 設定視窗中也有一個填寫預設閘道器的框,意思是一樣的。

計算機上也有一張和路由器一樣的路由表,其中預設閘道器的地址就是我們在設定視窗中填寫的地址。

路由表中子網掩碼為 0.0.0.0 的記錄表示“預設路由”。

由於匹配的位元數越長優先順序越高(最長匹配原則),因此子網掩碼為0.0.0.0 的記錄優先順序是最低的,只有當找不到其他匹配的記錄時,才會選擇這條記錄。


3.3.6 包的有效期

更新生存時間TTL欄位防止包進入死迴圈

在網路包被轉交給輸出埠之前,路由器還需要更新 IP 頭部中的 TTL 欄位。

TTL 欄位表示包的有效期,包每經過一個路由器的轉發,這個值就會減 1,當這個值變成 0 時,就表示超過了有效期,這個包就會被丟棄。

這個機制是為了防止包在一個地方陷入死迴圈,如果其中的資訊有問題,或者由於裝置故障等原因切換到備用路由時導致暫時性的路由混亂,就會出現這樣的情況。

傳送方在傳送包時會將 TTL 設為 64 或 128,也就是說包經過這麼多路由器後就會“壽終正寢”。

現在的網際網路即便訪問一臺位於地球另一側的伺服器,最多也只需要經過幾十個路由器,因此只要包被正確轉發,就可以在過期之前到達目的地。


3.3.7 通過分片功能拆分大網路包

路由器埠支援多種通訊技術

路由器的埠並不只有乙太網一種,也可以支援其他區域網或專線通訊技術。

不同的線路和區域網型別各自能傳輸的最大包長度也不同,因此輸出埠的最大包長度可能會小於輸入埠。

即便兩個埠的最大包長度相同,也可能會因為添加了一些頭部資料而導致包的實際長度發生變化。

無論哪種情況,一旦轉發的包長度超過了輸出埠能傳輸的最大長度,就無法直接傳送這個包了。

IP協議對超過埠輸出資料最大長度的包進行分切

遇到這種情況,可以使用 IP 協議中定義的分片功能對包進行拆分,縮短每個包的長度。

需要注意的是,這裡說的分片和第 2 章介紹的 TCP 對資料進行拆分的機制是不同的。

IP分切包和TCP拆分資料的不同

TCP 拆分資料的操作是在將資料裝到包裡之前進行的,換句話說,拆分好的一個數據塊正好裝進一個包裡。

從 IP 分片的角度來看,這樣一個包其實是一個未拆分的整體,也就是說,分片是對一個完整的包再進行拆分的過程。

分片操作的過程如圖 3.15 所示。首先,我們需要知道輸出埠的MTU,看看這個包能不能不分片直接傳送。

最大包長度是由埠型別決定的,用這個最大長度減掉頭部的長度就是 MTU,將 MTU 與要轉發的包長度進行比較。

如果輸出埠的 MTU 足夠大,那麼就可以不分片直接傳送;如果輸出埠的 MTU 太小,那麼就需要將包按照這個 MTU 進行分片。

先查詢IP頭中標誌欄位能否分片

在此之前需要看一下 IP 頭部中的標誌欄位,確認是否可以分片。

如果不能分片那麼就丟棄這個包,並通過ICMP 訊息通知傳送方。否則,就可以按照輸出埠 MTU 對資料進行依次拆分。

下面兩種情況不能分片

①傳送方應用程式等設定了不允許分片

②這個包已經是經過分片後的包

TCP頭部和資料一起被拆分

在分片中,TCP 頭部及其後面的部分都是可分片的資料,儘管TCP 頭部不屬於使用者資料,但從 IP 來看也是 TCP 請求傳輸的資料的一部分。

資料被拆分後,每一份資料前面會加上 IP 頭部,其大部分內容都和原本的 IP 頭部一模一樣,但其中有部分欄位需要更新,這些欄位用於記錄分片相關的資訊。


3.3.8 路由器的傳送操作和計算機相同

包的傳送操作

根據不同輸出埠轉換訊號

這一步操作取決於輸出埠的型別。如果是乙太網埠,則按照乙太網的規則將包轉換為電訊號傳送出去;如果是 ADSL 則按照 ADSL 的規則來轉換,以此類推。

在家庭網路中,路由器後面一般連線 ADSL 等線路接入網際網路,因此路由器會根據接入網的規則來發送包。

不過,要理解具體的操作過程,需要先理解相應的通訊線路,比較複雜,因此我們留到下一章探索網際網路內部時再講解。

乙太網傳送包的過程

假設路由器位於公司等區域網的內部,即輸出埠也是乙太網,看看這種情況是如何操作的。

乙太網的包傳送操作是根據乙太網規則來進行的,即便裝置種類不同,規則也是相同的。

也就是說,其基本過程和協議棧中的 IP 模組傳送包的過程是相同的,即在包前面加上 MAC 頭部,設定其中的一些欄位,然後將完成的包轉換成電訊號併發送出去。

查詢路由表

首先,為了判斷 MAC 頭部中的 MAC 地址應該填寫什麼值,我們需要根據路由表的閘道器列判斷對方的地址。

如果閘道器是一個 IP 地址,則這個IP 地址就是我們要轉發到的目標地址;如果閘道器為空,則 IP 頭部中的接收方 IP 地址就是要轉發到的目標地址。

路由器判斷下一個轉發目標的方法

①如果路由表的閘道器列內容為 IP 地址,則該地址就是下一個轉發目標。

②如果路由表的閘道器列內容為空,則 IP 頭部中的接收方 IP 地址就是下一個轉發目標。

根據IP使用ARP查詢MAC

知道對方的 IP 地址之後,接下來需要通過 ARP 根據 IP 地址查詢 MAC 地址,並將查詢的結果作為接收方MAC 地址。

路由器也有 ARP 快取,因此首先會在 ARP 快取中查詢,如果找不到則傳送 ARP 查詢請求。

 路由器也會使用 ARP 來查詢下一個轉發目標的 MAC 地址。

接下來是傳送方 MAC 地址欄位,這裡填寫輸出埠的 MAC 地址。還有一個以太型別欄位,填寫 0080(十六進位制)。

將數字資訊轉成電訊號傳送

網路包完成後,接下來會將其轉換成電訊號並通過埠傳送出去。這一步的工作過程和計算機也是相同的。

如果乙太網工作在半雙工模式,需要先確認線路中沒有其他訊號後才能傳送,如果檢測到碰撞,則需要等待一段時間後重發。

如果乙太網工作在全雙工模式,不需要確認線路中的訊號,可以直接傳送。

網路包到達下一個路由器

如果輸出埠為乙太網,則傳送出去的網路包會通過交換機到達下一個路由器。

由於接收方 MAC 地址就是下一個路由器的地址,所以交換機會根據這一地址將包傳輸到下一個路由器。

接下來,下一個路由器會將包轉發給再下一個路由器,經過層層轉發之後,網路包就到達了最終的目的地。


 

3.3.9 路由器與交換機的關係

將IP包裝進乙太網包的資料部分委託乙太網傳輸

計算機在傳送網路包時,或者是路由器在轉發網路包時,都需要在前面加上 MAC 頭部,準確的說法應該是將 IP 包裝進乙太網包的資料部分中。

給包加上 MAC 頭部併發送,從本質上說是將 IP 包裝進乙太網包的資料部分中,委託乙太網去傳輸這些資料。

IP 協議本身沒有傳輸包的功能,因此包的實際傳輸要委託乙太網來進行。

路由器是基於 IP 設計的,而交換機是基於乙太網設計的,因此 IP 與乙太網的關係也就是路由器與交換機的關係。

換句話說,路由器將包的傳輸工作委託給交換機來進行。

除了使用交換機,還可以使用集線器,或者用交叉雙絞線直接連線到路由器埠都可以。

關鍵是,在委託傳輸時,只要能按照乙太網規則傳輸包,不管是什麼樣的裝置都可以。

當然,這裡講的內容只適用於原原本本實現 IP 和乙太網機制的純粹的路由器和交換機,實際的路由器有內建交換機功能的。

比如用於連線網際網路的家用路由器就屬於這一種,對於這種路由器,上面內容可能就不適用了。

但是,如果把這種“不純粹”的路由器拆分成“純粹”的路由器和“純粹”的交換機,則它們各自都適用上面的內容。

 

IP委託乙太網傳輸到下一個路由器

從包的轉發目標也可以看出路由器和交換機之間的委託關係。

IP 並不是委託乙太網將包傳輸到最終目的地,而是傳輸到下一個路由器。

ARP查詢的就是下一個路由器的MAC地址

在建立MAC 頭部時,也是從 IP 的路由表中查找出下一個路由器的 IP 地址,並通過 ARP 查詢出 MAC 地址,然後將 MAC 地址寫入 MAC 頭部中的。

這表示 IP 對乙太網的委託只是將包傳輸到下一個路由器就行了。

當包到達下一個路由器後,下一個路由器又會重新委託乙太網將包傳輸到再下一個路由器。

隨著這一過程反覆執行,包就會最終到達 IP 的目的地,也就是通訊的物件。

到這裡我們已經梳理了路由器與交換機之間的關係。

簡單來說,IP(路由器)負責將包傳送給通訊物件這一整體過程,而其中將包傳輸到下一個路由器的過程則是由乙太網(交換機)來負責的。

IP不負責包的傳輸只委託其他協議到下一個路由器

如果和下一個路由器之間是通過無線區域網連線的,那麼就委託無線區域網將包傳輸過去;

如果是通過網際網路線路連線的,那麼就委託它將包傳輸過去。

除了這裡列舉的例子之外,世界上還有很多其他型別的通訊技術,它們之間的關係也是一樣的,都是委託所使用的通訊技術將包傳輸過去。

IP 本身不負責包的傳輸,而是委託各種通訊技術將包傳輸到下一個路由器。

這樣的設計是有重要意義的,即可以根據需要靈活運用各種通訊技術,這也是 IP 的最大特點。

正是有了這一特點,我們才能夠構建出網際網路這一規模巨大的網路。