欢迎来到天天文库
浏览记录
ID:12964866
大小:33.79 KB
页数:11页
时间:2018-07-19
《ieee802 3以太网帧的封装》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、IEEE8023以太网帧的封装一、需求分析通过程序完成以太网帧的封装,首先,要有友好的界面提示用户输入帧的相关信息,包括前导码、帧前定界符、目的MAC地址、源MAC地址、长度字段、数据以及校验字段,它们的长度和顺序见下面:前导码帧前定界符(SFD)目的地址(DA)源地址(SA)长度字段(L)数据字段(LLCPDU)校验字段(FCS)7B1B(2/6B)(2/6B)(2B)(长度可变)(4B)其次,用户以十六进制形式输入帧的每个部分,要严格控制每个字段的长度,界面清晰明了。最后,程序求出数据字段的长度,并通过CRC算法求出校验字段,把帧的每个部分按照
2、规定的字节数封装起来,然后显示在界面上。二、概要设计程序输入的是十六进制的数据,所以首先要把界面提取的帧的信息转换成二进制,即把每一位十六进制数转换成四位二进制码,基本操作就是把每一位进行四次模2运算,得到它的四位二进制。然后对数据部分的处理,如果用户输入的数据不够46个字节,那么程序要在后面补0,补够46个字节。得到数据部分的长度,转换成两个字节的二进制,程序最关键的就是通过CRC算法求帧的校验字段,然后把它补够4个字节,加在帧的末尾。三、详细设计程序的CRC算法的实现:CStringCMyDlg:Fcs(CStringa,CStringb){f
3、or(inti=0;ib.GetLength()-1;i++)a+="0";intm[10000],n[10000];intma=a.GetLength();intmb=b.GetLength();for(i=0;ima;i++){if(a.GetAt(i)=='0')m[i]=0;elseif(a.GetAt(i)=='1')m[i]=1;}for(i=0;imb;i++){if(b.GetAt(i)=='0')n[i]=0;elseif(b.GetAt(i)=='1')n[i]=1;}intd[10000];for(i=0;ima-mb+1;i
4、++){d[i]=m[i];for(intj=1;jmb;j++){if(m[i]==0){m[j+i]=!m[j+i]&0
5、m[j+i]&1;}elsem[j+i]=!m[j+i]&n[j]
6、m[j+i]&!n[j];}}CStringabc="";for(i=ma-mb+1;ima;i++){if(m[i]==0)abc+="0";elseif(m[i]==1)abc+="1";}intdc=abc.GetLength();if(abc.GetLength()8){for(i=0;i8-dc;i++){abc=abc+"0";}}CString
7、ba="";for(i=0;iabc.GetLength();i++){if(abc.GetAt(i)=='0')ba+="0";elseba+="1";if((i+1)%8==0)ba+="";}returnba;}十六进制串转换为二进制串的代码:CStringCMyDlg:change(CStringpt){CStringpp="";for(inti=0;ipt.GetLength();i++){inta=pt.GetAt(i);if(a='0'&&a='9'
8、
9、a='a'&&a='f'
10、
11、a='A'&&a='F'){if(a='0'&&a='
12、9')a=a-48;if(a='a'&&a='f')a=a-87;if(a='A'&&a='F')a=a-55;intb[4];for(intj=0;j4;j++){b[j]=a%2;a=a/2;}for(j=3;j=0;j--){if(b[j]==0)pp+="0";elsepp+="1";}}}returnpp;}响应button按钮然后进行帧封装的函数:voidCMyDlg:Oncreate(){//TODO:AddyourcontrolnotificationhandlercodehereCStringqian="aaaaaaaaaaaaa
13、a";//前导码7个字节CStringding="ab";//帧前定界符1个字节pt="";if(CheckEditBox()){pt+=m_m1+m_m2+m_m3+m_m4+m_m5+m_m6+m_y1+m_y2+m_y3+m_y4+m_y5+m_y6;//目的MAC地址源MAC地址CStringlength="";longlgh=m_data.GetLength()/2;if(lgh1500){MessageBox("数据字段不能超过1500个字符!");m_Data.SetFocus();}else{longlh=lgh;for(inti=
14、0;i16;i++)//把数据长度转换为两个字节(16个二进制位){if(lh%2==0){length="0"+leng
此文档下载收益归作者所有