2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  課程設(shè)計IV課程設(shè)計</p><p><b>  設(shè)計說明書</b></p><p><b>  計算機科學(xué)與技術(shù)系</b></p><p><b>  2011年9月9日</b></p><p>  課程設(shè)計IV課程設(shè)計評閱書</p>&l

2、t;p>  注:指導(dǎo)教師成績60%,答辯成績40%,總成績合成后按五級制記入。</p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  2011—2012學(xué)年第一學(xué)期</p><p>  專業(yè): 學(xué)號: 姓名: </p><p>  課程設(shè)計

3、名稱: 課程設(shè)計IV課程設(shè)計 </p><p>  設(shè)計題目: Ping命令模擬實現(xiàn) </p><p>  完成期限:自 2011 年 8 月 29 日 至 2011

4、 年 9 月 9 日共 2 周</p><p>  設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁):</p><p>  1. 了解并掌握ICMP協(xié)議。</p><p>  2. 了解Ping命令的使用,其常用格式為Ping XXX.XXX.XXX.XXX。</p><p>  3. Ping命令執(zhí)行原理及實現(xiàn)步驟。</p>

5、<p>  4. 模擬ping命令的實現(xiàn)過程。</p><p>  5. 對此次課程設(shè)計的總結(jié)</p><p>  指導(dǎo)教師(簽字): 教研室主任(簽字): </p><p>  批準日期: 年 月 日</p><p><b>  摘要&

6、lt;/b></p><p>  隨著計算機技術(shù)及網(wǎng)絡(luò)技術(shù)的迅速發(fā)展 ,個人、家庭或宿舍中擁有多臺計算機已變得十分的普遍 , 將多臺計算機組建成網(wǎng)絡(luò)可以提高資源的利用率和協(xié)同工作的效率 , 所以網(wǎng)絡(luò)技術(shù)無論在教學(xué)還是在現(xiàn)實生活中都變得異常的重要。在實際學(xué)習(xí)中,由于資源設(shè)備的限制,提供完善的實驗環(huán)境存在一定的難度,所以提供一種模擬的組建網(wǎng)絡(luò)的平臺具有很強的現(xiàn)實意義。根據(jù) Ping命令的運行的運行原理,對他進行

7、的模擬實現(xiàn),相應(yīng)的其他網(wǎng)檢查網(wǎng)絡(luò)狀態(tài)命令。</p><p>  關(guān)鍵詞:計算機;網(wǎng)絡(luò); Ping</p><p><b>  目錄</b></p><p><b>  一.課題內(nèi)容5</b></p><p>  1.1課程設(shè)計目的5</p><p>  1.2課程設(shè)計要求

8、5</p><p>  1.3 實驗步驟和注意事項5</p><p>  二. Ping命令及ICMP協(xié)議簡介6</p><p>  2.1. Ping命令簡介6</p><p>  2.2.ICMP協(xié)議簡介6</p><p>  三.實現(xiàn)原理和步驟10</p><p>  3.1.

9、實現(xiàn)原理10</p><p>  3.2.實現(xiàn)步驟10</p><p>  3.3.注意事項13</p><p><b>  總結(jié)14</b></p><p><b>  參考文獻:15</b></p><p><b>  1.課題內(nèi)容</b>

10、</p><p><b>  1.1課程設(shè)計目的</b></p><p>  PING程序是我們使用的比較多的用于測試網(wǎng)絡(luò)連通性的程序。PING程序基于ICMP,使用ICMP</p><p>  的回送請求和回送應(yīng)答來工作。由計算機網(wǎng)絡(luò)課程知道,ICMP是基于IP的一個協(xié)議,ICMP包通IP的</p><p>  裝之后

11、傳遞。課程設(shè)計中選取PING程序的設(shè)計,其目的是希望同學(xué)們通過PING程序的設(shè)計能初</p><p>  TCP/IP網(wǎng)絡(luò)協(xié)議的基本實現(xiàn)方法,對網(wǎng)絡(luò)的實現(xiàn)機制有進一步的認識。</p><p>  1.2課程設(shè)計要求 1) 定義數(shù)據(jù)結(jié)構(gòu)</p><p>  需要定義好IP數(shù)據(jù)報、ICMP包等相關(guān)的數(shù)據(jù)結(jié)構(gòu)。 2) 程序?qū)崿F(xiàn) 在WINDOWS環(huán)境下實現(xiàn)PIN

