模拟以太网帧的发送.docx
《模拟以太网帧的发送.docx》由会员分享,可在线阅读,更多相关《模拟以太网帧的发送.docx(14页珍藏版)》请在冰豆网上搜索。
模拟以太网帧的发送
软件学院综合训练项目报告
模拟以太网帧的发送与解析
专业
班级
姓名
学号
1、训练目的
1.掌握以太网mac帧的发送与解析过程。
2.巩固以太网的相关知识。
3.通过训练以太网中mac帧的发送与解析,更加深刻理解局域网知识。
2、训练方案
1.原理
1)载波侦听过程。
Ethernet中每个结点利用总线发送过程,总线是每个结点共享的公共传输介质。
所以结点在发送一个帧前,必须侦听总线是否空闲。
由于Ethernet的数据采用曼彻斯特方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。
若总线空闲,就可以启动发送,否则继续侦听。
2)冲突检测。
在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号波形与任何发送结点输出的信号波形不相同。
因为可能有多个主机都在侦听总线,当它们侦听到总线空闲时,都会往总线上发送数据)。
所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该停止发送数据。
3)随机延迟后重发。
在检测到冲突、停止发送后,结点进行随机延迟后重发。
若重发16次后还没成功,则宣告发送失败,取消该帧的发送。
随机延迟的计算方法一般采用截止二进制指数后退算法。
该算法可表示为:
τ=2k*R*a。
其中τ为结点重新发送需要的后退延迟时间,a为冲突窗口值(冲突窗口为总线最大长度和电磁波在介质中的传播速度比值的2倍),R为随机数,k的取值为k=min(n,10),n为该帧已被发送的次数。
下图给出了Ethernet帧的发送流程。
2.以太网
1)以太网:
以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。
以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以特定速率运行在多种类型的电缆上。
2)以太网的分类:
数据速率为10Mbps的以太网称为标准以太网,数据速率为100Mbps的以太网称为快速以太网,数据速率为1000Mbps的以太网称为千兆以太网。
3)以太网的媒体访问控制:
CSMA/CD(带有冲突检测的载波侦听多路访问)
在CSMA中,由于信道传播时延的存在,即使总线上两个站点没有监听到载波信号而发送帧时,仍可能会发生冲突。
由于CSMA算法没有冲突检测功能,即使冲突已发生,仍然将已破坏的帧发送完,使总线的利用率降低。
CSMA/CD是一种CSMA的改进方案。
发送站点在传输过程中仍继续监听媒体,以检测是否存在冲突。
如果发生冲突,信道上可以检测到超过发送站点本身发送的载波信号的幅度,由此判断出冲突的存在。
一旦检测到冲突,就立即停止发送,并向总线上发一串阻塞信号,用以通知总线上其它各有关站点。
这样,通道容量就不致因白白传送已受损的帧而浪费,可以提高总线的利用率。
2.MAC帧
1)以太网的MAC帧格式
以太网的MAC帧格式有两种标准,一种是DIXEthernetV2标准,另一种是IEEE的802.3标准。
但两种帧格式可以在同一以太网络共存。
两种帧格式都具有7个域:
前导码、帧首定界符、目的地址、源地址、长度/类型、数据、帧校验序列。
如下图所示。
7
1
6
6
2
46-1500
4
前导码
帧首定界符
目的地址
源地址
类型/长度
数据
帧校验序列
3.MAC帧的解析方案
1)模拟(vc6)
在MicrosoftVisualC++V6环境下用C++程序代码模拟MAC帧的发送解析。
2)CMSA/CD仿真
在WINDOS环境下利用ipv4,进行CMSA/CD仿真,实现MAC帧的发送。
3)抓包软件
利用软件进行MAC帧的发送解析模拟。
4.训练方案
利用上述方法对MAC帧的发送解析进行模拟。
3、训练内容
1.模拟(VC6)
1)编写C++程序代码
1 校验部分
voidcheckCRC(int&chCurrByte,intchNextByte)
{
//CRC循环:
每次调用进行8次循环,处理一个字节的数据。
for(intnMask=0x80;nMask>0;nMask>>=1)
{
if((chCurrByte&0x80)!
=0)//首位为1:
移位,并进行异或运算
{
chCurrByte<<=1;//移一位
if((chNextByte&nMask)!
=0)//补一位
{
chCurrByte|=1;
}
chCurrByte^=7;//首位已经移出,仅对低8位进行异或运算,7的二进制为0000,0111
}
else//首位为0,只移位,不进行异或运算
{
chCurrByte<<=1;//移一位
if((chNextByte&nMask)!
=0)//补一位
{
chCurrByte|=1;
}
}
}
}
2 文件检测部分
intargc,
char*argv[]
//检测命令行参数的正确性
if(argc!
=2)
{
cout<<"请以帧封装包文件为参数重新执行程序"<exit(0);
}
//检测输入文件是否存在,并可以按所需的权限和方式打开
ifstreamfile(argv[1],ios:
:
in|ios:
:
binary|ios:
:
nocreate);
if(!
file.is_open())
{
cout<<"无法打开帧封装包文件,请检查文件是否存在并且未损坏"<exit(0);
}
3 数据检索部分
intnSN=1;//帧序号
intnCheck=0;//校验码
intnCurrDataOffset=22;//帧头偏移量
intnCurrDataLength=0;//数据字段长度
boolbParseCont=true;//是否继续对输入文件进行解析
intnFileEnd=0;//输入文件的长度
//计算输入文件的长度
file.seekg(0,ios:
:
end);//把文件指针移到文件的末尾
nFileEnd=file.tellg();//取得输入文件的长度
file.seekg(0,ios:
:
beg);//文件指针位置初始化
cout.fill('0');//显示初始化
cout.setf(ios:
:
uppercase);//以大写字母输出
//定位到输入文件中的第一个有效帧
//从文件头开始,找到第一个连续的“AA-AA-AA-AA-AA-AA-AA-AB”
while(true)
{
for(intj=0;j<7;j++)//找7个连续的0xaa
{
if(file.tellg()>=nFileEnd)//安全性检测
{
cout<<"没有找到合法的帧"<file.close();
exit(0);
}
//看当前字符是不是0xaa,如果不是,则重新寻找7个连续的0xaa
if(file.get()!
=0xaa)
{
j=-1;
}
}
if(file.tellg()>=nFileEnd)//安全性检测
{
cout<<"没有找到合法的帧"<file.close();
exit(0);
}
if(file.get()==0xab)//判断7个连续的0xaa之后是否为0xab
{
break;
}
}
//将数据字段偏移量定位在上述二进制串之后14字节处,并准备进入解析阶段
nCurrDataOffset=file.tellg()+14;
file.seekg(-8,ios:
:
cur);
//主控循环
while(bParseCont)//当仍然可以继续解析输入文件时,继续解析
{
//检测剩余文件是否可能包含完整帧头
if(file.tellg()+14>nFileEnd)
{
cout<file.close();
exit(0);
}
4 判断输出部分
从整体数据中依次输出帧的序号、前导码、帧前界定符、目的地址、原地址、类型字段、数据字段、CRC校验及状态。
2)input二进制文件
2.CSMA/CD仿真
1)配置训练环境
Ipv4网络拓扑搭建
确保各主机之间通信连接正常
2)编辑并发送MAC广播帧
主机E启动仿真编辑器。
主机E编辑一个MAC帧,
目的MAC地址:
FFFFFF-FFFFFF。
源MAC地址:
主机E的MAC地址。
协议类型或数据长度:
大于0x0600。
数据字段:
编辑长度在46—1500字节之间的数据。
主机A、B、C、D、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机E的MAC地址)。
主机E发送已编辑好的数据帧。
主机A、B、C、D、F上停止捕获数据,察看捕获到的数据中是否含有主机E所发送的数据帧。
3)再次仿真实验,理解MAC帧的发送与解析。
3.抓包软件
1)下载并安装wireshark网络抓包软件。
2)利用该软件实现MAC帧的发送解析模拟。
4、训练项目测试
1.模拟(VC6)运行测试
1)启动CMD
2)将执行文件与input文件拷贝至指定文件夹,并运行
3)运行结果
2.CSMA/CD仿真运行测试
3.抓包软件运行测试
五、结论
本次训练主要是对以太网MAC帧的发送与解析过程进行模拟,以太网(Ethernet)指的是开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。
以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以特定速率运行在多种类型的电缆上。
CSMA/CD即带冲突检测的载波监听多路访问技术。
在传统的共享以太网中,所有的节点共享传输介质。
保证传输介质有序、高效地为许多节点提供传输服务,是以太网的介质访问控制协议要解决的问题。
MAC帧是数据帧的一种。
而所谓数据帧,就是数据链路层的协议数据单元,它包括三部分:
帧头,数据部分,帧尾。
其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据。
本次模拟分别运用3种方式进行,第一种是在vc6环境下通过程序实现,这种模拟局限性比较大,第二种是常见的在实验室环境下通过ipv4网络拓扑环境进行实时仿真,这种比较麻烦,工作量比较大,第三种是通过软件模拟,这种仿真更真实。
本次训练涉及到网络,局域网,以太网的相关知识,通过灵活运用,融会贯通,才能更好的实现训练目标。
六、心得体会
这次的项目主要是研究模拟以太网mac帧的发送与解析,其中CSMA/CD协议是一种很重要的协议,其主要思想就是当一个节点发送数据时,首先监听信道,如果信道空闲就发送数据,并且继续监听;如果在数据发送过程中监听到了冲突,则立刻停止数据发送,等待一段随机的时间后,并重新开始尝试发送数据。
在本次试验中,考验了我们的学习水平与动手能力。
也在本次试验中更加加深了对局域网知识的理解,但有很大的学习空间。