『7x24小时有问必答』

以太网帧的概念
      以太网网络上发送的任何数据都会被封装在使用一种特定格式编码的以太网帧中。以太网帧就像是信封那样,上面标有地址等信息,可以控制其中信件的去向,而且还有可能决定发送的方式。以太网帧的格式就是规定了“哪里写收信地址、回信地址,哪里贴邮票”等等。
      在介绍OSI参考模型时,我们有讲过现代网络使用分层协议。高层协议将数据向下传递给低层,低层将数据封装后再继续发送。以太网帧包含报头、载荷和帧尾,而载荷本身可能包含一个完整的IP数据包。这个IP数据包有其自己的IP报头以及含有高级数据报的IP载荷。
      另外,“帧究竟由什么构成”也是一个关于以太网的典型问题,而这个问题并非有明确的答案,网络技术人员依然对“前导码和帧开始符是否应该被视作帧的一部分”这个问题各执己见。支持它们不算在帧的一部分的证据是:测量帧大小时不会把它们算在其中;另外,IEEE802.3主以太网标准认为前导码和帧开始符不包含在以太网帧之内。
    
以太网标准帧格式
1.DIX以太网(以太网II)帧格式和Ethertype
      最初的以太网帧格式由Xerox20世纪70年代首次创建以太网时定义,最终成为首个DIX以太网标准的基础,“DIX”的缩写来自于这项标准的三个发起者的名称首字母,即Digital Equipment CorporationIntelXerox。这个初始的DIX以太网标准很快就被DIX以太网标准第二版取代,后者略微调整了原来的以太网帧格式,使其成为可能是现有最重要的二层帧格式。
      以太网II帧包含若干个帧报头字段、传输数据和一个单字段报尾:
字段名称
大小(字节)
描述
目的地址
6
目的地址:帧的预期接收设备(一个或多个)的地址。这个6字节字段包含符合48比特IEEE MAC地址标准格式的MAC地址,可以是单播、组播或广播地址。
源地址
6
源地址:帧的发送设备的MAC地址,用于想接收方表明来源。
以太网类型
2
以太网类型(Ethertype):已被封装入帧的高层协议标识符。允许多个对话在同一以太网连接上发送。
数据
46至1500
数据:要在帧中传输的数据,一般包括实际的终端用户数据与一个或多个上层协议报头的嵌套集。为了达到“传输帧长度不小于64字节的要求,发送设备必须在必要的时候使用额外字节来填充数据报段,使其至少达到46个字节的长度(外加18字节的报头和报尾)。
帧校验序列
4
帧校验序列:一个32比特的循环冗余校验(CRC)码,由发送设备根据帧的其余部分的值计算得出,然后在传输之前置于数据后。接收设备在收到帧后对其执行相同的计算。发送设备发出的校验值与接收设备计算出的值若有任何不符,说明帧中的一个或多个比特损坏从而导致帧差错。此时接收方将丢弃该帧并等待重传。
  
      在网络报文格式的变迁大潮中,以太网II帧格式凭借其简单明了的结构经久不衰。以上字段只有类型字段的说明不甚明确,也值得我们进一步讨论。实际上,这个“以太网类型”并不是用来表示所用的以太网的类型的,它实际上是用来标记使用帧的网络层或更高层协议的。也就是说,它会告诉接收设备以太网帧包含哪些数据。通过查看以太网类型,接收设备就会知道刚刚收到的帧应该交给哪个高层。下表列出了一些常用的以太网类型。
