- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机网络课程设计模以太网帧封装
课程设计报告
课程设计题目:
模拟以太网帧封装
专 业:信息工程
班 级:1122301
姓 名:
学 号:
指导教师:
2013年 12 月20日
目 录
1.设计任务和目的 2
1.1 课程设计任务 2
1.2 课程设计目的 2
2.设计原理 2
2.1 802.3标准帧结构 2
2.2 CRC的基本实现 3
3.设计实现 4
3.1 设计思路 4
3.1.1 填充帧头部字段 4
3.1.2填充数据字段 4
3.1.3 计算填充CRC 4
3.2 流程图 5
3.2.1 程序流程图 6
3.2.2 CRC计算流程图 7
4.程序源码 8
5.运行结果 10
6.总结体会 11
1.设计任务和目的
1.1课程设计任务
根据给出的原始数据,组装一个IEEE802.3格式的帧。默认的输入文件为二进制原始数据。封装得到的帧输出到二进制数据文件中。
1.2课程设计目的
(1)使学生掌握网络通信协议的基本工作原理;
(2)培养学生基本掌握网络编程的基本思路和方法;
(3)能提高学生对所学计算机网络理论知识的理解能力;
(4)能提高学生对所学知识的实际应用能力和创新能力;
(5)提高学生的科技论文写作能力。
2.设计原理
2.1 802.3标准帧结构
以太网Ethernet帧格式:
前序(P) 目的地址(SD) 源地址(SA) 数据 FCS 8 B 6B 6B 2B 46~1500B 4B ?
前序字段
前序字段由个字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步
2.帧起始定界符字段
它可以被看作前序字段的延续。实际上,该字段的组成方式继续使用前序字段中的格式,这个一个字节的字段的前6个比特位置由交替出现的1和0构成。该字段的最后两个比特位置是11,这两位中断了同步模式并提醒接收后面跟随的是帧数据。
目的地址字段
目的地址字段确定帧的接收者。6个字节的源地址和目的地址字段局域网中的所有工作站必须使用同样的地址结构。源地址字段
源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。
长度字段
用于IEEE802.3的两字节长度字段定义了数据字段包含的字节数。从前序 到FCS字段的帧长度最小必须是64字节。基于最小帧长为64字节和使用六字节地址字段的要求,意味着每个数据字段的最小长度为46字节。如果传输数据少于46个字节,应将数据字段填充至46字节。不过,填充字符的个数不包括在长度字段值中数据字段的最大长度为1500字节数据字段
数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段:如果填入该该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。
校验序列字段
将计算出的CRC填入的FCS字段。帧校验序列字段提供了一种错误检测机制,包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。int length=0;
infile.seekg(0,ios::end);//将读指针移到文件末尾。//计算指针偏移量,即为输入文件的长度
length=infile.tellg();//创建字符指针并根据文件长度初始化
unsigned char* data=new unsigned char[length];
infile.seekg(0,ios::beg);//将读指针移到文件开始。//将文件数据读入到字符指针data中
infile.read(data,length);
将data内容写入到输出文件中file.write(data,length);
3.1.2 填充数据字段
在数据字段中,数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将数据字段填充至46B。填充字符是任意的,不计入长度字段值中。在程序中是用一下方法实现的:
//如果输入文件长度不足B,则用补足B
if(length46)
{
for(int j=length;j46;j++)
file.put(char(0x00));
}
3.1.3计算填充CRC
帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。本程序中实现的是CRC-8校验算法,即多项式G(x)=x^8+x^2+x+1,方法如下所示:
file.put(char(0x00));//数据后补1B的0,用于crc计算 file.seekg(8,ios::beg);//将读指针指向目的地址字段,从此处开始CRC计算
unsigned char ch;//ch用来保存读入的字符。
unsigned char crc=ch
文档评论(0)