分类
协议

以太网帧结构

网络中传输数据时需要定义并遵循一些标准,以太网是根据IEEE 802.3标准来管理和控制数据帧的。了解IEEE 802.3标准是充分理解以太网中链路层通信的基础。


OSI分层模型

OSI分层模型
OSI分层模型

国际标准化组织ISO于1984年提出了OSI RM(Open System Interconnection Reference Model,开放系统互连参考模型)。
OSI参考模型各个层次的基本功能如下:
物理层:在设备之间传输比特流,规定了电平、速度和电缆针脚。
数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。
网络层:提供逻辑地址,供路由器确定路径。
传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。
会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

TCP/IP分层模型

TCP/IP分层模型
TCP/IP分层模型

TCP/IP模型将网络分为四层。
TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发。
TCP/IP模型的核心是网络层和传输层,网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。
最上层的应用层通过各种协议向终端用户提供业务应用。

数据封装

数据封装
数据封装

应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交换信息。
不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。
如上层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段)
数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包)
数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧)
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。

终端之间的通信

终端之间的通信
终端之间的通信

数据链路层控制数据帧在物理链路上传输。
数据包在以太网物理介质上传播之前必须封装头部和尾部信息,封装后的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输。
以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。

帧格式

帧格式
帧格式

以太网上使用两种标准帧格式。
第一种是上世纪80年代初提出的DIX v2格式,即Ethernet II帧格式。
第二种是1983年提出的IEEE 802.3格式。
这两种格式的主要区别在于Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理,IEEE 802.3格式中,同样的位置是长度字段。
不同的Type字段值可以用来区别这两种帧的类型:
当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。
当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。
以太网中大多数的数据帧使用的是Ethernet II格式。
以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。

Ethernet_II帧格式

Ethernet_II帧格式
Ethernet_II帧格式

Ethernet_II的帧中各字段说明如下:

  1. DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
  2. SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
  3. 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0x0806的帧代表ARP协议帧。
  4. 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
  5. 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。

表-各Type值对应的协议

协议
0x0800Internet Protocol (IP) [RFC894]
0x0801X.75 Internet
0x0805X.25 Level 3
0x0806Address Resolution Protocol (ARP)[RFC7042]
0x0808Frame Relay ARP [RFC1701]
0x8000IS-IS
0x8035Reverse Address Resolution Protocol (RARP) [RFC903]
0x8137Novell NetWare IPX/SPX (old)
0x8138Novell, Inc.
0x8100IEEE Std 802.1Q – Customer VLAN Tag Type
0x814CSNMP over Ethernet [RFC1089]
0x86DDIP Protocol version 6 (IPv6) [RFC7042]
0x8808IEEE Std 802.3 – Ethernet Passive Optical Network (EPON) [RFC7042]
0x880BPoint-to-Point Protocol (PPP) [RFC7042]
0x880CGeneral Switch Management Protocol (GSMP)
0x8847MPLS (multiprotocol label switching) label stack – unicast [RFC 3032]
0x8848MPLS (multiprotocol label switching) label stack – multicast [RFC 3032]
0x8863PPP over Ethernet (PPPoE) Discovery Stage [RFC2516]
0x8864PPP over Ethernet (PPPoE) Session Stage [RFC2516]
0x888EIEEE Std 802.1X – Port-based network access control
0x88A8IEEE Std 802.1Q – Service VLAN tag identifier (S-Tag)
0x88B7IEEE Std 802 – OUI Extended Ethertype
0x88C7IEEE Std 802.11 – Pre-Authentication (802.11i)
0x88CCIEEE Std 802.1AB – Link Layer Discovery Protocol (LLDP)
0x88E5IEEE Std 802.1AE – Media Access Control Security
0x88F5IEEE Std 802.1Q – Multiple VLAN Registration Protocol (MVRP)
0x88F6IEEE Std 802.1Q – Multiple Multicast Registration Protocol (MMRP)
表-各Type值对应的协议
Ethernet-II帧抓包
Ethernet-II帧抓包

IEEE 802.3帧格式

IEEE 802.3帧格式
IEEE 802.3帧格式

IEEE 802.3帧长度字段值小于等于1500 (0x05DC)

表-IEEE 802.3帧各字段说明

字段长度(字节)含义
DMAC6目的MAC地址。
SMAC6源MAC地址。
Length2指后续数据的字节长度,但不包括CRC检验码。
DSAP1目的服务访问点,若后面类型为IP帧值设为0x06。
SSAP1源服务访问点,若后面类型为IP帧值设为0x06。
Ctrl1该字段值通常设为0x03,表示无连接服务的IEEE 802.2无编号数据格式。
Data44~1498负载。
CRC4用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。
表-IEEE 802.3帧各字段说明
  1. IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
  2. Length字段定义了Data字段包含的字节数。
  3. 逻辑链路控制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字段相同。

IEEE 802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:

  • 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。
  • 当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。
  • DSAP和SSAP其他的取值均为纯IEEE802.3帧。
IEEE 802.3帧抓包
IEEE 802.3帧抓包

数据帧传输

数据帧传输
数据帧传输

数据链路层基于MAC地址进行帧的传输。
以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。
MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。
发送端使用接收端的MAC地址作为目的地址。
以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。

以太网的MAC地址

以太网的MAC地址
以太网的MAC地址

MAC地址由两部分组成,分别是供应商代码和序列号。
网络设备的MAC地址是全球唯一的。
MAC地址长度为48比特,通常用十六进制表示。
MAC地址包含两部分:
前24比特是组织唯一标识符(OUI,Organizationally Unique Identifier),由IEEE统一分配给设备制造商。
后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其他需要MAC地址的设备)。

单播

数据帧的传播——单播
数据帧的传播——单播

局域网上的帧可以通过三种方式发送。
第一种是单播,指从单一的源端发送到单一的目的端。
每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。
在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。

广播

数据帧的传播——广播
数据帧的传播——广播

第二种发送方式是广播,表示帧从单一的源发送到共享以太网上的所有主机。
广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧
广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。
当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。

组播

数据帧的传播——组播
数据帧的传播——组播

第三种发送方式为组播,组播比广播更加高效。
组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。
组播MAC地址和单播MAC地址是通过第一字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0
当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下通常会使用组播方式。

数据帧的发送和接收

数据帧的发送和接收
数据帧的发送和接收

当主机接收到的数据帧所包含的目的MAC地址是自己时,会把以太网封装剥掉后送往上层协议。
帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。
主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。
如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。
如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。
如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。
本例中,Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉。


相关阅读

VLAN帧的处理和转发规则

发表评论

电子邮件地址不会被公开。 必填项已用*标注