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

ICMP 診斷工具、IP 選路與 RIP 路由協定深度實戰解析

     編輯:關於VC++

Ping 與 ICMP 回應機制

ICMP Echo Request/Reply 格式

 類型(8/0) | 代碼(0) | 檢驗和 | 識別符 | 序號 | 選擇性資料
Type: 8=Request, 0=Reply

關鍵設計點

  • 識別符:進程 ID,區分同主機多個 Ping 實例
  • 序號:每送一個遞增,配對請求/回應
  • 時間戳:資料區常放發送時間,計算 RTT
  • TTL:回應通常設 255,觀察路徑跳數

IP 選項:記錄路由與時間戳

記錄路由 (RR, 選項類型 7)

 類型(7) | 長度(39) | 指標 | 最多 9 個 IP 位址 (36 bytes) | 填充
指標初始 4,每記錄一個 +4,滿為 40
  • 每個路由器記錄出介面 IP
  • 目的主機記錄入介面 IP
  • IP 標頭最大 60 bytes,固定 20 + 選項 3 + 最多 37 bytes 數據

時間戳 (選項類型 0x44)

 類型(0x44) | 長度 | 指標 | OF(4) | FL(4) | 時間戳資料
FL=0: 僅時間戳
FL=1: IP+時間戳 (最多 4 組)
FL=3: 預先指定 IP,僅匹配時記錄時間戳

Traceroute 追蹤路由路徑

核心原理:TTL 遞增 + ICMP Time Exceeded

  1. 發送 UDP 封包,TTL=1, 2, 3...
  2. 每個路由器 TTL 遞減為 0 → 丟棄並回送 ICMP Type 11 Code 0 (TTL Exceeded in Transit)
  3. 目的主機收到 UDP 但埠不可達 → 回送 ICMP Type 3 Code 3 (Port Unreachable)
  4. 封包內含:序號、TTL 副本、發送時間戳 (計算每跳 RTT)

ICMP Time Exceeded 格式

 類型(11) | 代碼(0/1) | 檢驗和 | 未用 | 原始 IP 標頭 + 前 8 bytes 資料

IP 選路決策流程

路由表搜尋順序

  1. 尋找主機路由 (完整匹配 32 bits)
  2. 尋找網路路由 (網路號匹配)
  3. 使用預設路由 (0.0.0.0/0)

路由表旗標解讀

旗標含義
U路由啟用
G通往閘道 (間接路由)
H主機路由
D由重導向建立
M由修改建立

route 指令範例

route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
      目的地      遮罩      閘道     度量  介面

ICMP 重導向與路由器發現

ICMP Redirect (Type 5)

 類型(5) | 代碼(0-3) | 檢驗和 | 應用閘道 IP | 原始 IP 標頭 + 前 8 bytes
  • 代碼:0=網路, 1=主機, 2=TOS+網路, 3=TOS+主機
  • 僅路由器產生,主機收到後驗證:同網段、非自身、間接路由
  • 優化:主機直接發送給更優閘道

ICMP Router Discovery (Type 9/10)

  • 主機啟動送 Router Solicitation (Type 10) 廣播/多播
  • 路由器回 Router Advertisement (Type 9) 含優先級
  • 路由器定期多播通告,主機動態更新路由表
  • 優先級:有號 32-bit 整數,越大優先級越高

RIP 路由資訊協定

RIPv1 封包格式 (UDP 埠 520)

 命令(1) | 版本(1) | 零(2) | 地址族(2) | 零(2) | IP位址(4) | 零(4) | 零(4) | 度量(4)
最多 25 條路由/封包 (20 bytes + 24×20 bytes)

運作機制

  • 初始化:啟動介面發送 Request (命令=1, 地址族=0, 度量=16) 索取完整表
  • 週期更新:每 30 秒廣播完整路由表
  • 觸發更新:度量變化立即發送變更項目
  • 超時機制:180 秒 (6 個週期) 未更新 → 度量設 16 (不可達)
  • 度量:跳數 (直接連接=1, 最大 15, 16=不可達)

RIPv2 增強 (RFC 2453)

 命令 | 版本(2) | 路由域 | 地址族 | 路由標記 | IP位址 | 子網遮罩 | 下一跳 | 度量
支援:VLSM、CIDR、認證、多播 (224.0.0.9)、下一跳指定
  • 路由域:識別 RIP 進程實例
  • 路由標記:外部路由標識 (如 BGP 重發布)
  • 子網遮罩:支援非固定長度子網
  • 下一跳:優化轉發路徑,0 表示發送者

RIP 限制與現狀

  • 最大 15 跳 → 不適合大型網路
  • 收斂慢、頻寬浪費 (定期全表廣播)
  • 現多為 OSPF/IS-IS/BGP 取代,RIP 仍用於小型/邊緣網路
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved