一、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.Novell Ethernet
它的帧头与Ethernet有所不同其中EthernetII帧头中的类型域变成了长度域,后面接着的两个字节为0xFFFF,用于标示这个帧是Novell Ether类型的Frame,由于前面的0xFFFF站掉了两个字节所以数据域缩小为44-1498个字节,帧校验不变。
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.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)
不同厂商对这几种帧格式通常有不同的叫法,比如:
Frame Type Novel 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
2.1 Ethernet地址
为了标识以太网上的每台主机,需要给每台主机上的网络适配器(网络接口卡)分配一个唯一的通信地址,即Ethernet地址或称为网卡的物理地址、MAC地址。
IEEE负责为网络适配器制造厂商分配Ethernet地址块,各厂商为自己生产的每块网络适配器分配一个唯一的Ethernet地址。因为在每块网络适配器出厂时,其Ethernet地址就已被烧录到网络适配器中。所以,有时我们也将此地址称为烧录地址(Burned-In-Address,BIA)。
Ethernet地址长度为48比特,共6个字节,如图1所示。其中,前3字节为IEEE分配给厂商的厂商代码,后3字节为网络适配器编号。
2.2 CSMA/CD
在ISO的OSI参考模型中,数据链路层的功能相对简单。它只负责将数据从一个节点可靠地传输到相邻节点。但在局域网中,多个节点共享传输介质,必须有某种机制来决定下一个时刻,哪个设备占用传输介质传送数据。因此,局域网的数据链路层要有介质访问控制的功能。为此,一般将数据链路层又划分成两个子层:
●逻辑链路控制LLC(Logic Line Control)子层
●介质访问控制MAC(Media Access Control)子层
如图2所示。其中,LLC子层负责向其上层提供服务;MAC子层的主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。MAC子层的存在屏蔽了不同物理链路种类的差异性。
在MAC子层的诸多功能中,非常重要的一项功能是仲裁介质的使用权,即规定站点何时可以使用通信介质。
实际上,局域网技术中是采用具有冲突检测的载波侦听多路访问(Carrier Sense Multiple Access / Collision Detection,CSMA/CD)这种介质访问方法的。
在这种介质访问方法中规定:在发送数据之前,一个节点必须首先侦听网线上的载波,如果在9.6微秒的时间之内没有检测到载波(说明通信介质空闲),节点才可以发送一帧数据。
如果两个节点同时检测到介质空闲并同时发送出一帧数据,则会导致数据帧的冲突,双方的数据帧均被破坏。一方面,检测到冲突的节点会发送"冲突增强"信号(32比特的"1")通知介质上的每个节点发生了冲突。另一方面,发生冲突的节点在再次发送自己的数据帧之前会各自等待一段随机的时间。
随着以太网上节点数量的增加,冲突的数量也随之增加,而整个网段的有效带宽将随之减少。
在后面的章节中,我们将学习如何利用网桥、交换机等设备将一个网段划分成多个独立的冲突域,进而增加每个网段的可用带宽。
3 以太网帧格式
目前,有四种不同格式的以太网帧在使用,它们分别是:
●Ethernet II即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA。
●Ethernet 802.3 raw:Novell在1983年公布的专用以太网标准帧格式。Cisco名称为:Novell-Ether。
●Ethernet 802.3 SAP:IEEE在1985年公布的Ethernet 802.3的SAP版本以太网帧格式。Cisco名称为:SAP。
●Ethernet 802.3 SNAP:IEEE在1985年公布的Ethernet 802.3的SNAP版本以太网帧格式。Cisco名称为:SNAP。
在每种格式的以太网帧的开始处都有64比特(8字节)的前导字符,如图3所示。其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。
除此之外,不同格式的以太网帧的各字段定义都不相同,彼此也不兼容。
3.1 Ethernet II帧格式
如图4所示,是Ethernet II类型以太网帧格式。
Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)。其中前12字节分别标识出发送数据帧的源节点MAC地址和接收数据帧的目标节点MAC地址。
接下来的2个字节标识出以太网帧所携带的上层数据类型,如16进制数0x0800代表IP协议数据,16进制数0x809B代表AppleTalk协议数据,16进制数0x8138代表Novell类型协议数据等。
在不定长的数据字段后是4个字节的帧校验序列(Frame Check Sequence,FCS),采用32位CRC循环冗余校验对从"目标MAC地址"字段到"数据"字段的数据进行校验。
3.2 Ethernet 802.3 raw帧格式
如图5所示,是Ethernet 802.3 raw类型以太网帧格式。
在Ethernet 802.3 raw类型以太网帧中,原来Ethernet II类型以太网帧中的类型字段被"总长度"字段所取代,它指明其后数据域的长度,其取值范围为:46-1500。
接下来的2个字节是固定不变的16进制数0xFFFF,它标识此帧为Novell以太类型数据帧。
3.3 Ethernet 802.3 SAP帧格式
如图6所示,是Ethernet 802. 3 SAP类型以太网帧格式。
从图中可以看出,在Ethernet 802.3 SAP帧中,将原Ethernet 802.3 raw帧中2个字节的0xFFFF变为各1个字节的DSAP和SSAP,同时增加了1个字节的"控制"字段,构成了802.2逻辑链路控制(LLC)的首部。LLC提供了无连接(LLC类型1)和面向连接(LLC类型2)的网络服务。LLC1是应用于以太网中,而LLC2应用在IBM SNA网络环境中。
新增的802.2 LLC首部包括两个服务访问点:源服务访问点(SSAP)和目标服务访问点(DSAP)。它们用于标识以太网帧所携带的上层数据类型,如16进制数0x06代表IP协议数据,16进制数0xE0代表Novell类型协议数据,16进制数0xF0代表IBM NetBIOS类型协议数据等。
至于1个字节的"控制"字段,则基本不使用(一般被设为0x03,指明采用无连接服务的802.2无编号数据格式)。
3.4 Ethernet 802.3 SNAP帧格式
如图7所示,是Ethernet 802. 3 SNAP类型以太网帧格式。
Ethernet 802. 3 SNAP类型以太网帧格式和Ethernet 802. 3 SAP类型以太网帧格式的主要区别在于:
●2个字节的DSAP和SSAP字段内容被固定下来,其值为16进制数0xAA。
●1个字节的"控制"字段内容被固定下来,其值为16进制数0x03。
●增加了SNAP字段,由下面两项组成:
◆新增了3个字节的组织唯一标识符(Organizationally Unique Identifier,OUI ID)字段,其值通常等于MAC地址的前3字节,即网络适配器厂商代码。
◆2个字节的"类型"字段用来标识以太网帧所携带的上层数据类型。
--------------------------------------------------------------------------------------------
【补充】(摘录自 关于以太网帧格式的那点事儿 的后半部分)
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等协议分析工具去捕捉数据包,然后解码查看是不是这样的。
补充Ethernet II帧格式中Ethertype字段
顺便提供一下各种Ethertype(以太网类型):
知名协议已经分配了 EtherType 值,下面表格中列出了 EtherType 字段中常用值及其对应的协议:
Ethertype ( 十六进制 ) | 协议 |
0x0000 - 0x05DC | IEEE 802.3 长度 |
0x0101 – 0x01FF | 实验 |
0x0600 | XEROX NS IDP |
0x0660 0x0661 |
DLOG |
0x0800 | 网际协议(IP) |
0x0801 | X.75 Internet |
0x0802 | NBS Internet |
0x0803 | ECMA Internet |
0x0804 | Chaosnet |
0x0805 | X.25 Level 3 |
0x0806 | 地址解析协议(ARP : Address Resolution Protocol) |
0x0808 | 帧中继 ARP (Frame Relay ARP) [RFC1701] |
0x6559 | 原始帧中继(Raw Frame Relay) [RFC1701] |
0x8035 | 动态 DARP (DRARP:Dynamic RARP) 反向地址解析协议(RARP:Reverse Address Resolution Protocol) |
0x8037 | Novell Netware IPX |
0x809B | EtherTalk |
0x80D5 | IBM SNA Services over Ethernet |
0x 80F 3 | AppleTalk 地址解析协议(AARP:AppleTalk Address Resolution Protocol) |
0x8100 | 以太网自动保护开关(EAPS:Ethernet Automatic Protection Switching) |
0x8137 | 因特网包交换(IPX:Internet Packet Exchange) |
0x 814C | 简单网络管理协议(SNMP:Simple Network Management Protocol) |
0x86DD | 网际协议v6 (IPv6,Internet Protocol version 6) |
0x880B | 点对点协议(PPP:Point-to-Point Protocol) |
0x 880C | 通用交换管理协议(GSMP:General Switch Management Protocol) |
0x8847 | 多协议标签交换(单播) MPLS:Multi-Protocol Label Switching <unicast>) |
0x8848 | 多协议标签交换(组播)(MPLS, Multi-Protocol Label Switching <multicast>) |
0x8863 | 以太网上的 PPP(发现阶段)(PPPoE:PPP Over Ethernet <Discovery Stage>) |
0x8864 | 以太网上的 PPP(PPP 会话阶段) (PPPoE,PPP Over Ethernet<PPP Session Stage>) |
0x88BB | 轻量级访问点协议(LWAPP:Light Weight Access Point Protocol) |
0x88CC | 链接层发现协议(LLDP:Link Layer Discovery Protocol) |
0x8E88 | 局域网上的 EAP(EAPOL:EAP over LAN) |
0x9000 | 配置测试协议(Loopback) |
0x9100 | VLAN 标签协议标识符(VLAN Tag Protocol Identifier) |
0x9200 | VLAN 标签协议标识符(VLAN Tag Protocol Identifier) |
0xFFFF | 保留 |