12、G程序。 3) 程序要求 在命令提示符下輸入:</p><p>  PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 其中ΧΧΧ為目的主機的IP地址,不要求支持域名,對是否帶有開關(guān)變量也不做要求。不帶開關(guān)變量時,要求返回響應(yīng)。 返回信息的格式:  REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 或  REQUEST TimeOut (無法PING通的情況)

13、  </p><p>  1.3 實驗步驟和注意事項 1) 熟悉IP以及ICMP協(xié)議的工作機制 2) 編寫PING的實現(xiàn)程序 3) 在模擬實現(xiàn)環(huán)境下調(diào)試并運行自己編寫的PIN程序</p><p>  2. Ping命令及ICMP協(xié)議簡介</p><p>  2.1. Ping命令簡介</p><p>  ping命令是用

14、來查看網(wǎng)絡(luò)上另一個主機系統(tǒng)的網(wǎng)絡(luò)連接是否正常的一個工具。ping命令的工作原理是:向網(wǎng)絡(luò)上的另一個主機系統(tǒng)發(fā)送ICMP報文,如果指定系統(tǒng)得到了報文,它將把報文一模一樣地傳回給發(fā)送者,這有點象潛水艇聲納系統(tǒng)中使用的發(fā)聲裝置。</p><p>  例如,在Linux終端上執(zhí)行ping localhost命令將會看到以下結(jié)果: PING   localhost.localdomain   (127.

15、0.0.1)   from   127.0.0.1   :   56(84)   bytes   of   data.   64   bytes   from   localhost.localdomain   (127.0.0.1):   icmp_seq=0   ttl=255  

16、time=112   usec   64   bytes   from   localhost.localdomain   (127.0.0.1):   icmp_seq=1   ttl=255   time=79   usec   64   bytes   from   localhost.l

17、ocaldomain   (127.0.0.1):   icmp_seq=2   ttl=255   time=78   usec   64   bytes   from   localhost.localdomain   (127.0.0.1):   i</p><p>  由上面的執(zhí)行結(jié)果可以看到,

18、ping命令執(zhí)行后顯示出被測試系統(tǒng)主機名和相應(yīng)IP地址、返回給當(dāng)前主機的ICMP報文順序號、ttl生存時間和往返時間rtt(單位是毫秒,即千分之一秒)。要寫一個模擬ping命令,這些信息有啟示作用。   要真正了解ping命令實現(xiàn)原理,就要了解ping命令所使用到的TCP/IP協(xié)議。</p><p>  2.2.ICMP協(xié)議簡介</p><p>  ICMP(Interne

19、t   Control   Message,網(wǎng)際控制報文協(xié)議)是為網(wǎng)關(guān)和目標(biāo)主機而提供的一種差錯控制機制,使它們在遇到差錯時能把錯誤報告給報文源發(fā)方。ICMP協(xié)議是IP層的一個協(xié)議,但是由于差錯報告在發(fā)送給報文源發(fā)方時可能也要經(jīng)過若干子網(wǎng),因此牽涉到路由選擇等問題,所以ICMP報文需通過IP協(xié)議來發(fā)送。ICMP數(shù)據(jù)報的數(shù)據(jù)發(fā)送前需要兩級封裝:首先添加ICMP報頭形成ICMP報文,再添加IP報頭形成IP數(shù)據(jù)報。<

20、/p><p>  (1)IP報頭格式 </p><p>  (2)由于IP層協(xié)議是一種點對點的協(xié)議,而非端對端的協(xié)議,它提供無連接的數(shù)據(jù)報服務(wù),沒有端口的概念,因此很少使用bind()和connect()函數(shù),若有使用也只是用于設(shè)置IP地址。發(fā)送數(shù)據(jù)使用sendto()函數(shù),接收數(shù)據(jù)使用recvfrom()函數(shù)</p><p><b>  IP報頭格式如下

