計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書_第1頁
計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書_第2頁
計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書_第3頁
計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書_第4頁
計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

年4月19日計算機(jī)網(wǎng)絡(luò)原理課程實(shí)驗(yàn)指導(dǎo)書文檔僅供參考《計算機(jī)網(wǎng)絡(luò)原理》實(shí)驗(yàn)指導(dǎo)書目錄《計算機(jī)網(wǎng)絡(luò)原理》實(shí)驗(yàn)指導(dǎo)書 1實(shí)驗(yàn)一IP協(xié)議分析 2一、實(shí)驗(yàn)?zāi)康?2二、實(shí)驗(yàn)學(xué)時 2三、實(shí)驗(yàn)類型 2四、實(shí)驗(yàn)步驟 2實(shí)驗(yàn)二TCP網(wǎng)絡(luò)編程 5一、實(shí)驗(yàn)?zāi)康?5二、實(shí)驗(yàn)學(xué)時 5三、實(shí)驗(yàn)類型 5四、實(shí)驗(yàn)步驟 5

實(shí)驗(yàn)一IP協(xié)議分析一、實(shí)驗(yàn)?zāi)康?.掌握IP數(shù)據(jù)報的報文格式2.掌握子網(wǎng)掩碼和路由轉(zhuǎn)發(fā)二、實(shí)驗(yàn)學(xué)時4學(xué)時三、實(shí)驗(yàn)類型驗(yàn)證型實(shí)驗(yàn)四、實(shí)驗(yàn)步驟實(shí)驗(yàn)分組進(jìn)行,每組6人,采用網(wǎng)絡(luò)結(jié)構(gòu)二。說明:主機(jī)A、C、D的默認(rèn)網(wǎng)關(guān)是;主機(jī)E、F的默認(rèn)網(wǎng)關(guān)是。主機(jī)B啟動靜態(tài)路由服務(wù)(方法:在命令行方式下,輸入“staticroute_config”)。按照拓?fù)浣Y(jié)構(gòu)圖連接網(wǎng)絡(luò),使用拓?fù)潋?yàn)證檢查連接的正確性。練習(xí)一:領(lǐng)略真實(shí)的ARP(同一子網(wǎng))主機(jī)A、B、C、D、E、F在命令行下運(yùn)行“arp-a”命令,察看ARP高速緩存表?!締栴}】ARP高速緩存表由哪幾項組成?主機(jī)A、B、C、D啟動協(xié)議分析器,打開捕獲窗口進(jìn)行數(shù)據(jù)捕獲并設(shè)置過濾條件(提取ARP、ICMP)。主機(jī)A、B、C、D在命令行下運(yùn)行“arp-d”命令,清空ARP高速緩存。主機(jī)Aping主機(jī)D()。主機(jī)A、B、C、D停止捕獲數(shù)據(jù),并立即在命令行下運(yùn)行“arp-a”命令察看ARP高速緩存?!締栴}】結(jié)合協(xié)議分析器上采集到的ARP報文和ARP高速緩存表中新增加的條目,簡述ARP協(xié)議的報文交互過程以及ARP高速緩存表的更新過程。練習(xí)二:編輯并發(fā)送IP數(shù)據(jù)報主機(jī)A啟動仿真編輯器,編輯一個IP數(shù)據(jù)報,其中:MAC層:目的MAC地址:主機(jī)B的MAC地址(對應(yīng)于接口的MAC)。源MAC地址:主機(jī)A的MAC地址。協(xié)議類型或數(shù)據(jù)長度:0800。IP層:總長度:IP層長度。生存時間:128。源IP地址:主機(jī)A的IP地址()。目的IP地址:主機(jī)E的IP地址()。校驗(yàn)和:在其它所有字段填充完畢后計算并填充?!締栴}】IP在計算校驗(yàn)和時包括哪些內(nèi)容?在主機(jī)B(兩塊網(wǎng)卡分別打開兩個捕獲窗口)、E上啟動協(xié)議分析器,設(shè)置過濾條件(提取IP協(xié)議),開始捕獲數(shù)據(jù)。主機(jī)A發(fā)送第1步中編輯好的報文。主機(jī)B、E停止捕獲數(shù)據(jù),在捕獲到的數(shù)據(jù)中查找主機(jī)A所發(fā)送的數(shù)據(jù)報。【問題】第1步中主機(jī)A所編輯的報文,經(jīng)過主機(jī)B到達(dá)主機(jī)E后,報文數(shù)據(jù)是否發(fā)生變化?若發(fā)生變化,記錄變化的字段,并簡述發(fā)生變化的原因。將第2步中主機(jī)A所編輯的報文的“生存時間”設(shè)置為1。重新計算校驗(yàn)和。主機(jī)B、E重新開始捕獲數(shù)據(jù)。主機(jī)A發(fā)送第5步中編輯好的報文。主機(jī)B、E停止捕獲數(shù)據(jù),在捕獲到的數(shù)據(jù)中查找主機(jī)A所發(fā)送的數(shù)據(jù)報?!締栴}】主機(jī)B、E是否能捕獲到主機(jī)A所發(fā)送的報文?簡述產(chǎn)生這種現(xiàn)象的原因。

