摘要:網(wǎng)絡(luò)技術(shù)無論在教學(xué)還是在現(xiàn)實生活中都變得異常的重要,該文結(jié)合教學(xué)課程和實驗要求,對模擬網(wǎng)絡(luò)組建的過程進(jìn)行了初步的研究。在該實驗平臺中,將簡單直觀的網(wǎng)絡(luò)設(shè)備圖標(biāo)表示為真實的網(wǎng)絡(luò)設(shè)備,用于搭建現(xiàn)實中的網(wǎng)絡(luò),并提供命令交互窗口,模擬常用的網(wǎng)絡(luò)命令的實現(xiàn)對當(dāng)前的網(wǎng)絡(luò)狀態(tài)進(jìn)行檢查,該文主要對Ping命令的實現(xiàn)進(jìn)行了實驗分析。
關(guān)鍵詞:網(wǎng)絡(luò)技術(shù);Ping命令;ICMP協(xié)議
中圖分類號:TP393文獻(xiàn)標(biāo)識碼: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 引言
隨著計算機(jī)技術(shù)及網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,個人、家庭或宿舍中擁有多臺計算機(jī)已變得十分的普遍,將多臺計算機(jī)組建成網(wǎng)絡(luò)可以提高資源的利用率和協(xié)同工作的效率,所以網(wǎng)絡(luò)技術(shù)無論在教學(xué)還是在現(xiàn)實生活中都變得異常的重要。
在實際學(xué)習(xí)中,由于資源設(shè)備的限制,提供完善的實驗環(huán)境存在一定的難度,所以提供一種模擬的組建網(wǎng)絡(luò)的平臺具有很強(qiáng)的現(xiàn)實意義。雖然在應(yīng)用中,業(yè)界有很多優(yōu)秀的成品軟件,如:虛擬機(jī)軟件vmware、virtual pc;以及網(wǎng)絡(luò)認(rèn)證考試的軟件NetSim、Dynamips等工具也可用于模擬組建網(wǎng)絡(luò)的練習(xí)工具,但是由于它們所面向的是高級的網(wǎng)絡(luò)應(yīng)用,在教學(xué)的應(yīng)用中需要更簡單直觀的平臺。
文中就是基于面向網(wǎng)絡(luò)技術(shù)教學(xué)的目的而設(shè)計的實驗平臺,提供了簡單直觀實驗的要求。文中重點實現(xiàn)了Ping命令,根據(jù)Ping命令的運行原理,對它進(jìn)行了模擬實現(xiàn),相應(yīng)的其他檢查網(wǎng)絡(luò)狀態(tài)的命令,如:tracert、ipconfig、netstat等等,也可以根據(jù)各自的運行原理進(jìn)行實現(xiàn)[1]。
2 Ping命令及ICMP協(xié)議簡介
2.1 Ping命令簡介
“Ping”這個名字源于聲納定位操作,最早Ping程序是由Mike Muuss編寫[2],目的是為了測試另一臺主機(jī)是否可達(dá),該程序發(fā)送一份ICMP回顯請求報文給主機(jī),并等待返回ICMP回顯應(yīng)答。
一般來說,如果不能Ping到某臺主機(jī),那么就不能Telnet或者FTP到那臺主機(jī);反過來,如果不能Telnet到某臺主機(jī),那么通常可以用Ping程序來確定問題出在哪里。但是隨著Internet安全意識的增強(qiáng),Ping不通一臺主機(jī)也可能是受路由器、防火墻的影響,但在一般的應(yīng)用中可以將Ping作為檢測網(wǎng)絡(luò)連通狀況的實用工具。
■
圖1 Ping命令發(fā)送ICMP報文
2.2 ICMP協(xié)議簡介
ICMP協(xié)議(Internet Control Message Protocol, Internet控制報文協(xié)議)是TCP/IP協(xié)議族的一個子協(xié)議,該協(xié)議位于網(wǎng)絡(luò)層,提供了傳輸差錯報文、控制報文和詢問報文的功能;允許ICMP報文在IP數(shù)據(jù)報內(nèi)攜帶。封裝格式如下圖:
■
圖2 ICMP封裝在IP數(shù)據(jù)報內(nèi)部
ICMP報文有多種類型,Ping程序使用ICMP的回顯請求報文,該報文的結(jié)構(gòu)如下:前四個字節(jié)為報文頭部分,第一個字節(jié)為報文類型,第二個字節(jié)未用,第三、四個字節(jié)為報文的校驗和,第五、六個字節(jié)為報文的標(biāo)志符,第六、七個字節(jié)為報文的序號,最后為選項數(shù)據(jù)但是報文總長度不超過64KB。
ICMP回顯請求和回顯應(yīng)答報文格式如下圖:
■
圖3 ICMP回顯請求和回顯應(yīng)答報文格式
3 Ping命令執(zhí)行原理及實現(xiàn)步驟
3.1 執(zhí)行原理和步驟
在進(jìn)行Ping操作時,首先從客戶機(jī)向服務(wù)器發(fā)送ICMP回顯請求報文,當(dāng)服務(wù)器接收到客戶機(jī)發(fā)送來的ICMP回顯請求報文時,服務(wù)器就會向客戶機(jī)發(fā)送ICMP回顯應(yīng)答報文,客戶機(jī)通過接收來自服務(wù)器的ICMP回顯應(yīng)答報文,從而判斷與遠(yuǎn)程主機(jī)的聯(lián)通狀態(tài)。
實現(xiàn)步驟如下:
步驟 1:根據(jù)ICMP回顯請求的報文格式,定義報文;
步驟 2:客戶機(jī)發(fā)送封裝ICMP回顯請求報文的IP數(shù)據(jù)包;
步驟 3:客戶機(jī)接收封裝ICMP應(yīng)答報文的IP數(shù)據(jù)包。
3.2 數(shù)據(jù)包的檢驗和算法
為了保證包頭和數(shù)據(jù)不被破壞,數(shù)據(jù)包在計算機(jī)網(wǎng)絡(luò)中傳輸期間使用了檢驗和(圖3中的第三四字節(jié)),ICMP的檢驗和字段覆蓋整個ICMP報文,而求ICMP的檢驗和是必須的,檢驗和保證了ICMP報頭和數(shù)據(jù)的正確性。
檢驗和算法在所有的協(xié)議中都是相同的,只是由于協(xié)議的不同,檢驗和保證的域的內(nèi)容不同。檢驗和在各種協(xié)議中所保證的各種域如下:
■
檢驗和icmp_ckSum算法如下[4]:
① 在檢驗和的域中設(shè)置為0;
② 在數(shù)據(jù)長度為奇數(shù)時,在其域中最后追加0,使其調(diào)整為以16為單位(在這種調(diào)整方法中,即使追加8位,也不包含包長度);
③ 以16位為單位,將一個偽報頭、報頭、數(shù)據(jù)部分加上1的補(bǔ)碼;
④ 將所求出的值:1的補(bǔ)碼存儲到報頭檢查和的區(qū)域中。
如果首部在傳輸?shù)倪^程中沒有發(fā)生任何差錯,那么接收方計算的結(jié)果應(yīng)該為全1;如果結(jié)果不是全1(即檢驗和錯誤),那么IP就丟棄收到的數(shù)據(jù)報,但是不生成差錯報文,由上層去發(fā)現(xiàn)丟失的數(shù)據(jù)報并進(jìn)行重傳。
4 模擬命令的實驗過程及結(jié)果
4.1 實驗要完成的功能
本實驗平臺要實現(xiàn)的功能界面如圖4。
在“工作臺”窗口中,組建了一個簡單的局域網(wǎng),通過模擬網(wǎng)絡(luò)命令測試該局域網(wǎng)的網(wǎng)絡(luò)連通狀態(tài),在“命令交互”窗口中,用Ping命令從PC1到PC2,返回的結(jié)果將與實際的局域網(wǎng)中得到的結(jié)果相似。
4.2 Ping命令的Visual C#模擬實現(xiàn)
安裝Ping命令的執(zhí)行原理、步驟,其具體的實現(xiàn)過程如下:
① ICMP數(shù)據(jù)包類的定義和實現(xiàn)。
public class IcmpPacket{private Byte_type;// 報文類型
private Byte_subCode;// 字代碼類型
private UInt16 _checkSum;// 報文校驗和
private UInt16 _identifier;//識別符
private UInt16 _sequenceNumber;// 序列號
private Byte[]_data; // 數(shù)據(jù)選項 }
② 模擬Socket的SendTo()方法的SimSendTo()方法。
在執(zhí)行Ping命令時該方法將被調(diào)用,根據(jù)計算機(jī)名或虛擬的IP地址,將ICMP數(shù)據(jù)包的UInt16數(shù)組發(fā)送給目的主機(jī)進(jìn)行驗證。
在該方法中增加了對計算機(jī)名的名稱的解析,可以將計算機(jī)名稱與虛擬的IP地址對應(yīng)起來,因此Ping命令后面的參數(shù)可以是計算機(jī)名也可以是具體的IP地址。
③ 模擬Socket的ReceiveFrom()方法的SimReceiveFrom()方法。
此方法在執(zhí)行Ping命令是也會被調(diào)用,該方法返回了目的主機(jī)回顯的信息,表明了目的主機(jī)是否已經(jīng)接收到了發(fā)送的數(shù)據(jù),若該方法的返回值為ICMP數(shù)據(jù)包的大小,則表明操作成功,將在終端顯示接收信息;若返回的值為-1,則在終端顯示“目的主機(jī)不可到達(dá)”的信息。
④ 檢驗和icmp_ckSum()算法的實現(xiàn)。
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 結(jié)束語 該文對模擬組網(wǎng)的實驗平臺進(jìn)行了介紹,詳細(xì)介紹了Ping命令的原理及其工作方式,并對其模擬實現(xiàn)進(jìn)行了詳細(xì)的分析。依據(jù)此實現(xiàn)方式,可以對其他的命令tracert、ipconfig、netstat等等進(jìn)行實現(xiàn),以完善該實驗平臺。 當(dāng)然該平臺到目前只是對關(guān)鍵的技術(shù)進(jìn)行了前期的研究和解決,很多的功能和相關(guān)的技術(shù)還要進(jìn)行繼續(xù)的研究,在命令的交互體驗方面也應(yīng)該更加真實,這些都成為以后工作的重點。 參考文獻(xiàn): [1] Jon C.Snader. 劉江林,譯. 高級TCP/IP編程[M].北京:中國電力出版社,2001.6. [2] W.Richard Stevens.TCP/IP Illustrated, Volume 1:The Protocols.北京:機(jī)械工業(yè)出版社,2002.1. [3] 潘愛明,譯.計算機(jī)網(wǎng)絡(luò)[M].第4版.北京:清華大學(xué)出版社,2004.8. [4] 馮杰,閆魯生,譯.TCP/IP網(wǎng)絡(luò)實驗程序篇[M].北京:科學(xué)出版社,2003.4. [5] Gary R.Wright,W.Richard Stevens.TCP/IP Illustrated, Volume 2:The Implementation[M].北京:機(jī)械工業(yè)出版社,2002.1. [6] 李銘,黃靜,譯.C#2005.NET 3.0高級編程.第5版.北京:清華大學(xué)出版社,2007.12. [7] RFC 791-1981 INTERNET PROTOCOL[S].Network Working Group. [8] RFC 792-1981 INTERNET CONTROL MESSAGE PROTOCOL[S].Network Working Group. 注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文