《计算机网络课程设计报告帧封装》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告帧封装(17页珍藏版)》请在金锄头文库上搜索。
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、一种公用的通讯协议。互联网使用的通讯协议简称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)56 57 crc = 1;58 if (temp&i) crc = 0x01;59 60 crc = 0x07;61 62 else63 64 crc = 1;65 if (temp & 1