資源描述:
《數據鏈路層協(xié)議的設計與實現》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、計算機通信網絡實驗數據鏈路層協(xié)議的設計與實現學院:班級:學號:姓名:2012年11月11日..一、實驗目的計算機網絡的數據鏈路層協(xié)議保證通信雙方在有差錯的通信線路上進行無差錯的數據傳輸,是計算機網絡各層協(xié)議中通信控制功能最典型的一種協(xié)議。本實驗實現一個數據鏈路層協(xié)議的數據傳送部分,目的在于更好地理解基本數據鏈路層協(xié)議的基本工作原理,掌握計算機網絡協(xié)議的基本實現技術。二、實驗內容使用C語言實現下面數據鏈路層協(xié)議:1.分析和實現一個理想的鏈路層協(xié)議2.對于前面實現的協(xié)議進行擴充,實現它的第一次改進,如何防止發(fā)方過快淹沒收方。3.對上一步再假設
2、在不可靠的的鏈路上進行通信。三、實驗步驟1.熟悉數據鏈路層協(xié)議的功能;2.編寫數據鏈路層協(xié)議的實現程序;3.調試并運行自己編寫的協(xié)議實現程序;4.了解協(xié)議的工作軌跡,如出現異常情況,在實驗報告中寫出原因分析;5.保留你實現的數據鏈路層協(xié)議,以備教師檢查。四、實驗過程1、程序功能及設計思路功能概述:用客戶端/服務器模式代表A站、B站。先由客戶端輸入服務器IP地址,發(fā)送SYN同步幀,告訴服務器準備接受??蛻舳溯斎霐祿?,會進行CRC編碼,再發(fā)送數據幀;服務器收到后,先進行校驗,數據正確則發(fā)送ACK幀,客戶端則發(fā)送下一幀數據;否則服務器發(fā)送NA
3、K幀,客戶端重新發(fā)送該數據。CRC校驗:1)將收到的字符轉為int型(32位),并將其二進制碼左移16位,存于data;2)進行C(D)=Remainder[(S(D)?D^L)/g(D)],即CRC校驗,得到校驗位。3)將校驗位加在信息元后,組成24位的碼字,存于要發(fā)送的數據幀dframe。停等式ARQ協(xié)議:Client:1)置SN=0;2)收到數據,將SN分配給該數據,如果沒有收到,則等待;3)存于要發(fā)送的數據幀中,發(fā)送給server;4)如果從server收到確認幀,且RN>SN,則SN加1(模2),返回2;如果收到NAK或RN=S
4、N,則返回3,重傳數據。..Server:1)置RN=0;2)從client收到一個SN=RN的幀,進行CRC校驗檢查,無錯后輸出,并置RN加1、發(fā)送ACK幀;否則發(fā)送NAK幀,請求重發(fā)。2、C語言程序代碼:客戶端Client://***********************client.c*****************************#include//WINSOCKAPI的頭文件,需要包含在項目中#pragmacomment(lib,"ws2_32.lib")//WINSOCKAPI連接庫文件#in
5、clude#includeinterr;SOCKETsock;//用于服務器監(jiān)聽的SocketSOCKADDR_INaddrSrv;//服務端地址unsignedcharsendBuf[100];//發(fā)送緩存charserverIp[20];//客戶端ip地址intsocklen=sizeof(SOCKADDR_IN);//Socket的地址值的長度intcf_len=sizeof(structsockaddr);structdataFrame//數據幀{intseq;//分段消息的序號intSN;/
6、/發(fā)送序號unsignedintdata[100];intmsglen;//字符長度,采用長度計數的組幀技術};structconFrame//控制幀{intRN;//接收序號chartype[3];//表明幀的類型:SYN同步、EOT送畢、ACK確認應答、NCK否定應答};structdataFramedframe;structconFramecframe;//************************初始化******************************voidinitialization(){WORDwVersio
7、nRequested;WSADATAwsaData;wVersionRequested=MAKEWORD(1,1);//WinSocket1.1版本..err=WSAStartup(wVersionRequested,&wsaData);//wsaData用來存儲系統(tǒng)傳回的關于WinSocket的資料if(LOBYTE(wsaData.wVersion)!=1
8、
9、HIBYTE(wsaData.wVersion)!=1){WSACleanup();}return;}//************************計算CRC-16****
10、**************************//基于32位系統(tǒng),int型長度為4字節(jié),CRC-16的生成多項式為g(D)=D^16+D^15+D^2+1voidcaculate_crc