程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用Visual C#實現ICMP網絡協議(2)

利用Visual C#實現ICMP網絡協議(2)

編輯:關於C語言

二.Ping命令、ICMP報文和IP數據包

Ping命令基於的是TCP/IP協議簇中的ICMP協議,在編寫基於ICMP協議的網絡應用程序時,應注意下面二點:

1. ICMP報文是封裝在IP數據包中傳輸的。

了解這一點對後面編程非常重要,圖03是IP數據包的組成結構圖:

圖03:IP數據包的組成結構圖

習慣上把IP數據包劃分為三個部分:

(1).IP數據包中的前二十個字節的數據,即圖03中從【4位版本】到【32位目的地址IP】,這稱為IP首部。

(2).選項,即圖03中的【選項(如果有)】部分。

(3).數據,即圖03中的【數據】部分。

其中後面二個部分組成的就是ICMP報文。ICMP報文的具體組成結構如圖04所示:

圖04:ICMP報文組成結構圖

2. ICMP協議沒有固定的端口號。

ICMP協議和其他協議不同,其他協議基本都對應固定的端口號,如HTTP協議是通過80端口號來交換數據的。

了解上面的二點對後面在Visual C#實現Ping命令是非常有用的。因為在下面的在編寫Visual C#實現Ping命令的程序中,程序中定義一個名稱為"IcmpPacket"類,通過這個類來構造ICMP報文,而定義"IcmpPacket"類依據的就是圖03所示的ICMP報文組成結構。同樣由於ICMP協議沒有對應固定的端口號,這就意味著,編寫Visual C#實現Ping命令中可以隨意選擇端口號,本文選擇的端口號是"30"。

由於ICMP協議是一個復雜的協議,而本文由於篇幅所限,對ICMP的很多細節,就不能一一介紹,如果你對ICMP協議感興趣或對上面的介紹的仍然感覺有點模糊,那就請參閱探討ICMP協議的相關書籍,它們一般介紹的都很詳細。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved