計算機網絡課程設計報告幀封裝_第1頁
計算機網絡課程設計報告幀封裝_第2頁
計算機網絡課程設計報告幀封裝_第3頁
計算機網絡課程設計報告幀封裝_第4頁
計算機網絡課程設計報告幀封裝_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、哈爾濱理工大學計算機科學與技術學院網絡系實驗室 實驗報告成績:課程設計報告課程名稱:計算機網絡課程設計設計題目:幀封裝姓 名:專 業:計算機科學與技術班 級:計算機13-3班學 號:計算機科學與技術學院2016年 1 月 1 日設計項目:幀封裝一、 選題背景 以太網這個術語通常是指由dec、intel和xerox公司在1982年聯合公布的一個標準,它是當今tcp/ip采用的主要的局域網技術,它采用一種稱作csma/cd的媒體接入方法。在tcp/ip世界中,以太網ip數據報文的封裝在rfc894中定義。 以太網采用廣播機制,所有與網絡連接的工作站都可以看到網絡上傳遞的數據。通過查看包含在幀中的目

2、標地址,確定是否進行接收或放棄。如果證明數據確實是發給自己的,工作站將會接收數據并傳遞給高層協議進行處理。以太網采用csma/cd(carriersensemultipleaccess/collisiondetection)媒體訪問機制,任何工作站都可以在任何時間訪問網絡。在以太網中,所有的節點共享傳輸介質。如何保證傳輸介質有序、高效地為許多節點提供傳輸服務,就是以太網的介質訪問控制協議要解決的問題。 幀是在數據鏈路層數據進行傳輸與交換的基本單位。構造幀對于理解網絡協議的概念、協議執行過程以及網絡問題處理的一般方法具有重要的意義。本次課程設計的目的是應用數據鏈路層與介質訪問控制層的知識,根據數

3、據鏈路層的基本原理,通過構造一個具體的ethernet幀,從而深入理解網絡協議的基本概念與網絡問題處理的一般方法。二設計思路 數據在網絡上是以很小的稱為幀(frame)的單位傳輸的,幀由幾部分組成,不同的部分執行不同的功能。幀通過特定的稱為網絡驅動程序的軟件進行成型,然后通過網卡發送到網線上,通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的以太網卡捕獲到這些幀,并告訴操作系統幀已到達,然后對其進行存儲。 “幀”數據大致由兩部分組成:幀頭和幀數據。幀頭包括接收方主機物理地址的定位以及其它網絡信息。幀數據區含有一個數據體。為確保計算機能夠解釋數據幀中的數據,這兩臺計算機使用

4、一種公用的通訊協議?;ヂ摼W使用的通訊協議簡稱ip,即互聯網協議。ip數據體由兩部分組成:數據體頭部和數據體的數據區。數據體頭部包括ip源地址和ip目標地址,以及其它信息。數據體的數據區包括用戶數據協議(udp),傳輸控制協議(tcp),還有數據包的其他信息。這些數據包都含有附加的進程信息以及實際數據以802.3的幀結構由六部分組成:常用的以太網mac幀格式用兩種標準,一種是dixethernetv2標準(即以太網v2標準),另一種是ieee的802.3標準。這里只介紹符合ieee802.3標準的幀,其格式如上圖所示。 它的組成比較簡單,由6個字段組成。接下來對這6個部分詳細介紹一下。(1)前導

5、符:由7字節的前同步碼和1字節的幀起始定界符構成。 前同步碼:這個字段有7個字節(56位)交替出現的1和0,它的作用就是提醒接收系統有幀的到來,以及使到來的幀與計時器進行同步。前同步碼其實是在物理層添加上去的,并不是(正式的)幀的一部分。前同步碼的目標是允許物理層在接收到實際的幀起始符之前檢測載波,并且與接收到的幀時序達到穩定同步。 幀起始定界符:這個字段用1字節(10101011)作為幀開始的信號,表示一幀的開始。最后兩位是11,表示下面的字段是目的地址。(2)目的地址(da) 48位,表示幀準備發往目的站的地址,共6個字節,可以是單址(代表單個站)、多址(代表一組站)或全地址(代表局域網上

6、的所有站)。 當目的地址出現多址時,表示該幀被一組站同時接收,稱為“組播”(multicast)。目的地址出現全地址時,表示該幀被局域網上所有站同時接收,稱為“廣播”(broadcast),通常以da的最高位來判斷地址的類型,若第一字節最低位為“0”則表示單址,第一字節最低位為“1”則表示組播。 (3)源地址(sa)48位,表明該幀的數據是哪個網卡發的,即發送端的網卡地址。 (4)該字段是“長度/類型”。當這個字段的值大于0x0600時(相當于十進制的1536),就表示“類型”。這樣的幀和以太網v2 mac幀完全一樣。只有當這個字段的值小于0x0600時才表示“長度”,即mac幀的數據部分長度

