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

用 Visual C# 實作 ICMP 協議與 Ping 功能(二):Ping 原理、IP 封包與 ICMP 封包關係

     編輯:關於C語言

Ping 命令基於 ICMP 協議

ICMP (Internet Control Message Protocol) 屬於 TCP/IP 協議族網路層協議,主要傳遞錯誤報文與控制訊息。撰寫基於 ICMP 的應用程式須掌握兩大核心觀念:

1. ICMP 封包封裝在 IP 封包中傳輸

IP 封包結構 (圖 03) 可分三段:

  • IP 標頭:前 20 bytes (版本、服務類型、總長度、識別、旗標/片位移、TTL、協議、檢驗和、來源/目的 IP)
  • 選項:可選欄位
  • 資料:承載上層協議資料 — 此處即為 ICMP 封包

IP 封包結構

2. ICMP 協議沒有固定埠號

不同於 HTTP (80)、FTP (21) 等應用層協議,ICMP 工作於網路層,不使用傳輸層埠號。因此在建立 IPEndPoint 時,埠號可任意指定 (本系列採用 30),僅為滿足 API 簽名需求。

ICMP 封包結構

圖 04:ICMP 封包結構 — Type(1B) Code(1B) Checksum(2B) Identifier(2B) Sequence(2B) Data

對後續程式設計的指導意義

  • 定義 IcmpPacket 類別時,欄位順序與大小嚴格對應圖 04。
  • Raw Socket 建立時指定 ProtocolType.Icmp,系統自動處理 IP 標頭封裝/解封裝,應用層只需關注 ICMP 承載。
  • 因無固定埠號,IPEndPoint 埠號填任意未衝突值即可。

ICMP 協議細節極豐富 (重導向、時間超過、參數問題、時間戳等),受限篇幅無法盡述。建議參考《TCP/IP 詳解 卷一:協議》或 RFC 792/1122 深入研讀。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved