以太网帧格式
以太网帧发展
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)。
在每种格式的以太网帧的开始处都有64比特(8字节)的前导字符:
其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA.
最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。
前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。
各种不同的帧格式
Ethernet II 类型:以太网帧的最小长度为 64 字节(6+6+2+46+4),最大长度为 1518 字节(6+6+2+1500+4)。其中:
(1)前 12 字节分别标识出发送数据帧的源节点 MAC 地址(S.MAC)和接收数据帧的目标节点 MAC 地址(D.MAC);
(2)接下来的 2 个字节标识出以太网帧所携带的上层数据类型,如 16 进制数0x0800代表 IP 协议数据,16 进制数0x86dd代表 IPv6 协议数据,16 进制数0x809B代表 AppleTalk 协议数据,16 进制数0x8138代表 Novell 类型协议数据等 ;
(3)在不定长的数据字段(Data):其长度是 46 至 1500 字节;
(4)4 个字节的帧校验序列(Frame. Check Sequence,FCS),采用 32 位 CRC 循环冗余校验对从“目标 MAC 地址”字段到“数据”字段的数据进行校验
Novell Ethernet
它的帧头与Ethernet有所不同其中EthernetII帧头中的类型域变成了长度域,后面接着的两个字节为0xFFFF用于标示这个帧是Novell Ether类型的Frame,由于前面的0xFFFF站掉了两个字节所以数据域缩小为44-1498个字节,帧校验不变。
IEEE802.3
EEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
Length字段定义了Data字段包含的字节数:
逻辑链路控制LLC(Logical Link Control):由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。
SNAP(Sub-network Access Protocol):由机构代码(Org Code)和类型(Type)字段组成。Org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:
1) 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware- ETHERNET帧,用来承载NetWare类型的数据。
2)当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了 ETHERNET_SNAP帧。 ETHERNET_SNAP帧可以用于传输多 种协议。
3) DSAP和SSAP其他的取值均为纯IEEE802.3帧。
区分802.3帧与EthernetII帧
Type/Length域<=0x05DC---------------------为802.3帧
Type/Length域>0x05DC-----------------------为以太网帧
802.3以太网帧格式备注:
以太网帧格式多达5种,事实上,今天的大多数TCP/IP应用都是用Ethernet V2帧格式(IEEE802.3-1997改回了对这一格式的兼容),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3/LLC的帧,VLAN Trunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3SNAP的帧。
----------------------------------------------------------------------------------------------------------------------------
VLAN帧格式
帧格式
IEEE 802.1Q标准对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。VLAN帧格式是普通的帧格式+VLAN Tag.
VLAN帧最小帧长为64字节。
VLAN帧格式
字段 | 长度 | 含义 |
---|---|---|
Destination address | 6字节 | 目的MAC地址。 |
Source address | 6字节 | 源MAC地址。 |
Type | 2字节 | 长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 |
PRI | 3比特 | Priority,长度为3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。用于当阻塞时,优先发送优先级高的数据包。 如果设置用户优先级,但是没有VLANID,则VLANID必须设置为0x000。 |
CFI | 1比特 | CFI (Canonical Format Indicator),长度为1比特,表示MAC地址是否是经典格式。CFI为0说明是标准格式,CFI为1表示为非标准格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0。 |
VID | 12比特 | LAN ID,长度为12比特,表示该帧所属的VLAN。在VRP中,可配置的VLAN ID取值范围为1~4094。0和4095协议中规定为保留的VLAN ID。 三种类型:
三个特殊的VID:
|
Length/Type | 2字节 | 指后续数据的字节长度,但不包括CRC检验码。 |
Data | 42~1500字节 | 负载(可能包含填充位)。 |
CRC | 4字节 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 |
二。VLAN的类型
计算机发送的帧都是不带标签(Tag)的。当计算机发送一个不带标签的帧给交换机时,交换机需要通过某种划分原则来判断这个帧应该划到哪个特定的VLAN 中。
1.基于端口的VLAN(也称为:物理层VLAN、一层VLAN)
划分原则:将VLAN的编号(VLAN ID)配置影射到交换机的物理端口上,从某一物理端口进入交换机的、由终端计算机发送的不带标签的帧都被划分到该端口的VLAN ID所表明的那个VLAN。
优点:划分原则简单、直观、容易实现、安全可靠。
注意:这种类型的VLAN,当计算机接入交换机的端口发生了变化时,该计算机发送的帧的VLAN归属也可能发生改变。
2.基于MAC地址的VLAN(也称为:二层VLAN)
划分原则:交换机内部建立并维护了一个MAC地址与VLAN ID的对应表,当交换机接收到计算机发送的不带标签的帧时,交换机将分析帧中的源MAC地址,然后查询MAC地址与VLAN ID的对应表,根据其中的对应关系把这个帧划分到相应的VLAN中。
优点:划分灵活、当计算机接入交换机的端口发生了变化时,该计算机发送的帧的VLAN归属不会发生改变。
缺点:划分原则复杂、安全性不高(因为恶意的计算机很容易伪造自己的MAC地址)
3.基于协议的VLAN(也称为:三层VLAN)
划分原则:交换机根据计算机发送的不带标签的帧中的帧的类型字段的值来决定帧的VLAN 归属。
---------------------------------------------------------------------------------------------------------------------
QinQ报文封装格式
在802.1Q报文的基础上增加一层802.1Q标签。
因为IEEE 802.1Q中定义的VLAN Tag域只有12个比特,仅能表示4096个VLAN,无法满足城域以太网中标识大量用户的需求,于是产生了QinQ技术,拓展VLAN的数量空间。QinQ在原有的802.1Q报文的基础上增加一层802.1Q标签,使得VLAN数量增加到4094×4094。
在公网的传输过程中,设备只根据外层VLAN Tag转发报文,并根据报文的外层VLAN Tag进行MAC地址学习,而用户的内层VLAN Tag将被当作报文的数据部分进行传输。QinQ的内外层标签可以代表不同的信息,如内层标签代表用户,外层标签代表业务。
图1-2 802.1Q封装和QinQ封装
帧大小
QinQ报文比802.1Q报文多四个字节,因此建议用户在组网时适当增加运营商网络中各接口的最大帧长(至少为1504 字节)。目前交换机缺省支持的最大帧长超过1504字节,不需要手动配置。
TPID
不同运营商的系统可能将QinQ帧外层VLAN标记的TPID设置为不同值。为实现与这些系统的兼容性,可以修改TPID值,使QinQ帧发送到公网时,承载与特定运营商相同的TPID值,从而实现与该运营商设备之间的互操作性。VLAN数据帧的TPID与不带VLAN标记的帧的协议类型字段位置相同,为避免在网络中转发和处理数据包时出现问题,不可将TPID值设置为表1-2中的任意值。
对应值 | 协议类型 |
---|---|
0x0806 | ARP |
0x8035 | RARP |
0x0800 | IP |
0x86DD | IPv6 |
0x8863/0x8864 | PPPoE |
0x8847/0x8848 | MPLS |
0x8137 | IPX/SPX |
0x8809 | LACP |
0x888E | 802.1x |
0x88A7 | HGMP |
0xFFFD/0xFFFE/0xFFFF | 设备保留 |
=====================================================================
=====================================================================
一、以太网管理帧的格式
可以将以太网的帧分为两种类型:
1.ARP,IP--------------以应用为主的帧
2.802.1q,802.1d,802.1x---------局域网管理的帧
下面主要讨论局域网管理
802.1q---------------VLAN的主要协议
802.1d---------------STP(生成树协议),GARP/GVRP(类似于Cisco的VTP,主要用于交换机的VLAN的管理)
802.1x----------------认证协议(与安全有关)
现在主流的交换机都支持这种三种协议,连Cisco的也不例外。
这三种协议都作为802.2(也就是LLC)的子层来在交换机之间传递。
802.3头+802.2头+802.1协议族------------这就交换机管理帧
EthernetII头+TCP/IP协议族-----------------这就应用帧的组成
802.3头+802.2头+SNAP+TCP/IP协议族--------------这是以太网标准中的协议帧,但好像使用的很少。
二、以太网管理帧的区分
1.区分802.3帧与EthernetII帧
Type/Length域<=0x05DC---------------------为802.3帧
Type/Length域>0x05DC-----------------------为以太网帧
2.区分802.1与SNAP
区分依据:LLC的DSAP与SSAP的值(下面简称SAP)
SAP=0x42 -------------------------------802.1协议族
SAP=0xAA-------------------------------SNAP协议
SNAP协议格式
| protocol or organization code | type |
3字节 2字节
802.1协议格式
| protocol ID | Message1 |Message2 |.... | End Mark |
1字节 3字节 3字节
3.区分802.1q与802.3、EthernetII
Type/Length<=0x05DC--------------------------802.3帧
Type/Length>0x05DC----------------------------EthernetII帧
Type/Length=0x8100-----------------------------802.1q帧
注意:802.1q帧是在普通帧头插入802.1q字段来实现的。
========================================================================
交换机存在三种工作模式:
Access,接入模式
Trunk,中继模式
Hybrid,混杂模式
Access类型端口:只能属于1个VLAN,一般用于连接计算机端口;
该接口的pvid和允许列表必须为同一个vlan,且允许列表中只能为允许一个vlan,必然是不标记;这就很明显,因为同一个VLAN间是可以直接二层互通的,所以带有相同VLAN的流量从交换机下来时,要剥离VLAN标签;
Trunk类型端口:可以允许多个VLAN通过,可以接收和发送多个VLAN 报文,一般用于交换机与交换机相关的接口。
Hybrid类型端口:可以允许多个VLAN通过,可以接收和发送多个VLAN 报文;
Access,接入模式
接收:当数据没有tag时打上pvidtag进入,若有则看是否与pvid相等,相等则接收,不想等则丢弃。
转发:看tag是否等于pvid,若等则去tag发送,否则不处理。
Trunk,中继模式
接收:若数据没有带tag时。则打上pvidtag进入,若有,则看tag是否在allow列表,如在则进入,否则丢弃
转发:看tag是否在allow列表,不在则不处理,若在则看tag是否等于pvid,若等则去tag转发,不等则带tag转发
Hybrid类型端口
接收:若数据没有带tag则打上pvidtag进入,若有则看tag是否属于tagged/untagged表,属于则进入,否则丢弃
转发:看数据tag是否在tagged/untagged表,不做则不处理,若在则看属于那个表,若属于tagged则带tag转发,否则untaged去tag转发
pvid是交换机上的概念,说的是进入该端口的报文如果没有打vlan id就按pvid的值打上,vid是报文上的vlan tag的意思.不是同个概念。
首先解释一下什么是PVID,PVID英文解释为Port-base VLAN ID,是基于端口的VLAN ID,一个端口可以属于多个vlan,但是只能有一个PVID,收到一个不带tag头的数据包时,会打上PVID所表示的vlan号,视同该vlan的数据包处理,所以也有人说PVID就是某个端口默认的vlan ID号。
默认情况下,简单的理解为:
ACCESS端口接PC,VID=PVID
TRUNK端口级联,VID=全部,PVID=1
简单的说,VID(VLAN ID)是VLAN的标识,定义其中的端口可以接收发自这个VLAN的包;而PVID(Port VLAN ID)定义这个untag端口可以转发哪个VLAN的包。比如,当端口1同时属于VLAN1、VLAN2和VLAN3时,而它的PVID为1,那么端口1可以接收到VLAN1,2,3的数据,但发出的包只能发到VLAN1中
在网上发现一个比较好的解释是:PVID并不是加在帧头的标记,而是端口的属性,用来标识端口接收到的未标记的帧。也就是说,当端口收到一个未标记的帧时,则把该帧转发到VID和本端口PVID相等的VLAN中去。