华为HCIA路由与交换技术实战
上QQ阅读APP看书,第一时间看更新

1.4 以太网帧结构

视频讲解

按TCP/IP由下往上的顺序,本节讲解链路层协议相关的内容,如图1.18所示。

链路层最常用的协议就是以太网协议,以太网根据IEEE 802.3标准管理和控制数据帧。下面讲解以太网数据帧结构及工作原理。

图1.18 按由下往上的顺序学习协议栈

1.4.1 协议栈发展历史

计算机网络发展早期,各大厂商和标准组织为了在数据通信网络领域占据主导地位,纷纷推出了各自的网络架构体系和协议,如IBM公司的SNA协议,Novell公司的IPX/SPX协议等,如图1.19所示。

图1.19 链路层的不同协议

同时,各大厂商根据这些协议生产出了不同的硬件和软件。使用不同标准的硬件之间无法互相通信,互相独立,使用不便。后来标准组织制定了OSI标准,各个厂家都遵循OSI标准就可以互相通信了。OSI标准共分为7层,如图1.20所示。

图1.20 OSI 7层标准

OSI标准共7层,分别是物理层、链路层、网络层、传输层、会话层、表示层、应用层。每一层的功能是:

物理层:用物理信号发送0101比特流。

链路层:定义MAC地址等信息,让数据帧可以被送到2层网络中的目标主机。

网络层:定义IP地址等信息,让数据报文可以被送到世界各个角落的目标主机。

传输层:定义端口号等信息,用来区分同一个主机上不同应用程序的数据,还负责建立、维护、管理端到端连接,例如丢包重传。

会话层:建立、维护、管理会话连接,例如IE浏览器可以同时打开多个窗口,每个窗口就是一个会话。

表示层:数据格式化、加密解密,例如IE浏览器发送出去的数据包有特定的格式,有时候还会加密,如银行密码等。

应用层:为应用程序提供网络服务,简单说就是将应用程序的通信数据和显示界面衔接起来。发送的时候,收集显示界面的数据并将其封装之后交给下一层处理;接收的时候,将收到的数据显示出来。

OSI协议栈分为7层,最上面3层实际上与应用程序紧密相关,与网络相关性不大。后来就将OSI精简化,最上面3层合为1层,统一为应用层。精简后的协议栈就是现在应用最广泛的TCP/IP,如图1.21所示。

图1.21 TCP/IP

1.4.2 协议栈数据封装过程

发送数据的时候,按由上往下顺序,逐层添加头部协议数据,接收数据的时候,按由下往上顺序剥掉相应的协议头部,如图1.22所示。

发送数据时,传输层给应用层数据添加一个TCP或UDP头部,网络层在传输层的基础上再添加一个头部,链路层又在网络层基础上再添加一个头部,以及一个用作链路层差错校验的尾部。

图1.22 数据封装过程

1.4.3 以太网帧结构

主机从网络中收到的信号,经过物理层处理后,变成01字符串,然后送给链路层处理,链路层会将01字符串还原成数据帧。下面具体介绍以太网帧结构,如图1.23所示。

图1.23 以太网帧结构

以太网帧结构和其他层的协议有点不同,那就是多了一个尾部,其他层协议只有头部没有尾部,这个尾部也称为帧检查序列(Frame Check Sequence,FCS),主要功能是通过特定的算法判断数据帧在介质传输过程中有没有出错,如果发现出错就重传。

以太网帧头部有两种格式,对应不同的功能,第一种(Ethernet_II)用于封装实际业务数据,如IP报文;第二种(IEEE 802.3)用于封装二层协议报文,如STP协议报文,如图1.24所示。

这两种格式的前两个字段一样,都是目标MAC(Destination MAC)和源MAC(Source MAC)。目标MAC和源MAC都是6B,目标MAC指的是目标主机的MAC地址,源MAC指的是自己的MAC地址。如主机A发数据给主机B,那么目标MAC就是主机B的MAC地址,源MAC就是主机A的MAC地址。

Ethernet_II和IEEE 802.3的数据帧格式有差异,如图1.24所示。Ethernet_II帧头部共3个字段,分别是D.MAC、S.MAC和Type;IEEE 802.3帧头部共4个字段,分别是D.MAC、S.MAC、Length和LLC。那么主机收到一个数据帧之后如何判断这是Ethernet_II帧还是IEEE 802.3帧呢?

图1.24 以太网帧的两种不同格式

主机根据S.MAC后面2B的值判断:

①如果这2B的值≥1536(十六进制0x0600),那么这是Ethernet_II帧,用于封装实际业务报文;

②如果这2B的值≤1500(十六进制0x05DC),那么这是IEEE 802.3帧,用于封装2层协议报文。

