《計算機網(wǎng)絡》計算校驗和課程設計_第1頁
《計算機網(wǎng)絡》計算校驗和課程設計_第2頁
《計算機網(wǎng)絡》計算校驗和課程設計_第3頁
《計算機網(wǎng)絡》計算校驗和課程設計_第4頁
《計算機網(wǎng)絡》計算校驗和課程設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一.課程設計的目的和意義11.1課程設計的目的12.2課程設計的意義1二.程設計的內(nèi)容和要求22.1課程設計的內(nèi)容22.2課程設計的要求2三、課程設計的相關(guān)技術(shù)23.1 計算校驗和23.1.1 交換性與結(jié)合性23.1.2 字節(jié)順序的自主性33.1.3 并進行計算33.2 一些編碼技術(shù)可以提高校驗和的計算速度43.2.1延遲進位法43.2.2反向循環(huán)法43.2.3合并數(shù)據(jù)拷貝法4四.課程設計過程54.1 數(shù)據(jù)的輸入方式54.2 校驗和的計算54.3 程序流程圖7五.相關(guān)擴展85.1 主要的實現(xiàn)過程85.2 程序流程圖9六.編程實現(xiàn)106.1 程序源代碼10七.程序的調(diào)試及分析13八.課設計

2、小結(jié)14九.參考文獻15一.課程設計的目的和意義1.1課程設計的目的網(wǎng)絡上的信號最終都是通過物理傳輸線路進行傳輸?shù)模绻邔記]有采用差錯控制,那么物理層傳輸?shù)臄?shù)據(jù)信號是可能有差錯的。為了保證數(shù)據(jù)的正確性,在物理層的基礎(chǔ)上設計了數(shù)據(jù)鏈路層。設計數(shù)據(jù)鏈路層的主要作用就是在原始的、有差錯的物理傳輸線路的基礎(chǔ)上,采用差錯檢測、差錯控制與流量控制等方法,將有差錯的物理線路改進成邏輯上無差錯的數(shù)據(jù)鏈路,以向網(wǎng)絡層提供高質(zhì)量的服務。本課程設計主要通過一個簡單例子使學生了解網(wǎng)絡協(xié)議中校驗和的計算過程,以及設置校驗和的作用。目前,進行差錯檢測和差錯控制的主要方法是:在需要傳輸ude數(shù)據(jù)分組后面加上一定的冗余信息

3、,這樣的冗余信息通常都是通過對所發(fā)送的數(shù)據(jù)應用某種算法進行計算而得到的。數(shù)據(jù)的接收方在接收到數(shù)據(jù)后進行同樣的計算再與收到的冗余信息進行比較,如果結(jié)果不同就說明出現(xiàn)了差錯,此時可以要求發(fā)送方重傳該組數(shù)據(jù),以此達到保證數(shù)據(jù)準確性的目的。在普遍使用的網(wǎng)絡協(xié)議中都設置了校驗和項以保存這些冗余信息,例如Ipv4、ICMPv4、IGMPV4、UDP和TCP等等。2.2課程設計的意義計算機網(wǎng)絡課程設計是計算機網(wǎng)絡課程的一個延續(xù),是計算機網(wǎng)絡工程專業(yè)的一門專業(yè)實踐課,其主要內(nèi)容是使用C+實現(xiàn)理論課講授的網(wǎng)絡技術(shù),如校驗和法的驗證等。課程設計所涉及的工作過程主要包括熟悉網(wǎng)絡知識的原理,邏輯設計,使用C+編碼實現(xiàn)

4、,調(diào)試和分析等。通過本課程設計,使學生全面了解和掌握計算機網(wǎng)絡課程上講述的相關(guān)原理,并提高使用C+解決相關(guān)問題的能力。該課程設計能夠提高學生網(wǎng)絡工程的應用能力,可以提高分析問題和解決問題的能力和團隊協(xié)作的能力。二.程設計的內(nèi)容和要求2.1課程設計的內(nèi)容計算校驗和的算法稱為網(wǎng)際校驗和算法,簡單來說,就是把被校驗的數(shù)據(jù)按16位進行累加,然后取反碼。若數(shù)據(jù)字節(jié)長度為奇數(shù),則在數(shù)據(jù)尾部補一個字節(jié)的0以湊成偶數(shù)。關(guān)于計算校驗和算法更詳細的信息請參考RFC 1071。2.2課程設計的要求根據(jù)前面介紹的算法,編制程序為給定數(shù)據(jù)計算校驗和。(1)以命令行形式運行:check_sum infile其中check

