数据链路层通信
以太网二层数据链路层的寻址方式、帧结构、及 VLAN (Virtual LocalArea Network),其分为LLC(Logical Link Control)逻辑链路控制子层,和 MAC(Media Access Control)媒体访问控制子层,其中,MAC 子层负责以太网的总线访问机制、以太网顿格式、物理寻址方式LLC子层负责以太网帧的收发,并具有帧顺序控制、错误控制制及流控制等功能,用于解决二层计算机网络通信时的广播域问题,另外,VLAN 主要运作在二层交换机上。
当网络中存在2个以太网 ECU 时,可通过点对点方式通信,若存在 3 个及以上以太网ECU时,则需连接交换机(Switch),上图由 4 个以太网ECU 与交换机搭建可构成 LAN(Local AreaNetwork)局域网,LAN 局域网通常指一个区域范围内由多台计算机设备互连成为计算机设备组,在以太网二层中,发送节点如何寻址发送报文给指定接收节点?需基于 MAC 地址寻址。
MAC 地址由6字节(48 位)组成,每个网络设备均含唯一的单播 MAC 地址,回到刚才的问题,发送节点发送的报文中,报头部分包含收发节点的 MAC 地址,发送节点通过物理端口向交换机发送报文。
交换机工作原理
交换机接收报文并传递给 MAC 层解析后,获取该报文源 MA 地址信信息,再根据交换机的源 MAC 地址表,查看对应源 MAC 地址映射的吻理端口,并从该端口将报文发送出去。
交换机的源MAC地址表从哪来?以及又是如何工作?
首先每个交换机都维护一个源MAC 地址表(Source Address Table),简称 SAT,SAT 会列出交换机各个物理端口号 MAC 地址映射关系,比如当前物理端口 4 连接了 MAC 地址(00:16:81:00:00:02)的以太网 ECU3,该映射关系信息存放在 SAT 表中。SAT 表可预先人为的配置,也可通过交换机的自学习能力进行更更新。
MAC 地址表自学习功能
我们知道以太网 ECU 与交换机连接,以太网数据经交换机转发,交换机解析出报文的源MAC 地址信息,并与该顿进入交换机的物理端口号进行映射,两者映射关系信息更新到 SAT表中,随后交换机解析报文的目的 MAC 地址信息,并在 SAT 中查找与之关联的物理端口。交换机根据不同的查询结果对报文处理:
情况 1: 若在 SAT表中查找到对应的物理端口,且报文并未从该端口传入交换机,则交换机将以太网报文从该物理端口发出
情况 2:在 SAT 表中未查询到目的 MAC地址映射的物理端口,交换机则将该报文进行泛洪处理
泛洪:即交换机在所有物理端口中(除发送报文的端口外)发送报文。
以上图举例:ECU1 发送一条报文给 ECU3
ECU1通过物理端口1将报文发送给交换机,交换机 MAC 层解析该报文,提取源 MAC地址信息并与物理端口号1的映射关系添加/更新到JSAT表中,再解析该报文的目的 MAC地址(即 00:16:81:00:00:02),查看 SAT表的映射关系,最后从物理端口 4 发送报文给 ECU3。
注意:交换机的自学习能力仅针对源MAC 地址与物理端口的映时学习
前面介绍的是基于单播 MAC 地址寻址,即点对点通信,当以太网中传输报文的目的地不再是单个具体的接收者,而是一个成员不确定的组时,其数据链路层使用的是组播 MAC地址,任意一个以太网ECU 在包含唯一的单播 MAC 地址基础上,还允许包括一个以上的组播 MAC 地址,通过定义一组成员,组内成员通过共享的组播 MAC 地址接收组内成员。
以图示举例:ECU1 发送一条组播报文
ECU1 发送一条组播报文(组播 MAC 地址 01:0000:00:00:01),经物理端口 1 至交换机,交换机根据组播 MAC 地址表进行批文转发,组播 MAC 地址表对应一组成员/物理端口的关系当交换机查询到该组成员包括ECU1、ECU2 及 ECU4 后,由 ECU1 发送的组播报文经交换机从物理端口2和4转发至ECU2及ECU3。
Byte 5/Bit 0:
0:Unicast address (node address)
1:Multicast address (group address)
Broadcast Address:FF:FF:FF:FF:FF:FF
以太网的通信模式包括:单播、组播及广播,我们可以通过以太网帧的目的 MAC 地址判定该报文的通信模式,首先看下 MAC 地址格式,MAC 地址共6个字节,从高字节到底字节依次传输,MAC地址Byte5 的首位为0时即单播MAC 地址,为1时即组播MAC地址,另外广播MAC地址为FF:FF:FF:FF:FF:FF,了解了MAC 地址格式后,我们整体查看下以太网帧结构,一条以太网帧由PRB 前导码、DA目的MAC地址、SA源MAC 地址、Type字段。
以太网帧
Type: Value <1500(0x05DC)
Ethernet 802.3 Frame
Length in Byte
Type:Value>1536(0x0600),TYPE字段2个字节,含义和取值有关;当type 值大于1536时即为Ethernetll 标准格式;当type值小于等于1500时,即表示此顿报文有效负载的长度,且为Ethernet802.3标准格式,用于标识有效负载中包含的高层协议,图中显示部分Type值与高/层协议对应关系。
Ethernet ll Frame
0x0800:Payload contains IPv4-Packet
0x0806:Payload contains ARP-Packet
0x8100:VLAN Tag(see VLAN)
0x86DD:Payload contains IPv6-Packet
PRB:Preamble(Startoftransmission); 8个字节目前用于兼容早期以太网帧,表示一帧报文的开始
DA:DestinationAddress,目标MAC 地址6个字节
SA:SourceAddress,源 MAC 地址6个字节
Payload:46~1500Byte,负载数据段内容
CRC:Cyclic Redundancy Check,数据段 CRC 校验值
VLAN是由IEEE802.1Q 协议定义,可实现从物理上一个局域网,划分为逻辑上若干个虚拟局域网,即便物理上多个以太网 ECU 连接在同一个交换机,但在逻辑层面进行了隔离,网段划分好之后,各 VLAN 内的广播报文仅在本网段内传播,不同 VLAN 间无法直接互相通信以图示举例:当ECU1(VLAN1)发送一条广播报文时
只有属于同VLAN1域的ECU2会接收该广播报文,其中 ECU3 和ECU4 属于 VLAN2 中,无法直接与VLAN1中的ECU1、ECU2进行二层通信。
VLAN Tag
Type=8100
Ethernet Frame will expanded by VLAN Tag
Typical Priorities:
0-2:Low Priority
3-5:Mid Priority
6-7:High Priority
VLAN Tag:
PRIO:Priority(3 Bit)
CFl:Canonical Form Indicator (1 Bit)
VLAN ID:VLANidentifier (12 Bit)
VLAN 帧在原以太网帧基础上,通过在 SA 与Type 字段间添加了 VLAN 属性的标识,SA后面Type 值为0x8100标识该为 VLAN帧,随后携带了16 位的 VLAN TAG,VLAN TAG又分别PRIO、CFI和VLANID 标识符。
PRIO:长度为 3 bit,表示的优先级,取值范围为 0-7,值越大优先级越高。
CFI: (Canonical Format indicator) 长度为 1bit,标准格式指示位,以太网中 CFI的值默认为0。
VLANID:长度12bits,表示该所属的 VLAN,其中,VLANID 的取值范围0-4095。
VLAN通信过程
当前LAN 以太网中划分为2个VLAN(VLAN 1&VLAN 2),其中VLAN1包括ECU1和ECU2,VLAN2 包括ECU3 和ECU4,当VLAN1的ECU1发送一条以太网给到 ECU2,其中以太网包括 PRB、DA、SA、VLAN Tag、Type、Payload 及 CRC,交换机通过其物理端口接收该以太网帧,解析 MAC 地址信息,并根据 SAT表的映射关系从对应的物理端口发送给ECU2。