Ethernet的帧格式 (转)  http://jiangqiaosun.blog.163.com/blog/static/260981820101022114138277/ 

数据链路层 http://rabbit.xttc.edu.cn/rabbit/htm/artical/2010831172946.shtml

​Ethernet Frame  http://www.infocellar.com/networks/ethernet/frame.htm (这是以上四篇中,写的最精炼的文章)


1. Ethernet帧格式的发展

1980 DEC,Intel,Xerox制订了Ethernet I的标准

1982 DEC,Intel,Xerox又制订了Ehternet II的标准

1982 IEEE开始研究Ethernet的国际标准802.3

1983 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的Ethernet帧格式 (因此802.3 Raw 先于 IEEE 802.3 出台.)

1985 IEEE推出IEEE 802.3规范,

后来为解决EthernetII与802.3帧格式的兼容问题,推出折衷的Ethernet SNAP格式


(其中早期的Ethernet I已经完全被其他帧格式取代了 ,所以现在Ethernet只能见到后面几种Ethernet的帧格式,

现在大部分的网络设备都支持这几种Ethernet的帧格式,

如:cisco的路由器再设定Ethernet接口时可以指定不同的以太网的帧格式:arpa,sap,snap,novell-ether)


2. 不同厂商对这几种帧格式通常有不同的叫法,比如:

Frame Type                        Novell公司                  Cisco 公司

Ethernet Version 2              Ethernet_II                arpa

802.3 Raw                          Ethernet_802.3          novell_ether

IEEE 802.3/802.2                Ethernet_802.2          sap

IEEE 802.3/802.2 SNAP       ETHERNET_SNAP        snap


3. Ethernet V2帧与IEEE 802.3帧的比较

 


因为这两种帧是我们在现在的局域网里最常见的两种帧,因此,我们对它们进行一些比较。

Ethernet V2可以装载的最大数据长度是1500字节,而IEEE 802.3可以装载的最大数据是1492字节(SNAP)或是1497字节; Ethernet V2不提供MAC层的数据填充功能,而IEEE 802.3不仅提供该功能,还具备服务访问点(SAP)和SNAP层,能够提供更有效的数据链路层控制和更好的传输保证。那么我们可以得出这样的结 论:Ethernet V2比IEEE802.3更适合于传输大量的数据,但Ethernet V2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用 IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制 传输的应用中。

在实际应用中,我们会发现,大多数应用的以太网数据包是Ethernet V2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLAN Trunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3 SNAP的帧。大家有兴趣的话,可以利用Sniffer等协议分析工具去捕捉数据包,然后解码查看是不是这样的。


4. 如何区分不同的帧格式

Ethernet中存在这四种Frame那些网络设备又是如何识别的呢? 如何区分EthernetII与其他三种格式的Frame.

  Ethernet II (DIX),  IEEE 802.3 (LLC), and SNAP Frames



如果帧头跟随source mac地址的2 bytes的值大于1500,则此Frame为EthernetII格式的; [source  dest  xx_2bytes>1500 ]

接着比较之后紧接着的两bytes如果为0xFFFF则为Ethernet_802.3类型的Frame; [source  dest  xx_2bytes yy_2bytes=0xffff  ]

如果为0xAAAA则为ETHERNET_SNAP格式的Frame; [source  dest  xx_2bytes yy_2bytes=0xaaaa ]

如果都不是则为Ethernet_802.2格式的帧. [source  dest  xx_2bytes yy_2bytes=others]



5. 几种以太网帧结构图解

5.1 Ethernet II  (Ethernet Version 2,  Ethernet_II,  arpa)



Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)。

(1)  前12字节分别标识出发送数据帧的源节点MAC地址和接收数据帧的目标节点MAC地址。

(2)  接下来的2个字节标识出以太网帧所携带的上层数据类型,类型字段的最小值是0x0600[大于1500, 根据这一点可以区分Ethernet IIEthernet_802.3].

0x0800   IP协议数据,

0x86dd   IPv6协议数据,

0x809B   AppleTalk协议数据,

0x8138   Novell类型协议数据等。

0x0806   ARP

0x0600   XNS (Xerox)

0x6003   DECNET        

(3)  在不定长的数据字段后是4个字节的帧校验序列(Frame. Check Sequence,FCS),采用32位CRC循环冗余校验对从"目标MAC地址"字段到"数据"字段的数据进行校验。


以太网最小发送帧长为64字节,按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,因此也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512 位=64字节,这就是以太网帧最小64字节的原因。现在基本上都是交换机或路由器直接连接计算机,集线器连接很少存在了,在交换机或路由器直接连接计算机时每个计算机与设备之间都是一个独立的冲突域,是不会产生冲突的,因此,此时发送长度小于64字节的帧理论上是可以的,但为了遵循原有标准,考虑到有些集线器设备依旧在使用,因此保持最小帧长64字节不变。



5.2 Ethernet_802.3  (802.3 Raw ,  Ethernet_802.3,  novell_ether)

ETHERNET帧结构_数据


目标地址:此数据包的目标MAC地址。

源地址:此数据包的源MAC地址。

长度:帧包含的数量必须或等于1500。(在Ethernet 802.3 raw类型以太网帧中,原来Ethernet II类型以太网帧中的类型字段被"总长度"字段所取代,它指明其后数据域的长度,其取值范围为:46-1500。)

数据:高层协议(IPX/SPX)、数据和填充符,范围在46~1500字节。(长度紧跟着的接下来的2个字节是固定不变的16进制数0xFFFF,它标识此帧为Novell以太类型数据帧。)

   FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏


 5.3 Ethernet_802.2 (IEEE 802.3/802.2, Ethernet_802.2, sap)

ETHERNET帧结构_字段_02


Ethernet 802.2协议是IEEE正式的802.3标准,它由Ethernet II发展而来。

Ethernet 802.2将Ethernet II帧头的协议类型字段替换为帧长度字段和LLC-802.2头(用以标记上层协议)。LLC头包含目的服务访问点(DSAP)、源服务访问点 (SSAP)和控制(Control)字段。

目标地址:此数据包的目标mac地址;

源地址:此数据包的源mac地址;

长度:帧包含的数据量必须小于或等于1500(16进制的05DC);

DSAP:目标服务存取点(Destination  Service Access Point);

SSAP:源服务存取点(Source Service Access  Point);

常见SAP值:

0:Null LSAP[IEEE] 

4:SNA Path Control[IEEE] 

6:DOD IP[79,JBP] 

AA:SNAP[IEEE] 

FE:ISO DIS 8473[52,JXJ] 

FF:Global DSAP[IEEE]

控制:无连接或面向连接的C;

数据:高层协议、数据和填充符;

FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏。


5.4 ETHERNET_SNAP (IEEE 802.3/802.2 SNAP, ETHERNET_SNAP,    snap)

ETHERNET帧结构_字段_03

目标地址:.

源地址:.

长度:帧包含的数据量必须小于或等于1500(16进制的05DC);

DSAP:目标服务存取点(Destination  Service Access Point) = 0xAA;

SSAP:源服务存取点(Source Service Access  Point)= 0xAA;

控制:无连接或面向连接的C;

厂商代码:.

协议类型: 封装在 IEEE 802 网络中的协议.

IP    =  0x0800

ARP =  0x0806

数据:高层协议、数据和填充符;

FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏。


 ========================

洗脑图:


 SNAP(Sub Network Access Prototol)