21、:</b></p><p>  在Linux中,IP報頭格式數(shù)據(jù)結(jié)構(gòu)()定義如下:</p><p>  struct ip </p><p><b>  { </b></p><p>  #if   __BYTE_ORDER   ==   __LITTLE_ENDIAN</

22、p><p>  unsigned int ip_hl:4; /* header length */</p><p>  unsigned int ip_v:4; /* version */</p><p><b>  #endif</b></p><p>  #if   __BYTE_ORDER == __BIG

23、_ENDIAN unsigned int ip_v:4; /* version */unsigned int ip_hl:4; /* header length */#endifu_int8_t ip_tos; /* type of service */u_short ip_len; /* total length */ u_short ip_id; /* identification */u_short ip_of

24、f; /* fragment offset field */#define IP_RF 0x8000 /* reserved fragment flag*/#define IP_DF 0x4000 /* dont fragment flag*/#define IP_MF 0x2000 /* more fragments flag */#define IP_OFFMASK 0x1fff /* mask for fragmentin

25、g bits */u_int8_t ip_ttl; /* ti</p><p>  是上述IP數(shù)據(jù)結(jié)構(gòu)的ip_hl變量。生存時間TTL(Time   To   Live)――以秒為單位,指出Ip</p><p>  數(shù)據(jù)報能在網(wǎng)絡(luò)上停留的最長時間,其值由發(fā)送方設(shè)定,并在經(jīng)過路由的每一個節(jié)點時減一,當(dāng)該值</p><p>  為0時,數(shù)據(jù)報將被丟

26、棄,是上述IP數(shù)據(jù)結(jié)構(gòu)的ip_ttl變量。</p><p>  (2)ICMP報頭格式 ICMP報文分為兩種,一是錯誤報告報文,二是查詢報文。每個ICMP報頭均包含類型、編碼和校驗和這三項內(nèi)容,長度為8位,8位和16位,其余選項則隨ICMP的功能不同而不同。</p><p>  Ping命令只使用眾多ICMP報文中的兩種: "請求回送 "(ICMP_ECHO)和

27、 "請求回應(yīng) "(ICMP_ECHOREPLY)。在Linux中定義如下:#define ICMP_ECHO   0#define ICMP_ECHOREPLY 8這兩種ICMP類型報頭格式如下:在Linux中ICMP數(shù)據(jù)結(jié)構(gòu)()定義如下:struct icmp{u_int8_t icmp_type; /* type of message, see below */u_int8_t

28、 icmp_code; /* type sub code */u_int16_t icmp_cksum; /* ones complement checksum of struct */union{u_char ih_pptr; /* ICMP_PARAMPROB */struct in_addr   ih_gwaddr; /* gateway address */struct ih_idseq /* e

29、cho datagram */{u_int16_t icd_id;u_int16_t ic</p><p>  (3)ICMP數(shù)據(jù)報 Ping命令中需要顯示的信息,包括icmp_seq和ttl都已有實現(xiàn)的辦法,但還缺rtt往返時間。為了實現(xiàn)這一功能,可利用ICMP數(shù)據(jù)報攜帶一個時間戳。使用以下函數(shù)生成時間戳:#includeint gettimeofday(struct timeval *tp,v

30、oid *tzp) 其中timeval結(jié)構(gòu)如下:struct timeval{long tv_sec;long tv_usec;</p><p>  } 其中tv_sec為秒數(shù),tv_usec微秒數(shù)。在發(fā)送和接收報文時由gettimeofday分別生成兩個timeval結(jié)構(gòu),兩者之差即為往返時間,即ICMP報文發(fā)送與接收的時間差,而timeval結(jié)構(gòu)由ICMP數(shù)據(jù)報攜帶,tzp指針表示時區(qū),一般都不

31、使用,賦NULL值。(5)數(shù)據(jù)統(tǒng)計 系統(tǒng)自帶的ping命令當(dāng)它接送完所有ICMP報文后,會對所有發(fā)送和所有接收的ICMP報文進行統(tǒng)計,從而計算ICMP報文丟失的比率。為達此目的,定義兩個全局變量:接收計數(shù)器和發(fā)送計數(shù)器,用于記錄ICMP報文接受和發(fā)送數(shù)目。丟失數(shù)目=發(fā)送總數(shù)-接收總數(shù),丟失比率=丟失數(shù)目/發(fā)送總數(shù)。</p><p><b>  3.實現(xiàn)原理和步驟</b></p&g

32、t;<p><b>  3.1.實現(xiàn)原理</b></p><p>  首先裝載ICMP.DLL連接庫,查找給定機器的IP地址信息,然后通過三個指針函數(shù)pIcmpCreateFile、pIcmpCloseHandle、pIcmpSendEcho從ICMP.DLL中得到函數(shù)入口地址,打開ping服務(wù),構(gòu)造并發(fā)送ping數(shù)據(jù)包,完成ping命令的模擬實現(xiàn)。</p>&l

33、t;p><b>  3.2.實現(xiàn)步驟</b></p><p> ?。?)啟動visual C++,進入集成開發(fā)環(huán)境。</p><p> ?。?)建立一個“Win32 Console Application”類型的工程,工程名為pb55</p><p> ?。?)在該工程下,建立一個源程序文件,即選擇“C+Soure File”,文件名為p

