浅谈以太网帧格式
一.Ethernet帧格式的发展
1980 DEC,Intel,Xerox制订了Ethernet I的标准
1982 DEC,Intel,Xerox又制订了Ehternet II的标准
1982 IEEE开始研究Ethernet的国际标准802.3
1983 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的Ethernet帧格式
1985 IEEE推出IEEE 802.3规范,后来为解决EthernetII与802.3帧格式的兼容问题,推出折衷的Ethernet SNAP格式
(其中早期的Ethernet I已经完全被其他帧格式取代了,所以现在Ethernet只能见到后面几种Ethernet的帧格式,现在大部分的网络设备都支持这几种Ethernet的帧格式,如:cisco的路由器再设定Ethernet接口时可以指定不同的以太网的帧格式:arpa,sap,snap,novell-ether)
二.各种不同的帧格式
下面介绍一下各个帧格式
1.Ethernet II
就是DIX以太网联盟推出的。。。。它由6个字节的目的MAC地址,6个字节的源MAC 地址,2个字节的类型域(用于标示封装在这个Frame、里面数据的类型)以上为Frame Header,接下来是46--1500字节的数据,和4字节的帧校验
2. 2.Novell Ethernet
它的帧头与Ethernet有所不同其中EthernetII帧头中的类型域变成了长度域,后面接着的两个字节为0xFFFF,用于标示这个帧是Novell Ether类型的Frame,由于前面的0xFFFF站掉了两个字节所以数据域缩小为44-1498个字节,帧校验不变。
3. 3.IEEE 802.3/802.2
802.3的Frame Header和Ethernet II的帧头有所不同,EthernetII类型域变成了长度域。其中又引入802.2协议(LLC)在802.3帧头后面添加了一个LLC首部,由DSAP(Destination Service Access Point)1 byte,SSAP(Source SAP),一个控制域--1 byte! SAP用于标示帧的上层协议。
4. 4.Ethernet SNAP
SNAP Frame与802.3/802.2 Frame的最大区别是增加了一个5 Bytes的SNAP ID其中前面3个byte通常与源mac地址的前三个bytes相同为厂商代码!有时也可设为0,后2 bytes与Ethernet II的类型域相同。。。
三.如何区分不同的帧格式
Ethernet中存在这四种Frame那些网络设备又是如何识别的呢? 如何区分EthernetII与其他三种格式的Frame
如果帧头跟随source mac地址的2 bytes的值大于1500,则此Frame为EthernetII格式的
接着比较紧接着的两bytes如果为0xFFFF则为Novell Ether类型的Frame,如果为0xAAAA 则为Ethernet SNAP格式的Frame ,如果都不是则为Ethernet 802.3/802.2格式的帧
几种以太网帧格式
相当长的一段时间里我都没搞明白一个很基础的问题---以太网的封装格式;最近查了查相关文档,总结如下;
首先说明一下,Ethernet和802.3并不是一回事,虽然我们经常混用这两个术语;
历史上以太网帧格式有五种:
1.Ethernet V1:这是最原始的一种格式,是由Xerox PARC提出的3Mbps CSMA/CD以太网
标准的封装格式,后来在1980年由DEC,Intel和Xerox标准化形成Ethernet V1标准;
2.Ethernet V2(ARPA):这是最常见的一种以太网帧格式,也是今天以太网的事实标准,由
DEC,Intel和Xerox在1982年公布其标准,主要更改了Ethernet V1的电气特性和物理接口,在帧格式上并无变化;Ethernet V2出现后迅速取代Ethernet V1成为以太网事实标准;Ethernet V2帧头结构为6bytes的源地址+6bytes的目标地址+2Bytes的协议类型字段+数据。
常见协议类型如下:
0800 IP
0806 ARP
8137 Novell IPX
809b Apple Talk
如果协议类型字段取值为0000-05dc(十进制的0-1500),则该帧就不是Ethernet V2(ARPA)类型了,而是下面讲到的三种802.3帧类型之一;Ethernet可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等协议;RFC 894定义了IP报文在Ethernet V2上的封装格式;
3.RAW 802.3:这是1983年Novell发布其划时代的Netware/86网络套件时采用的私有以
太网帧格式,该格式以当时尚未正式发布的802.3标准为基础;但是当两年以后IEEE正式发布802.3标准时情况发生了变化—IEEE在802.3帧头中又加入了802.2 LLC(Logical Link Control)头,这使得Novell的RAW 802.3格式跟正式的IEEE 802.3标准互不兼容;可以看到在Novell的RAW 802.3帧结构中并没有标志协议类型的字段,而只有Length字段(2bytes,取值为0000-05dc,即十进制的0-1500),因为RAW 802.3帧只支持IPX/SPX一种协议;
4.802.3/802.2 LLC:这是IEEE 正式的802.3标准,它由Ethernet V2发展而来。它将Ethernet
V2帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十进制的1500);并加入802.2 LLC头用以标志上层协议,LLC头中包含DSAP,SSAP以及Crontrol字段;
常见SAP值:
0 Null LSAP [IEEE]
4 SNA Path Control [IEEE]
6 DOD IP [79,JBP]
AA SNAP [IEEE]
FE Global DSAP [IEEE]
SAP值用以标志上层应用,但是每个SAP字段只有8bits长,而且其中仅保留了6比特用于标识上层协议,因此所能标识的协议数有限(不超过32种);并且IEEE拒绝为某些重要的协议比如ARP协议定义SAP值(奇怪的是同时他们却定义了IP的SAP值);因此802.3/802.2 LLC 的使用有很大局限性;
5.802.3/802.2 SNAP:这是IEEE为保证在802.2 LLC上支持更多的上层协议同时更好的支持
IP协议而发布的标准,与802.3/802.2 LLC一样802.3/802.2 SNAP也带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域(同时将SAP的值置为AA),从而使其可以标识更多的上层协议类型;另外添加了一个3Bytes的OUI字段用于代表不同的组织,RFC 1042定义了IP报文在802.2网络中的封装方法和ARP协议在802.2 SANP中的实现;
今天的实际环境中大多数TCP/IP设备都使用Ethernet V2格式的帧。这是因为第一种大规模使用的TCP/IP系统(4.2/3 BSD UNIX)的出现时间介于RFC 894和RFC 1042之间,它为了避免不能和别的主机互操作的风险而采用了RFC 894的实现;也由于大家都抱着这种想法,所以802.3标准并没有如预期那样得到普及;
CISCO设备的Ethernet Interface默认封装格式是ARPA(Ethernet V2)