5、_sum為程序名,infile為輸入數(shù)據(jù)文件名。(2)輸出:數(shù)據(jù)文件的校驗和。三、課程設計的相關(guān)技術(shù)3.1 計算校驗和有很多數(shù)學方法可以用來提高校驗和的計算速度,下面我們將就此展開討論。3.1.1 交換性與結(jié)合性因為校驗和主要考慮被校驗數(shù)據(jù)中所包含字節(jié)數(shù)量的是奇數(shù)還是偶數(shù),所以校驗和的計算可以以任意順序進行,甚至可以把數(shù)據(jù)進行分組后再計算。例如,用A、B、C、D,Y,Z分別表示一系列八位組,用a,b這樣形式的字節(jié)來表示a*256+b的整數(shù),那么16位校驗和就可以通過以下形式給出:A,B+C,D+Y,Z 1A,B+C,D+Z,0 2在這里,+代表1補數(shù)加法,即將前面的16位校驗和按位取反。1可以

6、以(A,B+C,D+J,0+(0,K+Y,Z) 3的形式進行計算。3.1.2 字節(jié)順序的自主性打破被校驗數(shù)據(jù)中的字節(jié)順序仍可以計算出正確的16位校驗和。例如,我們交換字節(jié)組中兩字節(jié)的順序,得到B,A+D,C+Z,Y 4所得到的得結(jié)構(gòu)與1式是相同的(當然結(jié)果也是要進行一次反轉(zhuǎn)的)。為什么會是這樣呢?我們發(fā)現(xiàn)兩種順序獲得的進位是相同的,都是從第15位到第0位進位以及從第7位到第8位進位。這也就是說,交換字節(jié)位置只是改變高低位字節(jié)的排列順序,但并沒有改變它們的內(nèi)在聯(lián)系。因此,無論底層的硬件設置中對字節(jié)的接收順序如何,校驗和都可以被準確地校驗出來。例如,假設校驗和是以主機序(高位字節(jié)在前低位字節(jié)在后)

7、計算的數(shù)據(jù)幀,但以網(wǎng)絡序(低位字節(jié)在前高位字節(jié)在后)存放在內(nèi)存中。每一個16位的字中的字節(jié)在傳送過程中都交換了順序,在計算校驗和之后仍會先交換位置再存入內(nèi)存,這樣就與接受到的原本以網(wǎng)絡序存儲的數(shù)據(jù)幀中的校驗和項保持一致了。3.1.3 并進行計算某些機器的字處理長度是16位的倍數(shù),這樣可以提高它的計算速度。由于加法所具有的結(jié)合性,我們沒有必要按照順序?qū)γ總€字節(jié)進行累加。相反,我們可以利用這一特點對它們進行并行累加。并行地計算校驗和只是增加了每次累加的信息長度。例如,在一個323位的機器上,我們可以一次增加4個字節(jié),即A,B,C,D+。計算結(jié)束后再把累加和“折疊”起來,把一個32位的數(shù)值變?yōu)?6位

8、,這樣產(chǎn)生的新的進位也要循環(huán)累積起來。此外,在此仍不考慮字節(jié)順序的問題,我們可以用D,C,B,A+或B,A,D,C+;這樣的順序來計算校驗和,最終再通過交換16位校驗和中的字節(jié)序來得到正確的值。這些改變順序的方法都是為了讓所有的偶數(shù)字節(jié)進入一個校驗和字節(jié),所有的奇數(shù)字節(jié)進入一個校驗和字節(jié)。3.2 一些編碼技術(shù)可以提高校驗和的計算速度3.2.1延遲進位法這種方法在主要的累加循環(huán)結(jié)束之后再把進位累加進和值。其實現(xiàn)方式就是用32位的累加器獲得16位校驗和,這樣溢出就產(chǎn)生在高16位上。這種方法避免了累加器中進位傳感器機構(gòu)的設置,但是它要求的容量是原來的累加器容量的兩倍,因此它更多地依賴于硬件條件。3.

