以太网数据帧(802.3)最大与最小长度

以太网(IEEE 802.3)帧格式:

一、前导码:7字节0x55,一串一、0间隔,用于信号同步
二、帧起始定界符:1字节0xD5(10101011),表示一帧开始
三、DA(目的MAC):6字节
四、SA(源MAC):6字节
五、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)
六、数据:46~1500字节
七、帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部份内容而获得的校验和。

据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。

按照上述,最大帧应该是1526字节,可是实际上咱们抓包获得的最大帧是1514字节,为何不是1526字节呢? 缘由是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,而后对帧进行CRC检验,若是帧校验和错,就丢弃此帧。若是校验和正确,就判断帧的目的硬件地址是否符合本身的接收条件(目的地址是本身的物理硬件地址、广播地址、可接收的多播硬件地址等),若是符合,就将帧交“设备驱动程序”作进一步处理。这时咱们的抓包软件才能抓到数据, 所以,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS以外的数据,其最大值是6+6+2+1500=1514。

以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,所以,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以知足数据帧长不小于64字节。因为填充数据是由MAC子层负责,也就是设备驱动程序。算法

以CSMA/CD做为MAC算法的一类LAN称为以太网。CSMA/CD冲突避免的方法:先听后发、边听边发、随机延迟后重发。一旦发生冲突,必须让每台主机都能检测到。关于最小发送间隙和最小帧长的规定也是为了不冲突。数据结构

考虑以下的状况,主机发送的帧很小,而两台冲突主机相距很远。在主机A发送的帧传输到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到冲突,因而发送冲突信号。假如在B的冲突信号传输到A以前,A的帧已经发送完毕,那么A将检测不到冲突而误认为已发送成功。因为信号传播是有时延的,所以检测冲突也须要必定的时间。这也是为何必须有个最小帧长的限制。spa

按照标准,10Mbps以太网采用中继器时,链接的最大长度是2500米,最多通过4个中继器,所以规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,所以也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512位=64字节,这就是以太网帧最小64字节的缘由。.net

512位时是主机捕获信道的时间。若是某主机发送一个帧的64字节仍无冲突,之后也就不会再发生冲突了,称此主机捕获了信道。get

因为信道是全部主机共享的,若是数据帧太长就会出现有的主机长时间不能发送数据,并且有的发送数据可能超出接收端的缓冲区大小,形成缓冲溢出。为避免单一主机占用信道时间过长,规定了以太网帧的最大帧长为1500。同步

100Mbps以太网的时隙仍为512位时,以太网规定一帧的最小发送时间必须为5.12μs。it

1000Mbps以太网的时隙增至512字节,即4096位时,4.096μs。io