7、。 (5)數據字段 最小長度必須為46字節以保證幀長至少為64字節,這意味著傳輸一字節信息也必須使用46字節的數據字段:如果填入該字段的信息少于46字節,該字段的其余部分也必須進行填充。數據字段的默認最大長度為1500字節。 (6)幀檢驗序列(fcs)32位冗余檢驗碼(crc),檢驗除前導、sfd和fcs以外的內容。當發送站發出幀時,一邊發送,一邊逐位進行crc檢驗。最后形成一個32位crc檢驗和填在幀尾fcs位置中一起在媒體上傳輸。接收站接收后,從da開始同樣邊接收邊逐位進行crc檢驗。最后接收站形成的檢驗和若與幀的檢驗和相同,則表示媒體上傳輸幀未被破壞。反之,接收站認為幀被破壞,則會通過一

8、定的機制要求發送站重發該幀差錯檢驗:在校驗字段中,使用的是crc校驗。校驗的范圍包括目的地址字段、源地址字段、長度字段、llc數據字段。 循環冗余編碼(crc)是一種重要的線性分組碼、編碼和解碼方法,具有簡單、檢錯和糾錯能力強等特點,在通信領域廣泛地用于實現差錯控制。crc校驗碼的檢錯能力很強,不僅能檢查出離散錯誤,還能檢查出突發錯誤。利用crc進行檢錯的過程可簡單描述如下:在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個校驗用的r位監督碼(crc碼),附在原始信息的后邊,構成一個新的二進制碼序列(共k+r位),然后發送出去。在接收端,根據信息碼和crc碼之間所遵循的規則進行檢驗,以

9、確定傳送中是否出錯。這個規則在差錯控制理論中稱為“生成多項式”。 循環冗余校驗碼的特點:(1)crc校驗碼可檢測出所有單個錯誤。 (2)crc校驗碼可檢測出所有奇數位錯誤。 (3)crc校驗碼可檢測出所有雙位的錯誤。 (4)crc校驗碼可檢測出所有小于、等于校驗位長度的突發錯誤。 (5)crc校驗碼可以的概率檢測出長度為(k+1)位的突發錯誤。三主要問題的解決方法和關鍵技術1. 填充幀頭部字段要完成一次幀封裝的過程,首先要完成的就是幀頭部的裝入,將前導碼、定界符、目的地址、源地址、長度字段的相應數值寫入。長度字段的值即為要發送的數據的實際長度。我們通過下面的方式獲得長度字段:22 ifstre

