1、RAW 802.3帧格式
前导字段 | 帧起始符 | DMAC | SMAC | Length | Data | FCS | ||
7字节 | 1字节 | 6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节 |
前导字段:每个帧以7个字节的前导字段开头,以0、1间隔代码组成,用以通知目标端作好接收准备(10101010 10101010 10101010 10101010 10101010 10101010 10101010)。
帧起始符:紧跟前导字段,值为10101011,最后两位‘11’表示帧的实际开始。前导字段与起始符由物理设备自动加上用以同步两台通讯的设备,所以对端接收到的数据并不包含这两个字段,故帧长计算与帧校验也不包含这两个字段。
DMAC:目标MAC地址。
SMAC:源MAC地址。
Length:数据字段的长度,记录其后一字段Data的实际长度。
Data:数据字段,存放帧数据。在802.3中规定了一个帧的最小长度为64字节,帧长计算方法如下:
帧长= DMAC + SMAC + Length + Data + FCS
其中DMAC、SMAC、Length、FCS的和为18字节,所以Data字段的最小长度为64-18=46字节。
若帧长确实小于64字节,则发送端会自动在Data字段中填充0直到帧长等于64字节为止。
FCS:帧校验序列,接收端用以判断传输过程中是否有误,若发现错误则丢弃此帧。
2、EthernetII帧格式
前导字段 | DMAC | SMAC | Type | Data | FCS | ||
8字节 | 6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节 |
EthernetII与802.3帧格式相近,区别在于EthernetII没有帧起始符,而前导字段占据了8个字节,作用与802.3中前导字段+帧起始符功能一致,都是实现两台设备的通讯同步。
另一个区别在于802.3的Length字段由Type字段代替,用以表明该帧的协议类型。这是因为EthernetII帧支持多种协议类型,而RAW 802.3帧仅支持一种协议。
3、802.3与EthernetII的异同
为方便802.3与EthernetII两种帧格式可以同时在网络中使用,人们规定802.3和EthernetII中Data字段的最大长度必须小于1500字节,也就是说802.3中Length字段的值必定是小于1500的。同时又规定了EthernetII中协议类型从数字1536(0x0600)开始分配,这样只要Type或Length字段的值小于1536那就说明这是一个802.3帧,值大于1536则证明其是一个EthernetII帧。
在使用中EthernetII较802.3更适合传输大量的数据,而802.3的优势在于其具备严格的传输控制。所以大多数应用的以太网数据包使用EthernetII的帧格式(如HTTP、FTP、SMTP、POP3等),而交换机之间的BPDU数据包、思科的发现协议则是使用802.3的帧格式
4、以太网帧格式的发展
Ethernet V1(1980):这是最原始的一种格式,是由Xerox提出的3Mbps以太网标准的封装格式,后来在1980年由DEC、Intel和Xerox标准化形成Ethernet V1标准。
Ethernet V2(1982):也就是我们说的EthernetII,由DEC、Intel和Xerox在1982年公布的标准,主要更改了V1的电气特性和物理接口,帧格式并无变化。V2出现后取代V1成为沿用至今的以太网帧标准格式。
前导字段 | DMAC | SMAC | Type | Data | FCS | ||
8字节 | 6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节 |
RAW 802.3(Novell, 1983):1983年Novell发布其Netware/86网络套件时使用了此以太网帧格式,该格式借鉴了还未发布的IEEE802.3标准将Ethernet V2中的Type字段改为Length字段,因当时使用的RAW 802.3帧只需要支持IPX/SPX一种协议。而两年后正式发布的IEEE802.3加入了LLC头,导致Novell使用的标准与IEEE正式标准互不兼容。为了与新推出的IEEE标准兼容,规定了RAW 802.3的Data字段前两个字节为RAW字段且值为0xFFFF用以区分RAW和后面发布的LLC标准。
前导字段 | 帧起始符 | DMAC | SMAC | Length | Data(46-1500) | FCS | |||
7字节 | 1字节 | 6字节 | 6字节 | 2字节 | RAW(0xFFFF) | data | 4字节 |
IEEE802.3 LLC(1985):这是IEEE正式的802.3标准,由Ethernet V2发展而来,它将Ethernet V2的Type字段替换为Length字段,同时将Data字段中的前3个字节命名为LLC头用以标识上层协议。LLC中包含了DSAP、SSAP、Control三个字段,每个字段的长度都为1字节。DSAP是目标端的协议类型,SSAP是源端协议类型。
前导字段 | 帧起始符 | DMAC | SMAC | Length | Data(46-1500) | FCS | |||
7字节 | 1字节 | 6字节 | 6字节 | 2字节 | LLC(DSAP/SSAP/Control) | data | 4字节 |
IEEE802.3 SNAP(1985):为了使802.3支持除LLC之外更多的上层协议并更好地支持IP协议而发布的标准,在加入了LLC头的基础上,将Data字段中LLC头之后的5个字节划分为SNAP头,其中包含了一个3字节的OUI字段用于代表不同的组织(通常等于MAC地址中网络适配器厂商的代码)和一个2字节的Type字段用以支持更多的上层协议。为了与LLC帧相区别,SNAP将LLC头的值固化,DSAP、SSAP的值固定为0xAA,Control的值固定为0x03(即Data字段前3个字节值为0xAAAA03则说明其是一个SNAP帧)。
前导字段 | 帧起始符 | DMAC | SMAC | Length | Data(46-1500) | FCS | |||
7字节 | 1字节 | 6字节 | 6字节 | 2字节 | LLC(0xAAAA03) | SNAP(OUI/Type) | data | 4字节 |
5、不同帧格式的区分
EthernetII与802.3:如果帧中Length或Type字段的值小于1536说明这是一个EthernetII帧,反之则是一个802.3的帧。
RAW、LLC、SNAP:如果Data字段前两个字节为0xFFFF则说明这是一个802.3(RAW)帧;如果Data字段中前三个字节为0xAAAA03则说明这是一个802.3(SNAP)帧;剩余的则是802.3(LLC)帧。
【上层协议的标识】802.3多达3种标准的原因就是他们使用了不同的上层协议标识方法,那么什么是上层协议的标识呢。
IEEE将网络划分为OSI 7层模型,其中第一层为物理层,第二层为数据链路层,第三层为网络层,数据链路层又被细分为LLC层和MAC层。我们知道MAC层是用于物理寻址的,在数据帧上体现为DMAC和SMAC两个字段,分别记录了目标MAC地址和源MAC地址,网卡凭借这两个字段就能知道数据包是从那台设备来的目的地是那台设备。帧到达指定网卡后面临的下一个问题是,设备上可能并行运行着多个进程,那这个包具体是给那个进程呢?这就是LLC层的作用了,它指明了该进程的协议类型,也就是EthernetII的Type字段(LLC具体怎么作用还不明晰,这里暂时不表)。在RAW 802.3中只需要支持IPX/SPX一种协议所以没有Type字段,802.3 LLC中使用LLC头中的DSAP和SSAP标识目标端的协议类型和源端协议类型,802.3 SNAP使用SNAP头中的Type字段标识协议类型与EthernetII类似。
【帧校验】数据帧在网络中传输时难免会出现数据丢失或位错误等情况,网卡在接收到帧后是如何判断这个数据帧在传输的过程中没有发生意外呢。
这里不讲真实的校验方法(太复杂),只讲一个简单的例子。例如一组二进制数0111 1101 1001 0011从一个设备传输到另一个设备,接收设备并不能预防传输过程中错误的发生,只能对这组数据进行验证,如果不符合某种规则就判定为错误则将这个帧丢掉。校验规则由协议规定,不同的帧协议可能使用不同的校验规则,而FCS字段中则保存着这个规则执行的结果。比如发送端可以将二进制数每8位进行两两相加:0111 1101 + 1001 0011 = 0001 0001 0000;取其中后八位0001 0000,并将后八位存入FCS字段中。接收端收到帧后重复发送端的校验规则,并将计算结果与FCS字段中保存的结果进行比对,如果一致则表明传输过程无误,反之表明此帧无法使用。
【802.3名称由来】我们可以理解EthernetII是以太网协议的V2版本,可为啥802.3要叫802.3呢。
以太网出现后,先是由DEC、Intel和Xerox对该网络进行了标准化制定了Ethernet V1协议,其中规定了实现以太网的物理层连线、电信号和介质等等内容,帧格式的定义只是其中的一部分。而后很快又推出了Ethernet V2,也就是现在最常用的EthernetII协议。两年后,由于以太网的发展成熟,IEEE协会在EthernetII的基础上对以太网进行了更加详细的规定,也就是IEEE802.3协议。IEEE协会由多个不同专业的协会和委员会组成,如IEEE航空和电子系统协会、IEEE通讯协会、IEEE生物测定学委员会等等,其中制定802.3协议的委员会叫做IEEE局域网/城域网标准委员会,成立的时间是1980年2月所以又称802委员会,该协会发布的这一系列标准名称均是以IEEE 802开头的,802后的.3则表明这是一系列标准的第三号。下面感受一下这个系列的标准中的一部分名称:
IEEE 802.1 :局域网体系结构、寻址、网络互联和网络
IEEE 802.1A:概述和系统结构
IEEE 802.1B:网络管理和网络互连
IEEE 802.2 :逻辑链路控制子层(LLC)的定义。
IEEE 802.3 : 以太网介质访问控制协议 ( CSMA/CD)及物理层技术规范。
IEEE 802.4 :令牌总线网(Token-Bus)的介质访问控制协议及物理层技术规范。
IEEE 802.5 : 令牌环网(Token-Ring)的介质访问控制协议及物理层技术规范。
【以太网名称由来】在早些年的时候,科学家认为这个世界是由一种看不见摸不着的介质“以太”所充斥的,而后以太的存在被证伪了,那么以太网跟以太是否有什么关联呢。
有网上的段子说当年以太网之父Metcalfe在自己的博士论文中就是研究APRA网的,可他的论文答辩没过,被认为是缺乏理论支持,但是他的技术得到了很多厂商的看好,后来Metcalfe想到自己当年的论文没过就很不爽,于是就把自己设计的局域网技术称为以太网,调侃这是一种看不见,摸不着的技术。以上段子说明以太网就是局域网,是发明者自己瞎取的,没啥特别含义。