Ethernet帧结构解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络实验
学院:计算机科学与信息工程学院
班级:
学号:
2
姓名:
实验1 Ethernet帧结构解析
1. 需求分析
实验目的:掌握Ethernet帧各个字段的含义与帧接收过程;
掌握Ethernet帧解析软件设计与编程方法;
掌握Ethernet帧CRC校验算法原理与软件实现方法。
实验任务:实现帧解析的软件编程
实验环境:1台PC机
操作系统:Windows 7
开发环境:Visual Studio 2010。
1.1问题重述
根据给出的IEEE802.3格式的Ethernet帧结构,编写程序来解析并显示帧的各个字段值,并将得到的数据字段值组合写入输出文件。Ethernet帧数据从输入文件获得,默认文件为二进制数据文件。
2概要设计
2.1原理概述
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如Ethernet,令牌环网,FDDI(Fiber Distributed Data Interface,光纤分布式数据接口)等。基于不同的硬件的网络使用不同形式的帧结构,Ethernet是当今应用最广泛的局域网技术。
Ethernet V2.0的帧结构:
1.前导码和帧前定界符。
字段前导码由56位(7B)的101010...1010比特序列组成,帧前定界符由一个8位的字节组成,其比特序列为10101011。
如果将前导码与帧前定界符一起看,那么在62位101010...1010比特序列之后出现11。在这个11之后便是Ethernet帧的目的地址字段。从Ethernet物理层角度看,接收电路从开始接收比特到进入稳定状态,需要一定的时间。设计前62位1和0的交替比特序列的目的是保证接收电路在帧的目的地址到来之前到达正常状态。接收端在收到最后两位11时,标志在他之后应该是帧的目的地址。前导码与帧前定界符主要起到接收同步的作用,这8个字节接收后不需要保留,也不计入帧头长度。
2.目的地址和源地址。
目的地址与源地址分别表示帧的接收节点与发送节点的硬件地址。硬件地址一般称作MAC地址,物理地址或Ethernet地址。地址长度为6B(即48位)。为了方便起见,通常使用十六进制数字书写。
Ethernet帧的目的地址可分为3种:
●单播地址(unicast address):目的地址的第一位为0表示单播地址。
目的地址是单播地址,则表示该帧只被与目的地址相同的节点所接收
●多播地址(multicast address):目的地址第一位为1表示多播地址。
目的地址是多播地址,则表示该帧被一组节点所接收。
●广播地址(broadcast address):目的地址全为1表示广播地址。目的
地址是广播地址,则表示该帧被所有所有节点接收。
3.类型字段
类型字段表示的是网络层使用的协议类型。常见的协议类型:0800表示网络层使用IP 协议,0806表示网络层使用ARP 协议,8137表示网络层使用Novell IPX 协议,809b 表示网络层使用Apple Talk 协议。
4. 数据字段
IEEE 802.3协议规定数据的长度在46~1500B 之间。如果数据的长度少于46B ,需要加填充字节,补充到46B 。填充字节是任意的,不计入长度字段中。 帧头部分长度为18B ,包括6B 的目的地址字段,6B 的源地址字段,2B 的类型字段和4B 的帧校验和字段,而前导码与帧前界定符不计入帧头长度中,那 么,Ehternet 帧的最小长度为64B (46B+18B ),最大长度为1518B (1500B+18B )。设置最小帧长度的一个目的是使每个接收节点 能够有足够的时间检测到冲突
5. 帧校验字段
帧校验字段FCS 采用32位CRC 校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。在接收端进行校验,如果发现错误,帧将被丢弃。8位CRC 校验的生成多项式为:
1)(128+++=x x x x G
2. 2主要问题
问题一:文件的读写操作
由于Ethernet 帧数据需要从输入文件获得,而数据字段内容也需要写入输出文件,因此首先要完成对文件的相关操作。
问题二:解析帧的头部字段
在完成Ethernet 帧解析的过程中,首先要进行的是帧头部的解析。这是只需将前导码、帧前定界符、目标地址、眼地址、长度字段的值,根据每个字段的规定长度依次读取。
问题三:解析数据字段
在进行帧的数据字段的解析过程中,需要注意的问题是数据字段的长度。IEEE802.3标准规定帧数据字段的最小长度为46字节,最大长度为1500字节。如果数据长度小于46字节,需要填充“0”来补足46字节,但这些“0”不计入长度字段。
3 详细设计
#include"stdafx.h"
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if(argc!=3)
{
cout< //return 1; } fstream outfile; outfile.open(argv[2],ios::in|ios::out|ios::binary|ios::trunc); fstream infile; infile.open(argv[1],ios::in|ios::binary/*|ios::trunc*/); if(!infile.is_open()) { cout< return 1; } bool bframe=1; int nframes=0; int nframenum=0; int nframelen=0; while(bframe)