10、am infile;23 infile.open(argv1, ios:binary);24 infile.seekg(0, ios:end);25 short length = (short) infile.tellg();26 file.put(char(length/256);27 file.put(char(length%256);2. 填充數據字段如果數據字段長度小于46b,填充0補足,超過1500b把超過的部分裝入下一幀發送。if (length 46) for (int i = 0; i 0; i=1)53 54 / printf(-nihao);55 if (crc&0x80)

11、56 57 crc = 1;58 if (temp&i) crc = 0x01;59 60 crc = 0x07;61 62 else63 64 crc 1; if(a) regs.val=0x8408;2.字節型算法數字通信系統一般是對一幀數據進行crc校驗,而字節是幀的基本單位。最常用的是一種按字節查表的快速算法。該算法基于這樣一個事實:計算本字節后的crc碼,等于上一字節crc右移8位和本字節之和再與上一字節余式crc碼的低8位左移8位相加后所求得的crc碼。如果我們把8位二進制序列數的crc全部計算出來,放在一個表里,那么編碼時只要從表中查找對應的值進行處理即可。算法如下:1)寄存器組

12、初始化為全1。2)寄存器組向右移動一個字節。3)剛移出的那個字節與數據字節進行異或運算,得出一個指向值表的索引。4)將索引所指的表值與寄存器組做異或運算。5)數據指針加1,如果數據沒有全部處理完,則重復步驟2.6)寄存器組取反,得到crc,附加在數據之后。驗證算法:1)寄存器組初始化為全1.2)寄存器組向右移動一個字節。3)剛移出的那個字節與數據字節進行異或運算,得出一個指向值表的索引。4)將索引所指的表值與寄存器組做異或運算。5)數據指針加1,如果數據沒有全部處理完,則重復步驟2.6)判斷寄存器組的值是否等于“magicvalue”,若相等則通過,7)否則失敗。填充數據字段在填充數據字段的過

13、程中要注意的主要問題是數據字段的長度。802.3標準中規定了幀數據字段的最小長度為46b,最大長度為1500b。如果數據不足46b,則需要通過填充0來補足;若數據長度超過1500b,則將超過部分封裝入下一個幀進行發送。由于幀頭部分應該包括6b目的地址、6b源地址、2b長度字段以及4b幀校驗字段,因此幀頭部分長度為18b。前導碼與幀前定界符不計入幀頭長度中。那么,ethernet幀的最小長度為64b,最大長度為1518b。填充數據字段的代碼如下:if(len=1500)len=0;if(len46)for(i=len;i46;i+)fr.datai=0x00;data_len=len;四程序流程

14、圖crc計算流程圖:五原程序清單1 #include 2 #include 3 using namespace std; 4 int main(int argc, char* argv) 5 6 if (argc != 3) 7 8 cout “framer inputfile outputfile endl; 9 return 0;10 11 fstream file;12 file.open(argv2, ios:in|ios:out|ios:binary|ios:trunc);13 for (int i = 0; i 7; +i) file.put(char(0xaa);14 file.

15、put(char(0xab);15 long pcrcs = file.tellp();16 char dst_addr6 = char(0x00), char(0x00),char(0xe4), char(0x1a), char(0xe6), char(0x65);17 file.write(dst_addr, sizeof(dst_addr);18 char src_addr6 = char(0x00), char(0x00),char(0x80), char(0x1a), char(0xe6), char(0x65);19 file.write(src_addr, sizeof(src_

16、addr);20 21 22 ifstream infile;23 infile.open(argv1, ios:binary);24 infile.seekg(0, ios:end);25 short length = (short) infile.tellg();26 file.put(char(length/256);27 file.put(char(length%256);28 29 char* data = new charlength;30 infile.seekg(0, ios:beg);31 infile.read(data, length);32 33 file.write(

17、data, length);34 35 infile.close();36 delete data;37 38 if (length 46) for (int i = 0; i 0; i=1)53 54 / printf(-nihao);55 if (crc&0x80)56 57 crc = 1;58 if (temp&i) crc = 0x01;59 60 crc = 0x07;61 62 else63 64 crc = 1;65 if (temp & 1 ) crc = 0x01;66 67 68 69 /printf(n-%xn, crc);70 file.seekp(pcrc, ios

18、:beg);71 file.put(crc);72 /printf(nihao);73 74 /*file.seekg(0, ios:beg);75 while (!file.eof()76 77 char temp;78 file.get(temp);79 cout hex (short) temp endl;80 */81 82 cout argv2 endl;83 file.close();84 return 0;85 六程序運行結果cmd運行界面:輸入文件:in.txt輸出文件:out.txt:前7b的0xaa為前導碼,之后0xab為是幀前定界符,之后2個6b字段分別為目的地址和源地址(mac),之后的0x00、0x0c標志數據字段長度。之后46b為數據字段。最后一個字節為crc冗余校驗的檢驗字段。七設計總結最開始編程的時候,沒有完全掌握好幀的七個組成部分,在進行封裝的時候因為缺少了其

溫馨提示

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

評論

0/150

提交評論