摘要:網絡技術無論在教學還是在現實生活中都變得異常的重要,該文結合教學課程和實驗要求,對模擬網絡組建的過程進行了初步的研究。在該實驗平臺中,將簡單直觀的網絡設備圖標表示為真實的網絡設備,用于搭建現實中的網絡,并提供命令交互窗口,模擬常用的網絡命令的實現對當前的網絡狀態進行檢查,該文主要對Ping命令的實現進行了實驗分析。
關鍵詞:網絡技術;Ping命令;ICMP協議
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)19-30028-03
The Realization of Ping Command in Virtual Network Construction
LV Jin-rong, GONG Pei-zeng, YANG Zhi-qiang
(Dept of Computer Science and Engineering, Tongji University, Shanghai 200092, China)
Abstract: Network Technology is being more and more important not only in teaching but also in practical application. The paper based on the teaching curriculum and experiment requirement and did a primary researching in Virtual Network Construction. This experiment method use the simple icons to behalf the real network equipment which been used to construct network. Also the experiment method gives a command interface line in a separated window and simulates some network commands to check the states of net. This paper realizes the Ping command and analyzes with an experiment.
Key words: network technology; Ping command; ICMP protocols
1 引言
隨著計算機技術及網絡技術的迅速發展,個人、家庭或宿舍中擁有多臺計算機已變得十分的普遍,將多臺計算機組建成網絡可以提高資源的利用率和協同工作的效率,所以網絡技術無論在教學還是在現實生活中都變得異常的重要。
在實際學習中,由于資源設備的限制,提供完善的實驗環境存在一定的難度,所以提供一種模擬的組建網絡的平臺具有很強的現實意義。雖然在應用中,業界有很多優秀的成品軟件,如:虛擬機軟件vmware、virtual pc;以及網絡認證考試的軟件NetSim、Dynamips等工具也可用于模擬組建網絡的練習工具,但是由于它們所面向的是高級的網絡應用,在教學的應用中需要更簡單直觀的平臺。
文中就是基于面向網絡技術教學的目的而設計的實驗平臺,提供了簡單直觀實驗的要求。文中重點實現了Ping命令,根據Ping命令的運行原理,對它進行了模擬實現,相應的其他檢查網絡狀態的命令,如:tracert、ipconfig、netstat等等,也可以根據各自的運行原理進行實現[1]。
2 Ping命令及ICMP協議簡介
2.1 Ping命令簡介
“Ping”這個名字源于聲納定位操作,最早Ping程序是由Mike Muuss編寫[2],目的是為了測試另一臺主機是否可達,該程序發送一份ICMP回顯請求報文給主機,并等待返回ICMP回顯應答。
一般來說,如果不能Ping到某臺主機,那么就不能Telnet或者FTP到那臺主機;反過來,如果不能Telnet到某臺主機,那么通??梢杂肞ing程序來確定問題出在哪里。但是隨著Internet安全意識的增強,Ping不通一臺主機也可能是受路由器、防火墻的影響,但在一般的應用中可以將Ping作為檢測網絡連通狀況的實用工具。
■
圖1 Ping命令發送ICMP報文
2.2 ICMP協議簡介
ICMP協議(Internet Control Message Protocol, Internet控制報文協議)是TCP/IP協議族的一個子協議,該協議位于網絡層,提供了傳輸差錯報文、控制報文和詢問報文的功能;允許ICMP報文在IP數據報內攜帶。封裝格式如下圖:
■
圖2 ICMP封裝在IP數據報內部
ICMP報文有多種類型,Ping程序使用ICMP的回顯請求報文,該報文的結構如下:前四個字節為報文頭部分,第一個字節為報文類型,第二個字節未用,第三、四個字節為報文的校驗和,第五、六個字節為報文的標志符,第六、七個字節為報文的序號,最后為選項數據但是報文總長度不超過64KB。
ICMP回顯請求和回顯應答報文格式如下圖:
■
圖3 ICMP回顯請求和回顯應答報文格式
3 Ping命令執行原理及實現步驟
3.1 執行原理和步驟
在進行Ping操作時,首先從客戶機向服務器發送ICMP回顯請求報文,當服務器接收到客戶機發送來的ICMP回顯請求報文時,服務器就會向客戶機發送ICMP回顯應答報文,客戶機通過接收來自服務器的ICMP回顯應答報文,從而判斷與遠程主機的聯通狀態。
實現步驟如下:
步驟 1:根據ICMP回顯請求的報文格式,定義報文;
步驟 2:客戶機發送封裝ICMP回顯請求報文的IP數據包;
步驟 3:客戶機接收封裝ICMP應答報文的IP數據包。
3.2 數據包的檢驗和算法
為了保證包頭和數據不被破壞,數據包在計算機網絡中傳輸期間使用了檢驗和(圖3中的第三四字節),ICMP的檢驗和字段覆蓋整個ICMP報文,而求ICMP的檢驗和是必須的,檢驗和保證了ICMP報頭和數據的正確性。
檢驗和算法在所有的協議中都是相同的,只是由于協議的不同,檢驗和保證的域的內容不同。檢驗和在各種協議中所保證的各種域如下:
■
檢驗和icmp_ckSum算法如下[4]:
① 在檢驗和的域中設置為0;
② 在數據長度為奇數時,在其域中最后追加0,使其調整為以16為單位(在這種調整方法中,即使追加8位,也不包含包長度);
③ 以16位為單位,將一個偽報頭、報頭、數據部分加上1的補碼;
④ 將所求出的值:1的補碼存儲到報頭檢查和的區域中。
如果首部在傳輸的過程中沒有發生任何差錯,那么接收方計算的結果應該為全1;如果結果不是全1(即檢驗和錯誤),那么IP就丟棄收到的數據報,但是不生成差錯報文,由上層去發現丟失的數據報并進行重傳。
4 模擬命令的實驗過程及結果
4.1 實驗要完成的功能
本實驗平臺要實現的功能界面如圖4。
在“工作臺”窗口中,組建了一個簡單的局域網,通過模擬網絡命令測試該局域網的網絡連通狀態,在“命令交互”窗口中,用Ping命令從PC1到PC2,返回的結果將與實際的局域網中得到的結果相似。
4.2 Ping命令的Visual C#模擬實現
安裝Ping命令的執行原理、步驟,其具體的實現過程如下:
① ICMP數據包類的定義和實現。
public class IcmpPacket{private Byte_type;// 報文類型
private Byte_subCode;// 字代碼類型
private UInt16 _checkSum;// 報文校驗和
private UInt16 _identifier;//識別符
private UInt16 _sequenceNumber;// 序列號
private Byte[]_data; // 數據選項 }
② 模擬Socket的SendTo()方法的SimSendTo()方法。
在執行Ping命令時該方法將被調用,根據計算機名或虛擬的IP地址,將ICMP數據包的UInt16數組發送給目的主機進行驗證。
在該方法中增加了對計算機名的名稱的解析,可以將計算機名稱與虛擬的IP地址對應起來,因此Ping命令后面的參數可以是計算機名也可以是具體的IP地址。
③ 模擬Socket的ReceiveFrom()方法的SimReceiveFrom()方法。
此方法在執行Ping命令是也會被調用,該方法返回了目的主機回顯的信息,表明了目的主機是否已經接收到了發送的數據,若該方法的返回值為ICMP數據包的大小,則表明操作成功,將在終端顯示接收信息;若返回的值為-1,則在終端顯示“目的主機不可到達”的信息。
④ 檢驗和icmp_ckSum()算法的實現。
public static UInt16 icmp_ckSum(UInt16[] buffer)
{int cksum = 0;
for(int i=0;i cksum += (int) buffer[i]; cksum = (cksum >> 16) + (cksum 0xffff); cksum += (cksum >> 16); return (UInt16)(~cksum); } 5 結束語 該文對模擬組網的實驗平臺進行了介紹,詳細介紹了Ping命令的原理及其工作方式,并對其模擬實現進行了詳細的分析。依據此實現方式,可以對其他的命令tracert、ipconfig、netstat等等進行實現,以完善該實驗平臺。 當然該平臺到目前只是對關鍵的技術進行了前期的研究和解決,很多的功能和相關的技術還要進行繼續的研究,在命令的交互體驗方面也應該更加真實,這些都成為以后工作的重點。 參考文獻: [1] Jon C.Snader. 劉江林,譯. 高級TCP/IP編程[M].北京:中國電力出版社,2001.6. [2] W.Richard Stevens.TCP/IP Illustrated, Volume 1:The Protocols.北京:機械工業出版社,2002.1. [3] 潘愛明,譯.計算機網絡[M].第4版.北京:清華大學出版社,2004.8. [4] 馮杰,閆魯生,譯.TCP/IP網絡實驗程序篇[M].北京:科學出版社,2003.4. [5] Gary R.Wright,W.Richard Stevens.TCP/IP Illustrated, Volume 2:The Implementation[M].北京:機械工業出版社,2002.1. [6] 李銘,黃靜,譯.C#2005.NET 3.0高級編程.第5版.北京:清華大學出版社,2007.12. [7] RFC 791-1981 INTERNET PROTOCOL[S].Network Working Group. [8] RFC 792-1981 INTERNET CONTROL MESSAGE PROTOCOL[S].Network Working Group. 注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文