首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ARP、RARP 與 ICMP 核心協定深度解析:位址解析與錯誤控制

     編輯:關於VC++

ARP 位址解析協定

核心功能

動態映射 IP 位址 → MAC 位址。系統自動完成:廣播 ARP Request「誰擁有此 IP?」→ 目標單播 ARP Reply「我是,我的 MAC 是 xx:xx:xx:xx:xx:xx」。

ARP 封包格式 (乙太網 + IPv4)

 乙太網標頭 (14 bytes) | ARP 承載 (28 bytes)
目的 MAC(6) | 來源 MAC(6) | 類型 0x0806
硬體類型(2)=1 | 協定類型(2)=0x0800 | 硬體長度(1)=6 | 協定長度(1)=4
操作碼(2) | 發送者 MAC(6) | 發送者 IP(4) | 目標 MAC(6) | 目標 IP(4)

關鍵欄位

ARP 快取與管理

  • 動態項目:有生存時間 (通常 20 分鐘完全、5 分鐘未使用)
  • 靜態項目:手工添加、永久有效
  • arp -a 查看、`arp -d` 刪除、`arp -s` 添加靜態對應

ARP 進階機制

ARP Proxy (委託 ARP)

  • 路由器代表其他網段主機回應 ARP Request
  • 欺騙發送者:以為路由器就是目標主機
  • 用途:子網劃分透明化、無路由協定主機跨網段通訊

免費 ARP (Gratuitous ARP)

  • 主機啟動時查詢自己的 IP (目標 IP = 發送者 IP)
  • 雙重用途:
    1. 偵測 IP 衝突 (收到回應 = 衝突)
    2. 更新其他主機 ARP 快取 (如換網卡、IP 漂移)
  • 不期望回應,純宣告性質

RARP 逆向位址解析協定

  • 功能:MAC → IP,無盤工作站開機取得 IP
  • 封包格式與 ARP 相同,操作碼 3/4
  • 缺陷:僅回傳 IP、連結層廣播不跨路由器
  • 已被 BOOTP/DHCP 取代

ICMP 網際網路控制訊息協定

定位與特性

  • 視為 IP 層組成部分 (協定號 1)
  • 封裝於 IP 資料報內 (IP 標頭協定欄位 = 1)
  • 兩大類:錯誤報文、查詢報文
  • 檢驗和算法同 IP 標頭 (僅覆蓋 ICMP 部分)

不產生 ICMP 錯誤的 5 種情況

  1. ICMP 錯誤報文本身 (防止風暴)
  2. 目的為廣播/多播位址
  3. 連結層廣播幀
  4. 非第一片分片
  5. 來源非單一主機 (0.0.0.0、環回、廣播、多播)

ICMP 錯誤報文通用格式

 類型 | 代碼 | 檢驗和 | 參數 (視類型而定) | 原始 IP 標頭 + 前 8 bytes 資料
(包含原始傳輸層標頭:來源/目的埠、序號等)

關鍵 ICMP 訊息類型詳細解析

位址遮罩請求/回應 (Type 17/18)

  • 無盤系統開機取得子網遮罩
  • 廣播請求,授權代理單播回應
  • 識別符/序號配對請求回應
  • RFC 規定:非授權代理不得回應

時間戳請求/回應 (Type 13/14)

  • 查詢遠端主機當前時間 (午夜起毫秒數)
  • 三個時間戳:發起、接收、傳送
  • 多數實作:接收=傳送 (無處理延遲)
  • 不提供日期,需配合其他方式

連接埠不可達 (Type 3 Code 3)

  • UDP 封包到達無監聽埠 → 回送此錯誤
  • 路徑 MTU 發現:Code 4 (需分片但 DF=1),低 16 bits 填下一跳 MTU
  • 承載原始 IP 標頭 + 前 8 bytes (含 UDP 標頭)

其他重要類型

欄位值/說明
硬體類型1 = 乙太網
協定類型0x0800 = IPv4
操作碼1=ARP Request, 2=ARP Reply, 3=RARP Request, 4=RARP Reply
目標 MAC (Request)全 0 (未知)
目標 MAC (Reply)填入請求者 MAC
類型代碼名稱用途
00Echo ReplyPing 回應
30-15Destination Unreachable網路/主機/埠/協定不可達、需分片、來源路由失敗等
40Source Quench擁塞控制 (已棄用)
50-3Redirect路由優化
80Echo RequestPing 請求
110/1Time ExceededTTL=0 / 重組超時
120Parameter ProblemIP 標頭參數錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved