計算機網絡:(八)網絡層(中)IP層轉發分組的過程與網際控制報文協議 ICMP
- 前言
- 一、IP層轉發分組的過程
- 第一步:接收數據包并解封裝
- 第二步:提取目標 IP 地址
- 第三步:查詢路由表
- 第四步:封裝并轉發至下一跳
- 第五步:逐跳轉發直至目標
- 二、劃分子網和構造超網
- 2.1 劃分子網
- 2.2 使用子網時分組的轉發
- 2.3 無分類編址 CIDR(構造超網)
- 三、網際控制報文協議 ICMP
- 3.1 ICMP 是什么?
- 3.2 ICMP 報文的種類
- 3.3 ICMP 的應用舉例
- 3.4 總結
前言
- 前面我們已經講解了網絡層的重要概念及網際協議(IP);
- 接下來,我們繼續講解 IP 層的分組轉發過程與網際控制報文協議(ICMP)
我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的計算機網絡專欄,歡迎來閱讀
https://blog.csdn.net/2402_83322742/category_12909527.html
一、IP層轉發分組的過程
第一步:接收數據包并解封裝
- 當一個數據包(分組)到達路由器時,就像快遞送到了分揀中心。
- 路由器首先會拆開最外層的 “包裝”(也就是數據鏈路層的頭部),露出里面的 IP 地址信息 —— 這就像看清了快遞單上的收件人地址。?
第二步:提取目標 IP 地址
路由器會重點盯著數據包里的 “目標 IP 地址”,就像分揀員看快遞單上的收件城市。
比如目標 IP 是 “192.168.1.100”,路由器要解決的問題是:“這個地址該往哪個方向送?”?
第三步:查詢路由表
- 路由器里有一張 “路由表”,相當于一本 “全國快遞網點對照表”
- 表里記錄著不同 IP 地址段對應的 “最近中轉站”(專業叫 “下一跳”)。
比如表中可能寫著 “所有以 192.168.1 開頭的地址,都先送到隔壁的 10.0.0.1 路由器”。?
如果目標 IP 在表里能找到精確匹配的記錄,路由器就直接按記錄走;如果沒找到精確匹配,就找 “最像的”(比如同一網段的模糊匹配);
- 要是實在沒頭緒,就會送到 “默認中轉站”(相當于寄往陌生城市時先送到省會分揀中心)。?
第四步:封裝并轉發至下一跳
- 確定好下一跳后,路由器會給數據包重新打包 —— 加上新的 “數據鏈路層頭部”(就像給快遞換一個寫著下一中轉站地址的面單),然后通過對應的網線或無線信號發送出去。?
第五步:逐跳轉發直至目標
- 這個過程會在每個途經的路由器上重復:接收、看目標 IP、查路由表、送往下一站。
- 就像快遞從市級分揀中心到區級網點,再到小區驛站,最終送到收件人手里。?
簡單說,IP 層轉發分組的核心就是:“看地址→查路線→找下家→送出去”。正是這一步步的接力,才讓我們發的消息、刷的視頻能準確傳到目的地
二、劃分子網和構造超網
2.1 劃分子網
為什么需要子網劃分?
- 早期的IP地址(如A、B、C類)是固定大小的,比如C類網絡包含254個主機地址。
- 但實際中,很多網絡不需要這么多地址,直接使用會導致地址浪費。
- 例如,一個公司有100臺電腦,直接分配一個C類網絡(254個地址)就會浪費154個地址。
子網劃分的核心思想:將一個大網絡拆分成多個小網絡(子網),每個子網的大小可以根據需求靈活調整。
如何劃分子網?
- 子網掩碼的作用:子網掩碼是一個32位的二進制數,其中連續的1代表網絡部分,0代表主機部分。例如,C類網絡的默認子網掩碼是
255.255.255.0
(即/24
),表示前24位是網絡部分,后8位是主機部分。 - 借位操作:從主機部分“借”若干位作為子網號。例如,一個C類網絡
192.168.1.0/24
,如果借2位主機位,子網掩碼變為255.255.255.192
(即/26
),可劃分出4個子網,每個子網有62個可用主機地址(2?-2=62)。 - 計算方法:
- 子網數 = 2^借位數
- 每個子網的主機數 = 2^(剩余主機位數) - 2(減去網絡地址和廣播地址)
例子:
某公司需要劃分3個子網,每個子網最多39臺主機。選擇C類網絡192.168.1.0/24
,借2位主機位:
- 子網數 = 22=4(滿足需求)
- 每個子網主機數 = 2?-2=62(滿足39臺)
- 子網掩碼變為
255.255.255.192
(即/26
) - 子網范圍:
- 第一個子網:
192.168.1.0/26
(可用地址:192.168.1.1~192.168.1.62) - 第二個子網:
192.168.1.64/26
(可用地址:192.168.1.65~192.168.1.126) - 依此類推。
- 第一個子網:
2.2 使用子網時分組的轉發
路由器如何找到目標子網?
當數據包到達路由器時,路由器會執行以下步驟:
- 提取目的IP地址:例如,目的IP是
192.168.1.100
,子網掩碼是255.255.255.192
(即/26
)。 - 計算網絡地址:將IP地址和子網掩碼進行邏輯與運算:
192.168.1.100
→11000000.10101000.00000001.01100100
255.255.255.192
→11111111.11111111.11111111.11000000
- 與運算結果:
11000000.10101000.00000001.01000000
→192.168.1.64/26
,即該IP屬于192.168.1.64/26
子網。
- 查找路由表:路由器根據計算出的網絡地址,在路由表中找到對應的下一跳地址,將數據包轉發到目標子網。
轉發表結構:
路由器的轉發表通常包含以下信息:
- 網絡地址:子網的網絡地址(如
192.168.1.0/24
)。 - 子網掩碼:用于匹配IP地址的掩碼(如
255.255.255.0
)。 - 下一跳地址:數據包應轉發到的下一個路由器或直接連接的設備。
例子:
假設有兩個子網192.168.1.0/26
和192.168.1.64/26
,路由器收到一個目的IP為192.168.1.100
的數據包。通過與運算確定其屬于192.168.1.64/26
子網,路由器將數據包轉發到該子網的網關。
2.3 無分類編址 CIDR(構造超網)
CIDR的背景:
傳統的A、B、C類地址和子網劃分仍存在地址浪費和路由表膨脹的問題。例如,一個需要4000臺主機的網絡,若分配16個C類網絡(每個254臺),路由器需要維護16條路由條目。CIDR通過聚合地址塊解決這一問題。
CIDR的核心思想:
- 取消分類地址:不再固定網絡位和主機位的長度,而是用斜線記法(如
192.168.0.0/22
)表示網絡前綴的長度。 - 構造超網:將多個連續的小網絡合并成一個大網絡(超網),減少路由表條目。
如何構造超網?
- 連續地址塊:待合并的網絡必須是連續的。例如,
192.168.0.0/24
、192.168.1.0/24
、192.168.2.0/24
、192.168.3.0/24
這四個C類網絡是連續的。 - 合并規則:將子網掩碼向左移動(減少網絡位),直到所有網絡的前綴相同。例如,這四個C類網絡的二進制前綴如下:
192.168.0.0
→11000000.10101000.00000000.00000000
192.168.1.0
→11000000.10101000.00000001.00000000
192.168.2.0
→11000000.10101000.00000010.00000000
192.168.3.0
→11000000.10101000.00000011.00000000
前22位相同,因此合并后的超網為192.168.0.0/22
,子網掩碼為255.255.252.0
。
- 地址范圍:超網包含的地址范圍是
192.168.0.0
到192.168.3.255
,共1024個地址(21?)。
CIDR的優勢:
- 減少路由表條目:例如,16個C類網絡合并成一個超網后,路由表只需一條記錄。
- 靈活分配地址:可根據實際需求分配任意大小的地址塊,減少浪費。
三、網際控制報文協議 ICMP
3.1 ICMP 是什么?
ICMP(Internet Control Message Protocol)是網絡層的“交通警察”,負責在 IP 主機、路由器之間傳遞控制消息。它的核心作用是報告網絡錯誤和診斷網絡狀態,例如:
- 當你訪問網站失敗時,ICMP 會告訴你“目標不可達”;
- 當網絡擁堵導致數據包丟失時,ICMP 會提醒發送方降低速率。
ICMP 報文被封裝在 IP 數據包中傳輸,就像快遞里的“附言紙條”,專門傳遞與運輸過程相關的反饋信息。
3.2 ICMP 報文的種類
ICMP 報文分為兩大類:差錯報告報文和查詢報文。
一、差錯報告報文(報告問題)
這類報文用于通知發送方數據傳輸中出現的問題,常見類型包括:
-
目的不可達(Type 3)
- 當路由器或主機無法將數據包送達目標時,會發送此報文。例如:
- 網絡不可達:目標網絡不存在或路由配置錯誤;
- 主機不可達:目標 IP 對應的設備未開機或未聯網;
- 端口不可達:目標端口被防火墻屏蔽(常見于 UDP 應用)。
- 例子:你用手機訪問某 APP 時,若服務器端口被封禁,手機會收到“端口不可達”的 ICMP 報文。
- 當路由器或主機無法將數據包送達目標時,會發送此報文。例如:
-
超時(Type 11)
- 當數據包的生存時間(TTL)耗盡(如路由環路導致數據包無限循環),或分片重組超時(數據包分片未按時到達)時,路由器會發送此報文。
- 例子:如果網絡中存在環路,數據包在路由器之間來回轉發,TTL 減為 0 后會觸發超時報文。
-
參數問題(Type 12)
- 當 IP 頭部字段錯誤(如錯誤的協議字段)時,路由器或主機丟棄數據包并發送此報文。
-
重定向(Type 5)
- 路由器發現源主機選擇的路由路徑不是最優時,會發送此報文,指導主機使用更優路徑。
- 例子:當你連接到 Wi-Fi 時,路由器可能通過重定向報文告訴你下次應直接訪問網關。
二、查詢報文(主動詢問)
這類報文用于主動獲取網絡信息,常見類型包括:
-
回顯請求/應答(Type 8/0)
- 回顯請求:主機或路由器向目標發送詢問,測試對方是否可達;
- 回顯應答:目標收到請求后返回應答,確認自己存活。
- 例子:
ping
命令就是基于此報文,通過發送回顯請求并接收應答,判斷網絡連通性。
-
時間戳請求/應答(Type 13/14)
- 用于測量網絡往返時間(RTT),同步主機時鐘。發送方記錄發送時間,接收方記錄接收和返回時間,通過計算差值評估網絡延遲。
-
地址掩碼請求/應答(Type 17/18)
- 主機可通過此報文向路由器查詢子網掩碼,動態獲取網絡配置信息。
3.3 ICMP 的應用舉例
ICMP 是網絡診斷的核心工具,以下是兩個最典型的應用:
一、Ping:測試網絡連通性
- 原理:發送 ICMP 回顯請求報文,等待目標返回回顯應答。
- 流程:
- 你在電腦上輸入
ping www.baidu.com
,電腦會發送一個 ICMP 回顯請求; - 百度服務器收到后返回回顯應答;
- 若收到應答,說明網絡連通,反之則可能存在故障(如防火墻攔截或線路中斷)。
- 你在電腦上輸入
- 輸出解讀:
Reply from X.X.X.X: bytes=32 time<1ms TTL=64
:連通正常,延遲低;Request timed out
:無響應,可能目標不可達或被過濾。
二、Traceroute(Windows 中為 Tracert):追蹤網絡路徑
- 原理:發送一系列 TTL 遞增的數據包,利用 ICMP 超時報文和端口不可達報文,確定數據包經過的路由器路徑。
- 流程:
- 第一個數據包 TTL=1,到達第一個路由器時 TTL 減為 0,路由器返回超時報文,記錄其 IP;
- 第二個數據包 TTL=2,到達第二個路由器時 TTL 減為 0,返回超時報文,記錄第二個 IP;
- 重復此過程,直到數據包到達目標主機。若目標主機端口未開放,會返回端口不可達報文,流程終止。
- 例子:
輸出顯示數據包經過的路由器 IP 及延遲,幫助定位網絡故障點。Tracing route to www.baidu.com [180.97.33.107] over a maximum of 30 hops: 1 1 ms 1 ms 1 ms 192.168.1.1 2 3 ms 2 ms 2 ms 10.0.0.1 ... 10 12 ms 10 ms 11 ms 180.97.33.107
3.4 總結
- ICMP 的作用:
- 差錯報告:如“目標不可達”“超時”,幫助排查網絡錯誤;
- 查詢診斷:如
ping
和traceroute
,測試連通性和路徑追蹤。
- 重要性:
ICMP 是網絡的“神經系統”,雖然它不直接傳輸數據,但通過反饋控制信息,確保了 IP 協議的高效運行。掌握 ICMP 的原理和工具(如ping
),是網絡運維和故障排查的基礎技能。
通過 ICMP,我們能像“網絡醫生”一樣,快速定位網絡問題,讓數據傳輸更加可靠。
以上就是本篇博客的全部內容,下一篇繼續進入網絡層的學習。
我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的計算機網絡專欄,歡迎來閱讀
https://blog.csdn.net/2402_83322742/category_12909527.html
如果您覺得內容對您有幫助,歡迎點贊收藏,您的支持是我創作的最大動力! |