34、b55</p><p> ?。?)輸入源程序如下:</p><p>  #include<iostream.h></p><p>  #include<winsock.h></p><p>  #include<windowsx.h></p><p>  #include"

35、icmpdefs.h"</p><p>  #pragma comment(lib,"ws2_32.lib")</p><p>  //ping 實現(xiàn)部分</p><p>  int doit(int argc,char* argv[])</p><p><b>  {</b></p&

36、gt;<p>  //裝載ICMP.DLL連接庫</p><p>  HINSTANCE hIcmp=LoadLibrary("ICMP.DLL");</p><p>  if(hIcmp==0)</p><p><b>  {</b></p><p>  cerr<<&qu

37、ot;Unable to locate ICMP.DLL!"<<endl;</p><p><b>  return 2;</b></p><p><b>  }</b></p><p>  //查找給定機器的IP地址信息</p><p>  struct hostent* p

38、he;</p><p>  if((phe=gethostbyname(argv[1]))==0)</p><p><b>  {</b></p><p>  cerr<<"Could not find IP address for "<<argv[1]<<endl;</p>

39、<p><b>  return 3;</b></p><p><b>  }</b></p><p>  //定義函數(shù)三個指針類型</p><p>  typedef HANDLE (WINAPI* pfnHV)(VOID);</p><p>  typedef BOOL (WINAP

40、I* pfnBH)(HANDLE);</p><p>  typedef DWORD (WINAPI* pfnDHDPWPipPDD)(HANDLE,DWORD,LPVOID,WORD,</p><p>  PIP_OPTION_INformATION,LPVOID,DWORD,DWORD);//evil,no?</p><p>  //定義三個指針函數(shù)</p

41、><p>  pfnHV pIcmpCreateFile;</p><p>  pfnBH pIcmpCloseHandle;</p><p>  pfnDHDPWPipPDD pIcmpSendEcho;</p><p>  //從ICMP.DLL中得到函數(shù)入口地址</p><p>  pIcmpCreateFile=(

42、pfnHV)GetProcAddress(hIcmp,"IcmpCreateFile");</p><p>  pIcmpCloseHandle=(pfnBH)GetProcAddress(hIcmp,"IcmpCloseHandle");</p><p>  pIcmpSendEcho=(pfnDHDPWPipPDD)GetProcAddress(

43、hIcmp,"IcmpSendEcho");</p><p>  if((pIcmpCreateFile==0)||(pIcmpCloseHandle==0)||(pIcmpSendEcho==0))</p><p><b>  {</b></p><p>  cerr<<"Failed to get

44、pro addr for function."<<endl;</p><p><b>  return 4;</b></p><p><b>  }</b></p><p>  //打開ping服務(wù)</p><p>  HANDLE hIP=pIcmpCreateFile();

45、</p><p>  if(hIP==0)</p><p><b>  {</b></p><p>  cerr<<"Unable to open ping service."<<endl;</p><p><b>  return 5;</b></

46、p><p><b>  }</b></p><p>  //構(gòu)造ping數(shù)據(jù)包</p><p>  char acPingBuffer[64];</p><p>  memset(acPingBuffer,'\xAA',sizeof(acPingBuffer));</p><p>  

47、PIP_ECHO_REPLY pIpe=(PIP_ECHO_REPLY)GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT,</p><p>  sizeof(IP_ECHO_REPLY)+sizeof(acPingBuffer));</p><p>  if(pIpe==0)</p><p><b>  {</b><

48、;/p><p>  cerr<<"Failed to allocate global ping packet buffer."<<endl;</p><p><b>  return 6;</b></p><p><b>  }</b></p><p>  p

49、Ipe->Data=acPingBuffer;</p><p>  pIpe->DataSize=sizeof(acPingBuffer);</p><p>  //發(fā)送ping數(shù)據(jù)包</p><p>  DWORD dwStatus=pIcmpSendEcho(hIP,*((DWORD*)phe->h_addr_list[0]),</p&g