值(十六进制)
值(十进制)
协议
06 00
1536
Xerox NS IDP
08 00
2048
互联网协议(IP)
08 05
2053
X.25分组级协议(第3层)
08 06
2054
地址解析协议(ARP)
08 AD
2989
Banyan VINES
3C 00 - 3C 0D
15360 - 15374
3Com NBP报文
60 00 - 60 09
24576 - 24585
DEC协议
80 35
32821
反向地址解析协议(RARP)
80 9B
32923
EtherTalk(以太网AppleTalk)
81 37 - 81 38
33079 - 33080
Novell NetWare IPX/SPX
86 DD
34525
互联网协议第6版(IPv6)
88 6F
34927
微软网络负载平衡
88 70
34928
巨型帧标记
  

      以太网II帧格式是以太网技术的遗迹,永远都不会消失。当IEEE802.3项目正式化并利用802.3802.2报头创建新的帧格式时,其用意在于替换掉以太网II格式。创建SNAP是为了确保Ethertype功能被纳入IEEE标准从而不再需要以太网II。但尽管这样,以太网II帧格式还是留存至今,不但没有落伍,反而成为当前最常用的格式。
      这其中的原因有很多。IP使用以太网II格式无疑促成了它的流行。但以太网II帧格式之所以一直是默认格式,最大的原因可能是它比其它格式更短、更简单。使用IEEE802.2SNAP也许能令以太网很好地契合IEEE所憧憬的IEEE802工作方式,但正如我们所见,在网络工程师看来,这无外乎代表了不必要的复杂实现和开销。
  
2.IEEE802.3+802.2以太网帧格式
      IEEE80220世纪80年代初正式将以太网定为公共标准时,创建了IEEE802.2逻辑链路控制和802.3媒体接入控制。IEEE当时的构想是让802.3802.2协作,并且未来可以开发与802.2协作的其它媒体接入控制方法。IEEE首次定义以太网时对以太网II帧格式所做的变更充分体现了这个整体规划。
      IEEE委员会取缔了Ethertype字段的一般功能,将之替换成“链路服务接入点”的非以太网专用的技术,并将该技术收录于IEEE802.2标准。IEEE的想法是不使用以太网类型,而是在逻辑链路控制(LLC)子层进行编码,使其独立于所用的MAC子层。以太网可以像以前使用Ethertype一样使用802.2报头,IEEE802.5等其它MAC子层也可以使用802.2报头。根据这种格式所使用的标准,我们称之为“IEEE802.3+802.2”格式。
      由此一来,IEEE802方案实际使用两套报头。首先,数据从网络层传递到802.2逻辑链路控制层,在那里添加一个该层子报头;接着,报文被传递到802.3以太网MAC子层,在那里被编码到一个与以太网II格式相似但不相同的802.3MAC格式中;最终形成如下的嵌套帧格式。

总体IEEE802.3+802.2以太网帧格式:
字段名称
大小(字节)
描述
目的地址
6
目的地址:帧的预期接收设备(一个或多个)的地址,与以太网II格式中的相同。
源地址
6
源地址:帧的发送设备的MAC地址,用于想接收方表明来源,与以太网II格式中的相同。
长度
2
数据长度:数据字段的长度,以字节为单位。它不包括帧本身所使用的字节,比如地址字段、长度字段本身,但包括LLC层子报头,因为子报头在这一层被封装并被视为数据。
数据
46至1500
数据:要在帧中传输的数据,由802.2LLC子层传递给802.3MAC子层。它包括被封装到IEEE802.2LLC子报头中的用户数据以及网络层和更高层的协议(见下表)。
帧校验序列
4
帧校验序列:一个32比特的循环冗余校验(CRC)码,与以太网II格式中的相同。
IEEE802.3+802.2以太网数据字段格式:
字段名称
大小(字节)
描述
DSAP
1
目标服务接入点:由接收设备为接收相应帧而使用的SAP。
SSAP
1
源服务接入点:由发送设备使用的SAP。
控制
1
控制信息:用于根据逻辑链路控制服务类型来识别帧的各种特征的控制包头。需要注意的是,虽然这个字段的长度在IEEE802.2标准中可以是1个字节也可以是2个字节并载有不同的内容,但它在以太网中只能是一个包含数值03的字节。
数据
43至1497
要传输的实际数据,包括网络层和高层协议。在以太网II中,这个字段会被填充成不短于43个字节以确保整个帧符合至少64字节的要求。
  
      上面展示了802.2的子报头是如何嵌套在802.3帧格式中的。这样做的结果是。在以太网II格式下可以使用的三个数据字节被LLC子报头占用,即损失三个数据字节。802.3报头将以太网类型字段替换成长度字段,除此之外这两个报头几乎相同。而在理论上,LLC子报头中的DSAPSSAP字段应该用于替代Ethertype
      不过,最后IEEE作出让步并修改802.3标准以纳入以太网II格式,帧报头的第3个字段正式改名为“长度/类型”。在解读的时候,长度字段的数值必然小于1500,因为以太网帧中的数据字段长度不能超过1500个字节。而以太网类型都被分配了大于1536(0x0600)的数字,这样一来接收设备就可以仅凭数值区分开应该解释为长度还是以太网类型。

  