简单来说,主机收到一个数据帧之后,前6B是目标MAC,紧跟着的6B是源MAC,然后根据接下来的2B的值来判断:如果≥1536,那么这是Ethernet_II,套用3字段的帧格式;如果≤1500,那么就是IEEE 802.3帧,套用4字段的帧格式。

下面介绍两种常见的Ethernet_II帧,如图1.25所示,一种封装IP报文,另一种封装ARP报文。Type值=0x0800表示里面是IP报文,Type值=0x0806表示里面是ARP报文。根据前面的定义,可以看到0x0800和0x0806都大于0x0600,表明都是Ethernet_II帧。

图1.25 常见的两种封装业务报文的帧格式

当这个帧被判断为Ethernet_II格式的时候,跟在Type字段后面的就是数据Data。

IEEE 802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域在IEEE 802.3帧中表示Length,紧跟其后的3B作为LLC字段,如图1.26所示。

图1.26 IEEE 802.3帧结构

逻辑链路控制(Logical Link Control,LLC)由目标服务访问点(Destination Service Access Point,DSAP)、源服务访问点(Source Service Access Point,SSAP)和Control字段组成。

当DSAP和SSAP都取特定值0xff时,IEEE 802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。

当DSAP和SSAP都取特定值0xaa时,IEEE 802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。

DSAP和SSAP其他的取值均为纯IEEE 802.3帧。如STP、DSAP和SSAP取值为0x42,Control字段取值0x03,如图1.27所示。

图1.27 STP报文抓取截图

1.4.4 以太网MAC地址

主机的物理网卡上都带有一个MAC地址(Media Access Control Address,媒体访问控制地址),发送以太网帧的时候必须填上目标MAC和源MAC。如图1.28所示,主机A发送以太网帧给主机B的时候,目标MAC就是主机B的MAC地址,源MAC填自己的MAC地址。

MAC地址共6B、48位,分为两部分,前24位代表厂商代码,由IEEE管理和分配,后24位序列号由厂商自己分配。如图1.29所示。

MAC有3种不同类型,分别是单播MAC、组播MAC和广播MAC。

图1.28 以太网帧中的MAC地址

图1.29 MAC地址由两个部分组成

单播MAC:最左边字节的最低位为“0”时是单播MAC地址,如图1.30所示。目标MAC是单播MAC地址的以太网帧,只能被一个指定主机接收,如主机A发送一个帧,它的目标MAC是00-03-04-05-06-07,这个帧只能被主机B接收。单播MAC大多用于主机间点对点通信。

图1.30 单播MAC的格式和用途

组播MAC:最左边字节的最低位为“1”时是组播MAC地址,如图1.31所示。组播MAC用于同一个组中的设备通信。如路由器A发出一个路由协议报文,这个报文需要同时发给路由器B和路由器C,用来同步路由信息,但是不需要发给主机A,因为主机没有运行路由协议。这个场景中就需要使用组播MAC地址。

图1.31 组播MAC的格式和用途

需要注意的是,路由器的每个接口都有单播MAC地址,同时又可以加入指定的组播组,根据实际需要配置加入特定组播组的时候,就会接收特定组播地址的报文。

组播地址多用于网络设备之间交互协议报文,例如运行OSPF协议的路由器就需要用到组播MAC地址同步路由信息。

广播MAC:48比特全置位为“1”的时候就是广播MAC地址,如图1.32所示。广播MAC用于同一个广播域里面的通信,目的是将数据帧发给所有的主机或设备,如ARP协议。

图1.32 广播MAC的格式和用途

在实际应用中,主机和网络设备都会经常用到广播MAC。

1.4.5 数据帧的发送和接收过程

帧从主机的物理接口发送出来后,通过传输介质传输到目标端。共享网络中,这个帧可能到达多个主机。主机检查帧头中的目标MAC地址,如果目标MAC地址是本机MAC地址,或是广播MAC地址,或是本机侦听的组播MAC地址,主机会继续处理该帧,否则丢弃。

如果接收该帧,主机首先检查帧校验序列(FCS)字段,确定帧在传输过程中是否保持了完整性。如果主机判断帧在传输过程中出错,则丢弃该帧。如果该帧通过了FCS校验,主机会根据帧头部中的Type字段确定将帧发送给上层哪个协议处理。如果Type字段的值为0x0800,表明该帧需要发送到IP处理。在发给IP之前,帧的头部和尾部会被剥掉,如图1.33所示。

图1.33 数据帧的发送和接收

1.4.6 小结

本节首先介绍了TCP/IP的发展历史,以及协议栈的逐层封装过程;然后介绍了以太网的两种不同帧结构,及其对应的应用场景;接着介绍了3种不同MAC地址格式和应用场景;最后介绍了主机收到以太网帧的处理过程。

本节的学习重点是要掌握两种以太网帧的格式,主机如何区分这两种不同的格式,以及各自的应用场景,另外还要掌握3种不同MAC地址的格式和应用场景。