9、2.2反向循環(huán)法這種方法可以減少由循環(huán)而產(chǎn)生的負荷,有效地展開內(nèi)部的累加循環(huán),把循環(huán)過程中的一系列加法命令復制下來。這種技術(shù)通??梢怨?jié)省大量的時間,但是程序的邏輯設計會比較復雜。3.2.3合并數(shù)據(jù)拷貝法計算校驗和以及讀入數(shù)據(jù)都需要將數(shù)據(jù)從內(nèi)存的一個位置轉(zhuǎn)移到另一個位置,這樣會占用內(nèi)存總線的帶寬,而內(nèi)存總線的傳輸效率是提高校驗和計算速度的瓶頸,尤其是對于某些機器(如一些簡單的慢速的微型機)來說,這一問題尤為嚴重。為了解決這個問題,可以把數(shù)據(jù)讀入的過程與校驗的過程合二為一,也就是在讀入數(shù)據(jù)的同時計算校驗和,這樣就可以省去一次數(shù)據(jù)移動的過程,從而提高校驗和的計算速度。四.課程設計過程校驗和的計算過程

10、主要分為三個步驟:數(shù)據(jù)文件的輸入,校驗和的計算和校驗結(jié)果的輸出。其中,主要的是數(shù)據(jù)的輸入和校驗和的計算過程。4.1 數(shù)據(jù)的輸入方式輸入數(shù)據(jù)可能是以字符形式存儲的,而校驗和的計算則要采用數(shù)據(jù)形式,所以在從文件讀取數(shù)據(jù)時,都要進行字符到數(shù)據(jù)的相互轉(zhuǎn)換。1)將讀入的ASCII碼轉(zhuǎn)化為相應的整型變量。if(ch>=0&&<=9)ch-=0;elseif(ch>=a&&ch<=f)ch=ch-a+10;elseif(ch>=A&&ch<=F)ch=ch-A+10;2)在使用C+編程時直接使用16進制的方式打開輸入文件。I

11、fstream in(argv1,ios:nocreate);i.setf(ios:hex);4.2 校驗和的計算校驗和算法是本程序的核心部分,在2.5節(jié)中我們介紹了一些相關(guān)的算法,而應用最為普遍的是端循環(huán)進位法。端循環(huán)進位的算法如下:將數(shù)據(jù)按一定數(shù)位進行累加,最高位的進位則循環(huán)加入最低位。待校驗的數(shù)據(jù)按16位為一個單位相加,采用端循環(huán)進位,最后對所得16位的數(shù)據(jù)取反碼。因為待校驗的數(shù)據(jù)是以字節(jié)方式分隔的,所以為了方便,將16位的數(shù)據(jù)分成高8位和低8位分別處理。該算法的代碼如下:endaroundcarry(int &highyte,int &lowbyte)while(hig

12、hbyte>0xff|lowbyte>0xff)0 /高8位或低8位中的任何一方產(chǎn)生了溢出(進位)lowbyte+=(highbyte>>8); /低字節(jié)加上高字節(jié)超過8位的進位highbyte=highbutr&0xff; /清除高字節(jié)的進位highbyte+=(lowbyte>>8); /高字節(jié)加上來自低字節(jié)的進位lowbyte=lowbyte&0xff; /清除低字節(jié)的進位4.3 程序流程圖圖4-1給出了一個流程的參考方案。程序開始,初始化 ch,count,sum,checksum 從文件讀取一個字符 Ch=EOF? Ch= Ch轉(zhuǎn)換