實(shí)驗(yàn)二TCP網(wǎng)絡(luò)編程一、實(shí)驗(yàn)?zāi)康?.了解基于MFC的TCP網(wǎng)絡(luò)編程的方式2.學(xué)習(xí)使用MFC編寫簡單的TCP網(wǎng)絡(luò)程序二、實(shí)驗(yàn)學(xué)時4學(xué)時三、實(shí)驗(yàn)類型設(shè)計型實(shí)驗(yàn)四、實(shí)驗(yàn)步驟該實(shí)驗(yàn)以兩位同學(xué)為一組,一位同學(xué)開發(fā)服務(wù)器程序,一位同學(xué)開發(fā)客戶端程序。使得客戶端與服務(wù)器之間能夠?qū)崿F(xiàn)信息交換。一、WindowsSocket和套接口的基本概念網(wǎng)際協(xié)議(InternetProtocol,IP)是一種用于互聯(lián)網(wǎng)的網(wǎng)絡(luò)協(xié)議,已廣為人知。它可廣泛用于大多數(shù)計算機(jī)操作系統(tǒng)上,也可用于大多數(shù)局域網(wǎng)LAN(比如辦公室小型網(wǎng)絡(luò))和廣域網(wǎng)WAN(比如說互聯(lián)網(wǎng))。從它的設(shè)計看來,它是一個無連接的協(xié)議,并不能保證數(shù)據(jù)投遞萬無一失。兩個上層協(xié)議(TCP和UDP)依賴IP協(xié)議進(jìn)行數(shù)據(jù)通信。如果希望在MicrosoftWindows下經(jīng)過TCP和UDP協(xié)議建立網(wǎng)絡(luò)應(yīng)用程序,則需要使用Winsock套接口編程技術(shù)。套接口,就是一個指向傳輸提供者的句柄。Win32中,套接口不同于文件描述符,因此它是一個獨(dú)立的類型——SOCKET。WindowsSockets描述定義了一個MicrosoftWindows的網(wǎng)絡(luò)編程界面,它是從UnixSocket的基礎(chǔ)上發(fā)展而來的,為WindowsTCP/IP提供了一個BSD型的套接字規(guī)范,除與4.3BSDUnixSockets完全兼容外,還包括一個擴(kuò)充文件,經(jīng)過一組附加的API實(shí)現(xiàn)Windows式(即事件驅(qū)動)的編程風(fēng)格;而Winsock則是在MicrosoftWindows中進(jìn)行網(wǎng)絡(luò)應(yīng)用程序設(shè)計的接口。Windows在Internet支配域中的TCP/IP協(xié)議定義了Winsock網(wǎng)絡(luò)編程規(guī)范,融入了許多新特點(diǎn)。使用Socket的目的是使用戶在網(wǎng)絡(luò)協(xié)議上工作而不必對該網(wǎng)絡(luò)協(xié)議有非常深入的了解。另外,編寫的程序還可被迅速地移植到任何支持Socket的網(wǎng)絡(luò)系統(tǒng)中去。Winsock提供了二種可為指定傳輸協(xié)議打開、計算和關(guān)閉會話的能力。在Windows下,TCP/IP上層模型在很大程度上與用戶的Winsock應(yīng)用有關(guān):換言之,用戶的Winsock應(yīng)用控制了會話的方方面面,必要時,還會根據(jù)程序的需要格式化數(shù)據(jù)。套接口有三種類型:流式套接口、數(shù)據(jù)報套接口及原始套接口。流式套接口定義了一種可靠的面向連接的服務(wù)(利用TCP協(xié)議),實(shí)現(xiàn)了無差錯無重復(fù)的順序數(shù)據(jù)傳輸。數(shù)據(jù)報套接口定義了一種無連接的服務(wù)(UDP協(xié)議),數(shù)據(jù)經(jīng)過相互獨(dú)立的報文進(jìn)行傳輸,是無序的,而且不保證可靠和無差錯。原始套接口允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的測試等。面向連接服務(wù)器處理的請求往往比較復(fù)雜,不是一來一去的請求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。使用面向連接的套接口編程,能夠經(jīng)過圖來表示。無連接服務(wù)器一般都是面向事務(wù)處理的,一個請求、一個應(yīng)答就完成了客戶程序與服務(wù)程序之間的相互作用。若使用無連接的套接口編程,程序的流程能夠用圖表示。套接口工作過程如下:服務(wù)器首先啟動,經(jīng)過調(diào)用socket()建立一個套接口,然后調(diào)用bind()將該套接口和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()使套接口做好偵聽的準(zhǔn)備,并規(guī)定它的請求隊列的長度,之后,調(diào)用accept()來接收連接。客戶在建立套接口后就可調(diào)用connect()和服務(wù)器建立連接。連接一旦建立,客戶機(jī)和服務(wù)器之間就能夠經(jīng)過調(diào)用read()和write()來發(fā)送和接收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()關(guān)閉套接口。在網(wǎng)絡(luò)編程中,掌握端口的概念十分重要。端口:基于TCP/IP協(xié)議的網(wǎng)絡(luò)中,計算機(jī)都分配有一個IP地址,用一個32位二進(jìn)制數(shù)來表示,正式的稱呼是“Ipv4地址”??蛻魴C(jī)需要經(jīng)過TCP或UDP和服務(wù)器通信時,必須指定服務(wù)器的IP,地址和服務(wù)端口號。另外,服務(wù)器打算偵聽接入客戶機(jī)請求時,也必須指定一個IP,地址和一個端口號。在選擇端口時,應(yīng)特別小心,因?yàn)橛行┛捎枚丝谔柺菫椤耙阎摹?即固定的)服務(wù)保留的,如文件傳輸協(xié)議和超文本傳輸協(xié)議,即FTP(21號端口)和HTTP(一般為8080端口)。“已知的協(xié)議”,即固定協(xié)議,采用的端口由“互聯(lián)網(wǎng)編號分配認(rèn)證(IANA)”控制和分配,RFC1700中說明的編號。從本質(zhì)上說,端口號可分成3類:“已知”端口、已注冊端口、動態(tài)和(或)私用端口。(1)“已知”端口0-1023,由IANA控制,是在UNIX中為固定服務(wù)保留的。(2)已注冊的端口1024-49151,由IANA列出來的,供普通用戶的普通用戶進(jìn)程或程序使用。(3)動態(tài)和(或)私用端口49152-65535。普通用戶應(yīng)用應(yīng)選擇1024-49151之間的已注冊端口,從而避免端口號已被另一個應(yīng)用或系統(tǒng)服務(wù)所用。另外,49152-65535間的端口可自由使用,因?yàn)镮ANA這些端口上沒有注冊服務(wù)。二、MFCCSocket類的通信流程使用CSockct類進(jìn)行網(wǎng)絡(luò)二進(jìn)制數(shù)據(jù)通信的連接流程,如下表所示。服務(wù)器端注釋客戶端lCsocketm_server構(gòu)造一個socket對象Csocketm_client2m_server.create(nport)創(chuàng)立socketM_client.create(nport)3m_server.listen()聽等連接與服務(wù)器建立連接m_client.connectstraddr,nport)此時阻塞。等待服務(wù)器端偵聽。4Csocketm_receive;m_server.accpet(m_receive)此時阻塞,等待客戶機(jī)連接.構(gòu)造新的socket對象用以接收客戶端的連接5CsocketFilefile(&m_server);構(gòu)造一文件對象CsocketFilefile(&m_server)6CArchivearin(&file,CArchive::load)CArchivearout(&file,CArchive::store)構(gòu)造流對象CArchivearin(&file,CArchive::Ioad)CArchivearout(&file,CArchive::store)7arin>>value;arout<<value;用流進(jìn)行數(shù)據(jù)的傳輸概念和cin,cout相似arin>>value;arout<<value;注意事項:利用cArchive類進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)牟僮鞴倘环奖阒庇^,可是如果編寫的程序是和別人的程序進(jìn)行通信的話,就要注意對方的程序是否也用了CArchive類,否則會造成數(shù)據(jù)相互不能識別?!境绦蚓帉懖襟E】客戶機(jī)/服務(wù)器模式是socket點(diǎn)對點(diǎn)網(wǎng)絡(luò)程序典型的模式。它用到的方法也是面向連接TCP連接的套接字MFC典型方式。其工作過程是:服務(wù)器首先啟動,創(chuàng)立套接字后等待客戶的連接;客戶啟動以后,創(chuàng)立套接字,然后和服務(wù)器建立連接;連接建立后,客戶機(jī)和服務(wù)器能夠經(jīng)過建立的套接字連接進(jìn)行信息通信。注意其中紅色字體為LX1需做,黑色字體為LX2需做,藍(lán)色字體表示二者都需做的部分。先建立一個MFC,選DialogBased,工程名為Lx2,如圖所示。下一個對話框選擇WindowSockets,后面的選項酌情考慮,或者連續(xù)選擇默認(rèn)的即可,如圖所示。如果忘了添加WindowsSockets選項,能夠在文件頭部添加下列語句進(jìn)行補(bǔ)救:#include“Winsock.h”#include“ws2tcpip.h”#pragmacomment(1ib,“Ws2_32.lib”)注:這些語句支持winsock2。出現(xiàn)Dialog以后,編輯界面,使其如圖所示而且對控件點(diǎn)擊右鍵,選擇屬性選項,把每個控件的ID改掉(控件ID就是每個控件的名字,要改成有意義的,以便將來管理)。各個控件的ID如下表,而且在對話框視圖中點(diǎn)擊右鍵,選擇ClassWizard選項,用該工具對控件添加變量??丶蘒D變量名綁定變量類型對應(yīng)界面上的控件IDC_CONTENTm_msgCString輸入發(fā)送內(nèi)容的文本框IDC_CONTENTm_ctrlCEdit輸入發(fā)送內(nèi)容的文本框IDC_LISTENm_listenCButton偵聽按鈕IDC_SENDre_sendCButton發(fā)送按鈕接著,再打開一個VC,建立客戶機(jī)工程,工程名稱為Lx1,各個控件的ID如下表控件ID變量名綁定變量類型對應(yīng)界面上的控件IDC_CONTENTm_msgCStringt輸入發(fā)送內(nèi)容的文本框IDC_CONTENTm_ctrlCEdit輸入發(fā)送內(nèi)容的文本框IDC_CONNECTm_connectCButton連接按鈕IDC_SENDm_sendCButton發(fā)送按鈕IDC_IPm_lpCString輸入連接目的IP的文本框然后,在BOOLCLx1Dig::OnlnitDialog()和BOOLCLx2DIg::OnlnitDialog()末尾添加語句,使其如下所示:m_send.EnableWindow(FALSE);//使發(fā)送按鈕變灰returnTRUE;//returnTRUEunlessyou//setthefocustoacontrol注意:這個語句作用使發(fā)送按鈕失效,以免還未連接用戶就點(diǎn)擊發(fā)送,發(fā)生不可預(yù)計的錯誤。為了在程序中更自由地處理CSocket得到的消息,必須新建CSocket的派生類:在Lx2工程的工作區(qū)類視圖中點(diǎn)擊右鍵,添加新類:CServer,父類為CSocket。NewClass對話框:在lx2Dlg.h里添加:頭文件:#include“Server.h”private變量:CServerm_server;CServerm_recv;在對話框的圖像上雙擊“偵聽”按鈕,添加如下代碼:voidCLx2Dlg::OnListen(){m_server.Create(1000);//使用1000號端口m_server.Listen();//偵聽}在對話框圖像上再雙擊“發(fā)送"按鈕,添加如下代碼:voidCLx2Dlg::OnSend(){UpdateData(TRUE);//更新數(shù)據(jù),使m_msg得到當(dāng)前框中文本m_recv.Send(m_msg,255);//發(fā)送數(shù)據(jù)m_ctrl.SetSel(0,-1);//全選發(fā)送框文字m_ctrl.ReplaceSel(“”,TRUE);//將發(fā)送框置空}同樣地,在Lxl工程的工作區(qū)類視圖中點(diǎn)擊右鍵,添加新類:CClient它繼承自CSocket。在CLxlDIg類里添加private變量:CClientm_client;雙擊對話框圖像上的“連接”按鈕,添加代碼:voidCLxlDlg::OnConnect(){UpdateData(TURE);m_client.Create(1001);//使用1001號端口if(m_client.Connect(m_ip,1000))//連接目標(biāo)地址,1000端口{AfxMessageBox(“Client端連接成功”);m_send.EnableWindow(TRUE);//連接成功,能夠發(fā)送m_connect.EnableWindow(FALSE);//同時禁止連接按鈕}else{m_client.Close();//如果連接失敗就關(guān)閉AfxMessageBox(“連接失敗”);}}雙擊發(fā)送按鈕,添加代碼:voidCLx1Dlg::OnSend(){UpdateData(TRUE);//更新數(shù)據(jù),使m_msg得到當(dāng)前框中文本m_client.Send(m_msg,255);//發(fā)送數(shù)據(jù),長度255字節(jié)m_ctrl.SetSel(0,-1);//全選發(fā)送框文字m_ctrl.ReplaceSel(“”,TRUE);//將發(fā)送框置空)經(jīng)過以上操作,我們建立了CSocket,主機(jī)、客戶機(jī)建立連接后的消息發(fā)送代碼也添加完成了,可是還缺少使其工作的消息機(jī)制。下面的步驟就是利用OnAccept和OnReceive函數(shù)處理socket消息。首先,在Lx2工程的編輯界面中點(diǎn)擊右鍵,選ClassWizard,在classname欄目里面找到CServer類,添加OnAccept和OnReceive函數(shù)而且雙擊下面的Memberfunction欄目,分別為兩個函數(shù)添加如下代碼:voidCServer::OnAccept(intnErrorCode){//TODO:Addyourspecializedcodehereand/orcallthebaseclassCSocket::OnAccept(nErrorCode);((CLx2Dlg*)(AfxGetApp()->m_pMainWnd))->ShowAccept();//這里僅僅添加了這一句,因?yàn)镃Lx2DIg類是發(fā)送接收消息的主窗口,//而且應(yīng)用程序發(fā)送接收的消息也在CLx2Dlg對象實(shí)例中進(jìn)行,//因此當(dāng)CServer類的對象收到客戶機(jī)的Connect消息時,//便可調(diào)用CLx2DLg對象中的ShowAccept()函數(shù)處理。}該步完成以后,能夠?yàn)镃Lx2DIg類添加public成員函數(shù)ShowAccept():voidCLx2Dlg::ShowAccept(){m_server.Accept(m_recv);AfxMessageBox(“Server端連接成功”);m_send.EnableWindow(TRUE);//連接成功,能夠發(fā)送m_listen.EnableWindow(FALSE);//同時禁止偵聽按鈕}于是,當(dāng)客戶機(jī)調(diào)用m_client.Connect(m_ip,1000)時,主機(jī)server端發(fā)現(xiàn)并調(diào)用ShowAccept函數(shù)來建立連接。執(zhí)行完以后,Socket連接便被建立。接下來的工作便是添加發(fā)送聊天信息的函數(shù)了。注意到前面點(diǎn)擊發(fā)送按鈕的OnSend()函數(shù)已經(jīng)添加好了,在Lx2工程中只要添加Server端的接收消息和顯示消息功能就能夠進(jìn)行消息的傳送。在CServer類中像添加OnAccept()一樣添加成員函數(shù)OnReceive():voidCserver::OnReceive(intnErrorCode){//TODO:Addyourspecializedcodehereand/orcallthebaseclassCSoeket::OnReceive(nErrorCode);((CLx2Dlg*)(AfxGetApp()->m_pMainWnd))->ShowMsg();}建立連接后,一方一旦發(fā)送數(shù)據(jù),另一方的CS

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論