5. IP 協議
- 5. IP 協議
- 5.1 概述
- 5.2 IP 數據報格式
- 5.3 無連接數據報傳輸
- 5.3.1 首部校驗
- 5.3.2 數據分片與重組
- 5.4 IP 數據報選項
- 5.4.1 選項格式
- 5.4.2 選項類型
- 5.5 IP 模塊的結構
- 本章要點
5. IP 協議
5.1 概述
IP 協議是 TCP/IP 協議簇的核心協議,位于網絡層,提供不可靠、無連接的數據報服務,是實現網絡互聯的基礎。
- 核心作用:通過 IP 地址統一物理地址,通過 IP 數據報統一物理數據幀,屏蔽底層網絡差異,向上層提供統一服務。
- 相鄰協議:網絡層中,ARP、RARP 報文不封裝在 IP 數據報中,而 ICMP、IGMP、OSPF 數據需封裝在 IP 數據報中傳輸。
- 特點:
- 點到點協議:數據傳輸的對等實體是相鄰設備(同一網絡)的對等層實體。
- 不可靠性:不保證傳輸可靠性,不進行數據差錯校驗和跟蹤,若需可靠傳輸需依賴上層 TCP 協議。
- 無連接性:數據報獨立傳輸,可能經不同路徑,可能無序到達。
5.2 IP 數據報格式
IP 數據報由首部和數據兩部分組成,首部分為定長部分(20 字節)和變長部分(選項,最長 40 字節)。各字段詳細如下:
字段 | 位數 | 含義與細節 |
---|---|---|
版本 | 4 | 標識 IP 協議版本,IPv4 為 4(二進制 0100),決定數據報格式。 |
首部長度 | 4 | 以 32 位(4 字節)為單位,指示首部總長度(定長 + 選項)。最小值為 5(20 字節,無選項),最大值為 15(60 字節,含 40 字節選項)。 |
服務類型(TOS)/ 區分業務字段 | 8 | 原 TOS 字段用于規定數據報處理方式(如優先級、延遲、吞吐量等);后改為區分業務字段: - 前 6 位:區分業務碼點(64 個編碼,對應不同業務); - 后 2 位:顯式擁塞通告(ECN,RFC 3168 定義),用于 TCP 擁塞控制: - 00:不支持 ECN; - 01/10:支持 ECN; - 11:路由器正經歷擁塞。 |
總長度 | 16 | 指示整個 IP 數據報的字節數(首部 + 數據),最大值為 65535 字節。數據長度 = 總長度 - 首部長度 ×4。 |
標識 | 16 | 信源機賦予數據報的唯一標識符(每次發送自動 + 1),用于分片重組時標識同一原始數據報。 |
標志 | 3 | 低 2 位有效,控制分片: - D 位(第 0 位):0 = 允許分片,1 = 不允許分片(若超過 MTU 則丟棄并報錯); - M 位(第 1 位):0 = 本片是最后一片,1 = 后續還有分片。 |
片偏移 | 13 | 以 8 字節為單位,指示本片數據在原始數據報數據區中的偏移量(用于重組時確定順序)。 |
生存時間(TTL) | 8 | 限制數據報在網絡中的傳輸時間,每經過一個路由器減 1,值為 0 時丟棄數據報(防止環路)。常見初始值:Windows 為 128,Linux 為 64。 |
協議 | 8 | 指示數據字段封裝的上層協議,如: - 1=ICMP;6=TCP;17=UDP;89=OSPF。 |
首部校驗和 | 16 | 保證首部完整性,僅校驗首部(不校驗數據): - 發送方:將首部分為 16 位塊,校驗和字段設為 0,用 1 的補碼求和后求補,結果填入校驗和字段; - 接收方:重復計算,若結果為 0 則首部正確,否則丟棄。 |
源地址 | 32 | 數據報最初發送者的 IP 地址(32 位,點分十進制表示)。 |
目的地址 | 32 | 數據報最終接收者的 IP 地址(32 位,點分十進制表示)。 |
選項 | 可變(≤40 字節) | 用于網絡控制和測試(如源路由、記錄路由、時間戳等),格式含選項碼、長度、數據(詳見 5.3)。 |
數據 | 可變 | 上層協議數據(如 TCP 報文段、UDP 數據報等),長度受總長度限制(≤65535 - 首部長度 ×4)。 |
5.3 無連接數據報傳輸
IP 數據報傳輸需處理首部校驗、數據分片與重組和路由選擇,核心是適應不同網絡的最大傳輸單元(MTU)。
5.3.1 首部校驗
- 僅校驗首部:因首部字段在傳輸中可能變化(如 TTL、校驗和),需在相鄰設備間逐跳校驗;數據校驗由上層協議(如 TCP)負責。
- 校驗過程:
- 發送方:將首部拆分為 16 位塊,校驗和字段設為 0,用 1 的補碼計算總和,再對結果求補,填入校驗和字段。
- 接收方:重復計算,若求和后求補結果為 0,則首部正確;否則丟棄數據報。
5.3.2 數據分片與重組
- 背景:不同物理網絡的最大傳輸單元(MTU,物理幀可封裝的最大數據字節數)不同,數據報長度超過 MTU 時需分片。
- 分片規則:
- 每個分片需攜帶完整首部(與原數據報首部大部分相同,僅標志、總長度、片偏移不同)。
- 分片數據大小需為 8 字節的整數倍(最后一片除外),以保證片偏移可表示。
- 分片可在信源機或中間路由器進行,重組僅在信宿機進行。
- 分片相關字段:
- 標識:所有分片的標識相同,用于關聯同一原始數據報。
- 標志:M 位 = 1 表示非最后一片,M 位 = 0 表示最后一片。
- 片偏移:指示本片在原始數據中的位置(如偏移 0 表示第 1 片,偏移 175 表示數據從 1400 字節開始)。
- 重組過程:
- 信宿機根據標識收集所有分片,按片偏移排序。
- 啟動重組定時器,超時未集齊所有分片則丟棄,并通過 ICMP 報告錯誤。
- 重組后的數據報首部恢復為原始格式(總長度為原始長度,標志和片偏移重置)。
5.4 IP 數據報選項
IP 選項是首部的變長部分(≤40 字節),用于網絡控制和測試,所有 IP 協議必須支持選項處理。
5.4.1 選項格式
每個選項由三部分組成:
- 選項碼(8 位):含 3 個子字段:
- 復制位(1 位):1 = 選項復制到所有分片,0 = 僅復制到第一個分片;
- 選項類(2 位):00 = 路徑控制 / 測試,10 = 時間戳測試,01/11 未用;
- 選項號(5 位):細分選項類型。
- 選項長度(8 位):選項總長度(含選項碼、長度、數據),單字節選項無此字段。
- 選項數據(可變):選項具體內容(如 IP 地址、時間戳等)。
5.4.2 選項類型
選項類 | 選項號 | 選項名 | 功能與細節 |
---|---|---|---|
00 | 00000 | 選項結束 | 單字節選項,標識選項部分結束,用于填充使首部為 32 位整數倍。 |
00 | 00001 | 無操作 | 單字節選項,作為填充(避免選項結束符過早出現)。 |
00 | 00011 | 寬松源路由 | 信源指定路徑關鍵點,關鍵點之間可通過路由器自動選路: - 選項碼 = 131(復制位 = 1,類 = 00,號 = 00011); - 含指針(指示下一跳地址位置)和 IP 地址表(關鍵點列表)。 |
00 | 00111 | 記錄路由 | 記錄數據報從信源到信宿經過的路由器 IP 地址: - 選項碼 = 7(復制位 = 0,類 = 00,號 = 00111); - 信源預分配地址空間,指針指向 next 可用位置,空間不足則停止記錄。 |
00 | 01001 | 嚴格源路由 | 信源指定完整路徑,數據報必須嚴格按順序經過每一路由器: - 選項碼 = 137(復制位 = 1,類 = 00,號 = 01001); - 含指針和 IP 地址表(完整路徑),若無法按路徑傳輸則丟棄。 |
10 | 00100 | 時間戳 | 記錄數據報經過路由器的當地時間(世界時間,千分之一秒為單位): - 選項碼 = 68(復制位 = 0,類 = 10,號 = 00100); - 含溢出(未記錄的時間戳數)、標志(控制格式:0 = 僅時間,1 = 時間 + 地址,3 = 僅指定地址時間)、時間戳列表。 |
5.5 IP 模塊的結構
IP 協議的核心功能包括封裝、分片重組、選項處理、路由選擇等,數據處理流程如下:
- 上層數據(如 TCP/UDP)向下傳輸:
- 封裝為 IP 數據報(添加首部字段)。
- 處理模塊判斷目的地址:若為環回地址(127.x.x.x)或本機 IP,則直接回傳上層;否則進入路由選擇。
- 路由選擇模塊確定下一跳接口,分片模塊根據接口 MTU 分片(若需),最終交給下層(數據鏈路層)發送。
- 下層數據(數據鏈路層幀)向上傳輸:
- 解封裝獲取 IP 數據報,進入 IP 處理模塊:校驗首部、處理選項、更新 TTL(減 1,若為 0 則丟棄)。
- 若本機是信宿機:根據協議字段將數據提交給對應上層協議(如 TCP/UDP/ICMP)。
- 若需轉發(本機是路由器):路由選擇模塊確定下一跳,分片模塊根據出口 MTU 分片(若需),交給下層發送。
本章要點
- IP 是不可靠、無連接的數據報協議,提供盡力傳輸服務,通過 IP 地址和數據報統一底層差異。
- IP 數據報首部含 20 字節定長部分和≤40 字節選項,關鍵字段包括版本、首部長度、總長度、標識、標志、片偏移、TTL、協議、校驗和、源 / 目的地址。
- 分片由 MTU 觸發,依賴標識、標志、片偏移字段,重組僅在信宿機進行,超時未重組則丟棄。
- 首部校驗和僅校驗首部,采用 1 的補碼算法,確保首部完整性。
- IP 選項用于網絡控制和測試,包括源路由(嚴格 / 寬松)、記錄路由、時間戳等,需按格式處理。
- IP 模塊負責數據報的封裝、分片重組、選項處理、路由選擇等,實現數據在網絡中的傳輸。