13、為相應的8位數(shù)據(jù),count+ Count偶數(shù)? Ch低4位送入chr低四位 Ch低4位送入chr高4位得到chr 值 將32位sum折疊到16位 求sum反碼并輸出 結(jié)束 (count/2)%2=1? 得到sum Chr和sum低8位相加 Chr和sum高8位相加 Y Y Y Y N N N N 圖4-1 程序流程圖五.相關(guān)擴展前面我們提到,校驗和還有其他一些計算方法,下面我們就來簡要介紹以下利用延遲進位法進行計算的方法。延遲進位法的算法描述:將進位累加的過程延遲到整個累加循環(huán)結(jié)束之后進行,這樣可以提高計算速度。5.1 主要的實現(xiàn)過程while(!infile.eof()/判斷文件是否結(jié)束,

14、若否則對被校驗的16位數(shù)據(jù)進行累加int h, 1;/分別表示16位數(shù)據(jù)的高8位和低8位infile>>hex>>h;/從文件中讀入一個16進制表示的數(shù)據(jù),作為高8位if(infile.eof() l=0;/若后面沒有其他數(shù)據(jù),將0作為低8位else infile>>hex>>1;/若后面還有數(shù)據(jù),讀入下一個作為低8位sum+=(h*256+l);/將組合好的16位數(shù)據(jù)累加到sum中infile.close();/關(guān)閉文件check_sum=short(sum&0xffff)+(sum>>16);/將32位累加和轉(zhuǎn)換為16位數(shù)

15、據(jù)/若累加過程中有向高16位的進位,則要將進位部分加到低16位上check_sum=-check_sum;/對累加和取反碼5.2 程序流程圖圖4-2給出了一個相關(guān)擴展的流程圖。開始 命令行輸入正確? 創(chuàng)建輸入文件流,打開指定輸入文件,32位累加器sum置0文件結(jié)束? 讀入下一個字節(jié)數(shù)據(jù)作為高8位后面還有數(shù)據(jù)? 讀入下一個字節(jié)數(shù)據(jù)作為低8位將組合好的16位數(shù)據(jù)加到sum中歐輸出格式提示 退出 關(guān)閉文件 取sum的低16位sum&oxffff Sum高16位為0? 將sum高16位數(shù)據(jù)sum>>16加到低16位上對所得數(shù)據(jù)取反,即為check_sum 輸出check_sum 結(jié)

16、束 Y 低8位置0N N N Y Y N 圖4-2 相關(guān)擴展的流程圖六.編程實現(xiàn)6.1 程序源代碼/在E盤新建一個文本文檔,命名為1.txt(這一步非常重要)#include<stdio.h>#include<stdlib.h>void main(int argc,char *argv)/¼ÆËãУÑéºÍFILE *fp;char ch;unsigned char chrl,chrh;unsigned int count=0,checksum=0,chr=0;unsi

17、gned long int sum=0;if(fp=fopen("E:1.txt","r")=NULL)printf("nn File can't be opened£¡");exit(1);printf("nnthe type of output:data-sumnn");while(1)if(ch=fgetc(fp)!=EOF)count+;if(ch!=' ')if(count%12=0)printf("n");if(ch>='0&

18、#39;&&ch<='9')ch-='0'elseif(ch>='a'&&ch<='f')ch=ch-'a'+10;elseif(ch>='A'&&ch<='F')ch=ch-'A'+10;if(count%2=1)chrh=ch<<4;elsechrl=ch&0x0f;chr=chrh|chrl;if(count%4=2)sum+=chr<<8;elseif

19、(count%4=0)sum+=chr;printf("%x-%1x ",chr,sum);elsecount-;elsebreak;if(sum>>16)checksum=(long(sum>>16)+long(sum&0x0000ffff);checksum=checksum&0x0000ffff;printf("nnsum:%1x-checksum:%x",sum,checksum);printf("nnsource:argc=%d,targv=%sn",argc,argv1);fclos

20、e(fp);七.程序的調(diào)試及分析程序運行結(jié)果如下:圖7-1運行結(jié)果示意圖在E盤下建立的1.txt文檔的內(nèi)容如下:圖7-2 1.txt遇到的問題:在調(diào)試程序的過程中,我遇到了不少的問題,比如在E盤沒有新建一個文本文檔時,這時系統(tǒng)會提示“內(nèi)存不能為read”,而在E盤新建了一個文件夾后,就會顯示上圖所示的結(jié)果。由于該程序比較短,所以實現(xiàn)的結(jié)果就比較簡單。后來還發(fā)現(xiàn)計算checksum時出了一點點小錯誤,但是經(jīng)過改正得到了解決。解決辦法:通過向同學詢問請教,自己查閱相關(guān)的資料以及上網(wǎng)百度,解決了該問題。八.課設計小結(jié)本次計算機網(wǎng)絡課程設計維持了一周的時間,通過這次的課程設計,使我對網(wǎng)絡協(xié)議中校驗和的設置與計算有了很好的理解與掌握,拓寬了我網(wǎng)絡方面的知識,同時也加強了我程序設計的能力,不得不說這次的課程設計讓我收獲很大。本次課程設計主要是完成校驗和的計算,由于之前對這方面的知識了解不是很多,所以在課設剛開始的我們都不知道從何入手,隨后我結(jié)合老師發(fā)給我們的資料對校驗和做了進一步的了解,才對校驗和的知識有了一定的掌握,并且知道了設置校驗和的作用。計算校驗和的算法其實就是把被校驗的數(shù)據(jù)按16位進行累加,然后取反碼。若數(shù)據(jù)字節(jié)長度為奇數(shù),則在數(shù)據(jù)尾

溫馨提示

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

評論

0/150

提交評論