50、t;<p>  acPingBuffer,sizeof(acPingBuffer),NULL,pIpe,</p><p>  sizeof(IP_ECHO_REPLY)+sizeof(acPingBuffer),5000);</p><p>  if(dwStatus!=0)</p><p><b>  {</b></p&g

51、t;<p>  cout<<"Addr:"<<</p><p>  int(LOBYTE(LOWORD(pIpe->Address)))<<"."<<</p><p>  int(HIBYTE(LOWORD(pIpe->Address)))<<".&quo

52、t;<<</p><p>  int(LOBYTE(HIWORD(pIpe->Address)))<<"."<<</p><p>  int(HIBYTE(HIWORD(pIpe->Address)))<<"."<<</p><p>  "RTT

53、:"<<int(pIpe->RoundTripTime)<<"ms,"<<</p><p>  "TTL:"<<int(pIpe->Options.Ttl)<<endl;</p><p><b>  }</b></p><p&g

54、t;<b>  else</b></p><p><b>  {</b></p><p>  cerr<<"Error obtaining info from ping packet."<<endl;</p><p><b>  }</b></p>

55、;<p><b>  //關(guān)閉,回收資源</b></p><p>  GlobalFree(pIpe);</p><p>  FreeLibrary(hIcmp);</p><p><b>  return 0;</b></p><p><b>  }</b>&l

56、t;/p><p><b>  //主函數(shù)//</b></p><p>  int main(int argc,char* argv[])</p><p><b>  {</b></p><p>  WSAData wsaData;</p><p>  if(WSAStartup(

57、MAKEWORD(1,1),&wsaData)!=0)</p><p><b>  {</b></p><p>  return 255;</p><p><b>  }</b></p><p>  if(argc<2)</p><p><b>  {

58、</b></p><p>  cerr<<"usage:ping<host>"<<endl;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int retval=

59、doit(argc,argv);</p><p>  return retval;</p><p><b>  }</b></p><p>  //以下是頭文件icmpdefs.h代碼</p><p>  //ICMP.DLL函數(shù)中需要的結(jié)構(gòu)//</p><p>  typedef struct{

60、</p><p>  unsigned char Ttl;//time to live</p><p>  unsigned char Tos;//type of service</p><p>  unsigned char Flags;//ip header flags</p><p>  unsigned char OptionsSiz

61、e; //size in bytes of options data</p><p>  unsigned char *OptionsData;//pointer to options data</p><p>  }IP_OPTION_INformATION,*PIP_OPTION_INformATION;</p><p>  typedef struct{<

62、;/p><p>  DWORD Address;//replying address</p><p>  unsigned long Status;//reply status</p><p>  unsigned long RoundTripTime;//rtt in milliseconds</p><p>  unsigned short

63、DataSize;//echo data size </p><p>  unsigned short Reserved;//reserved for system use</p><p>  void *Data;//pointer to the echo data</p><p>  IP_OPTION_INformATION Options;//reply o

64、ptions</p><p>  }IP_ECHO_REPLY,*PIP_ECHO_REPLY;</p><p> ?。?)編譯,連接并生成EXE程序</p><p> ?。?)進入命令行提示符下運行程序(格式同Ping程序,Ping XXX.XXX.XXX.XXX)。</p><p><b>  3.3.注意事項</b&g

65、t;</p><p>  在具體運行之前,要先配置環(huán)境變量,具體步驟為:“我的電腦”—>“屬性”—>“高級”—>“環(huán)境變量”配置用戶變量,具體配置內(nèi)容如下所示:</p><p>  PATH=C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\

66、Common\MSDev98\Bin INCLUDE=C:\Program Files\Microsoft Visual Studio\VC98\Include;C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include LIB=C:\Program Files\Microsoft Visual Studio\VC98\Lib;C:\Program Files\Micros

67、oft Visual Studio\VC98\MFC\Lib</p><p>  配置完成后,點擊“開始”—>“運行”,輸入cmd進入DOS界面,VC++的編譯程序為cl.exe,編譯格式為cl E:\cl\cl.cpp,編譯連接成功后即可運行程序,具體可見運行結(jié)果部分。</p><p><b>  運行結(jié)果:</b></p><p>&

68、lt;b>  圖3.1運行結(jié)果</b></p><p><b>  總結(jié)</b></p><p>  通過此次設(shè)計我們了解了Ping命令模式的實現(xiàn),并了對TCP/IP協(xié)議有了更加深刻的了解和認識。同時對網(wǎng)路的一些工作原理進行了進一步的了解,我們通過調(diào)試程序,運行出結(jié)果。使我們收獲很多。</p><p>  在此次的設(shè)計中,我們

69、分組共同完成設(shè)計內(nèi)容,一起查閱資料,共同的合作探討,終于完成了此次的內(nèi)容,我們了解了有關(guān)Ping命令的內(nèi)容,同時實現(xiàn)了Ping命令的模擬,收獲了很多知識。</p><p><b>  參考文獻:</b></p><p>  [1] 劉永華.《Windows sever 2003 網(wǎng)絡(luò)操作系統(tǒng)》.北京:清華大學(xué)出版社,2010.</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論