3.IEEE802.3+802.2+SNAP以太网帧格式
      IEEE802委员会定义首套802系列时创建了自己的以太网帧格式版本,也就是前文的IEEE802.3+802.2的格式。可惜的是这个格式有一个重要缺陷。IEEE期望以太网用户利用DSAPSSAP字段来编码高层协议并以此取代以太网II中的以太网类型字段。但是定义的DSAPSSAP字段太过于短小,无法向后兼容以太网类型字段值。当时很多高层协议是围绕2字节的以太网类型设计的,它们无法与802.2SAP字段兼容。其中就包括重要的互联网协议。
      为了使802.3与以太网II的以太网类型字段更好兼容,IEEE创建了IEEE802.2LLC子报头扩展字段,将之命名为“子网接入协议”(SNAP)。工作组为了避免让IEEE802成为以太网专用标准,SNAP被定义成IEEE802的一个通用扩展字段,可以用于各种MAC子层。
      使用SNAP协议时,将一个SNAP子报头附于LLC子报头之后。所有这些子报头都被插入到数据字段之中,结果就产生了一个包含802.3802.2SNAP共三组报头的嵌套帧格式。

总体IEEE802.3+802.2+SNAP以太网帧格式:
字段名称
大小(字节)
描述
目的地址
6
目的地址:帧的预期接收设备(一个或多个)的地址,与以太网II格式中的相同。
源地址
6
源地址:帧的发送设备的MAC地址,用于想接收方表明来源,与以太网II格式中的相同。
长度
2
数据长度:数据字段的长度,以字节为单位。它不包括帧本身所使用的字节,比如地址字段、长度字段本身,但包括LLC和SNAP子报头,因为子报头在这一层被封装并被视为数据。
数据
46至1500
数据:要在帧中传输的数据,由802.2LLC子层传递给802.3MAC子层。它包括被封装到IEEE802.2LLC和SNAP子报头中的用户数据以及网络层和更高层的协议(见下表)。
帧校验序列
4
帧校验序列:一个32比特的循环冗余校验(CRC)码,与以太网II格式中的相同。
IEEE802.3+802.2+SNAP以太网数据字段格式:
字段名称
大小(字节)
描述
DSAP
1
目标服务接入点:由接收设备为接收相应帧而使用的SAP。使用SNAP时,这个字节被设置为0xAA。
SSAP
1
源服务接入点:由发送设备使用的SAP。使用SNAP时,这个字节被设置为0xAA。当DSAP和SSAP字段的值都为0xAA时,表示此子报头含有SNAP字段。
控制
1
控制信息:用于根据逻辑链路控制服务类型来识别帧的各种特征的控制包头。需要注意的是,虽然这个字段的长度在IEEE802.2标准中可以是1个字节也可以是2个字节并载有不同的内容,但它在以太网中只能是一个包含数值03的字节。
OUI
3
组织唯一标识符:分配给硬件制造商的3字节代码,与硬件MAC地址前半部分相同。OUI用于帮助SNAP实现各种功能,使用以太网时,该字段被设置为0x00 0x00 0x00,即以太网创始者Xerox的OUI。
Local
2
本地管理:可以由上述OUI对应的组织以任何方式定义的2字节。就以太网而言,这个字段和以太网II格式的以太网类型字段相同。
数据
38至1492
要传输的实际数据,包括网络层和高层协议。在以太网II中,这个字段会被填充成不短于38个字节以确保整个帧符合至少64字节的要求。
  
  
      现在,如果您觉得这些子报头繁琐且低效,认为平白无故花费10个字节去携带以太网II格式2个字节就能携带的信息并且还没有增加任何实质性的好处这种做法相当愚蠢,那么恭喜您,这就是为什么以太网II格式依然是首选格式。IEEE802工作组采用SNAP的做法的确不算成功,所以这个格式遭到冷落也是理所当然的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码