数据链路层的趣事 - 走进交换机
本篇文章中,会从局域网及其组件开始,着重介绍 TCP/IP 中数据链路层,以及数据的传输介质,最后介绍交换机的发展过程及原理。
在阅读后应该了解如下的内容:
- 什么是局域网及其组件
- Hub 和交换机的区别
- 交换机的转发规则
- Switching 机制
- 现代常用网络结构模型
- 数据帧的格式
- Ethernet2 和 IEEE 制订的标准的区别以及发展史
LAN
在一定的限制区域内,将多个终端设备连接到一起的形成的网络叫局域网。常见就是通过交换机连接起来的多台终端。
局域网中常用以下的组件构成:
终端设备:PC,IP 电话,打印机,移动电话,服务器
连接设备:网卡(NIC),网络介质(网线,无线电波)
网络设备:以太网交换机,路由器,AP(扩散无线信号,通过 WCL 集中控制)
协议:Ethernet,IP,ARP,DHCP
上图作为常见局域网的架构图,可见,交换机对其来说是最重要的部分。
集线器 (Hub)
交换机产生的背景:
对于 2 台 PC 来说,可以将其直接连接起来,实现两台 PC 之间的通信。但对于 3 台甚至更多的设备,仅仅连线就不行了。在这时,先是出现一个叫 HUB 的设备,用于解决连接多台终端的问题。由于 HUB 本身内部的设计(一根总线,总线分出多根线连接其他设备),就决定了有如下的特性:
-
工作在物理层,对收到的信号进行放大,以扩大网络的传输距离。
-
集线器发送数据没有针对性,而是采用广播的形式发送,也就是说当它要向某个节点发送数据时,不是直接把数据发送到目的端口,而是把数据包发送到会集线器相连的所有节点
-
当以 HUB 为中心设备时,网络中某条线路发生了故障并不影响其他的端口工作
但 HUB 有个非常严重的问题,由于本身的设计,导致在同一时间只能有一根线传递数据(半双工工作模式)。
如果 HUB 连接的设备同时发送数据,就会产生冲突。,CSMA/CD,载波监听多路检测技术的出现解决了该问题。
对应实现思路就是:
-
先听后发
-
边听边发
-
冲突停发
-
随机分配
交换机
什么是交换机?
由于 HUB 在连接多台终端时存在的诸多问题,交换机进一步被发明出来。
和 HUB 不同,交换机在设计初,用交换矩阵代替了总线的架构。
和 HUB 相比,存在着诸多的优点:
-
基于硬件转发,转发的速度是线性(忽略交换机本身处理数据的时间),有选择的转发数据帧
-
默认全双工
-
高速,并具有大量的帧缓存(超过交换机的带宽时,可缓存到本地)
-
提供更多的连接端口
-
可拓展,可分为核心交换机和边缘交换机,连接起来的多台交换机同属于同一局域网
交换机的作用
交换机收到数据时,检查数据包中目的 MAC 地址,然后将其从目的端口转发。
转发过程一般分为三种:
- 直通式转发:转发时仅检查前 12 字节(源,目的 MAC 地址),避免不了转发无效残帧(小于 64 字节)
- 存储式转发,检查数据包的所有字节,可靠性高,但有效率的损失
- 无碎片式转发,检查前 64 字节,在可靠性和效率间取舍。
交换机的原理
交换机内部存在一张 MAC 地址表,其中记录了 设备 MAC,端口号,老化时间,VLAN 号
信息。
在不提及 VLAN 的情况下,收到数据时会遵循如下的处理流程:
-
首先查询 MAC 表,是否存在端口号和源 MAC 地址信息。
-
如果存在,不做处理
-
不存在,则将源 MAC 和入口端口记录。
-
-
再次查询 MAC 表,看表中是否存在目的 MAC 地址。
-
如果存在,则单播转发。
-
不存在,进行泛洪操作(广播)。终端收到后,检查二层包头,如果目的 MAC 是自己的话,进行回包,否则丢弃。
-
规范:
- 交换机只记录源 MAC 地址(转发过程通过有来回,双方 MAC 都可以记住)
- 广播帧和组播帧向所有的端口进行转发
- 泛洪:收到未知单播帧(MAC 地址未知)或者广播帧
- 转发:收到已知的单播帧
- 丢弃:FCS 损坏,或者目的 MAC 不是自己
MAC 地址表的老化时间
MAC 地址表项的老化时间为 300 秒。从地址加入后开始计时,如果在老化时间内各端口未收到源地址为该 MAC 地址的帧,那么该地址将从动态转发地址表(由源 MAC 地址、目的 MAC 地址和它们相对应的交换机的端口号)中被删除。静态 MAC 地址表不受地址老化时间影响。
交换机在真正转发时,实际涉及两张表 CAM 和 TCAM 表。
CAM 表(实际上是 MAC 表)用于精确匹配,对应转发结果只有两种情况。如拿 48bit MAC 地址来说,只会出现 48 位完全匹配和不匹配的情况。
而 TCAM (三态内容寻址)表中用于模糊匹配,如 ACL 抓取,匹配 QoS 策略等。
对应匹配结果有三种情况:
- 精确匹配
- 不匹配
- 忽略
思科 Switching 机制
对于交换机和路由器这类转发设备,在转发数据的过程中,控制平面和数据平面是经常被提到的一个概念。
- 控制平面:比如通过路由协议,学习或者配置后生成的路由表,就属于控制平面。
- 数据平面(转发平面):为了更快转发数据,通过控制平面生成一张转发平面的数据表,当有数据需要转发时,直接通过数据平面进行转发,不在查询控制层面。
通常来说,控制平面的转发都需要 CPU 进行计算。而数据平面的转发,是直接的硬件转发,性能更高。
在思科设备中可通过 show ip cef
来查看数据层面的转发表。
对于思科的交换机来说,一般存在三种转发机制:
- 进程转发
- 快速转发
- 思科专有转发
进程转发
可以将进程转发理解成每个数据包都需要经过 CPU 的处理,才能转发。性能较差。
快速转发
对于快速转发来说,第一个数据包会交由 CPU 处理,然后会将其缓存起来,后续去往相同地址数据包都会直接走缓存(硬件转发),不再交由 CPU 处理。简单来说,就是一次路由,多次转发。
路由指的是控制层面,转发指的是数据层面。
思科专有转发(CEF)
Cisco Express Forwarding (CEF) 是 Cisco 专有的转发机制,在思科设备上默认开启。为了实现更快速度的线性转发(硬件),设计了如下的数据结构:
-
Forwarding Information Base (FIB): FIB 就是通过路由表(需要 CPU 计算),而再次生成的一个数据结构。当网络中的路由表发生变化时,FIB 同样也会发生变化。在转发数据时,根据 FIB 直接转发,而不需要看路由表,从而提高效率。
-
Adjacency Table:邻接表,就是在二层链路层维护的一张表,其实就是 ARP 表。用于记录在链路层中,仅需一跳就可以达到的设备。CEF 使用它作为 2 层地址解析,维护了整个 2 层的下一跳地址。
数据链路层的传输媒介
由于Ethernet 的实际转发速度取决于实际的传输介质,一般为:
- 双绞线
- 光纤
- 同轴电缆(早期,淘汰)
双绞线(应用较多)
双绞的目的,为了屏蔽内部的电磁干扰。一般来说,双绞线的速度可以从 10 Mbps 到 40 Gbps.,传输的最大距离是 100 m.
双绞线的线序:
T568B 线序为: 橙白,橙,绿白,蓝,蓝白,绿,粽白,粽
T568A 线序:绿白,绿,橙白,蓝,蓝白,橙,棕白、棕
其实 1,2 发生数据,3,6 接受数据
不同线序的目的:
同种设备连接需要用交叉线(568a,568b),不同种设备需要用直通线(568b)。原因在于同种设备使用直通线会冲突,因为 1,2 都是发送,3,6是接受。
交叉线:交换机和交换机,路由器和路由器,路由器和PC,PC 和 PC
直通线:交换机和路由器,交换机和 PC,交换机和服务器。
光纤
多模光纤(ST),波长 850nm,1310nm,光由二级发光产生,传输距离短,造价低。
单模光纤(SC,LC,FC),波长 1310nm,1550 nm,由激光产生,距离长,造价高。
数据链路层-数据帧的结构
数据链路层的主要职责是负责传输数据,其中常用的协议有:
- 局域网中的 Ethernet 2 协议
- 广域网中的 PPP,HDLC 协议
这里着重介绍下 Ethernet 2 协议,PPP 和 HDLC 请参看这篇:
Ethernet 2
1980 年,由 Digital, Intel, Xerox 主导并用其公司首字符联合开发了 DIX 1.0 标准,该标准也称为 Ethernet I.
1982 年,Ethernet I 被 DIX2.0 取代,该标准沿用至今,就是为人熟知的 Ethernet II 标准。
但由于这两个版本的 Ethernet 协议为私有协议,1983 年由 IEEE 主导,为了将网络设备之间的协议标准化,而不依赖于具体厂商,将其拆分为 MAC 子层和 LLC 子层,其中 MAC 子层,用于处理物理层的访问。LLC 子层,用于上层协议的复用。推出了 802.3 Ethernet 标准。
其中 LLC 层标准为 - 802.2,MAC 子层根据具体的传输介质而不同:
数据链路层 LLC 子层 - 与网络层打交道 | 802.2 | 802.2 | 802.2 | 802.2 |
---|---|---|---|---|
数据链路层 MAC 子层 - 与物理层打交道 | 802.3 | 802.1 | 802.5 | FDDI |
物理层 | 双绞线 | 无线 | 令牌 | 光纤 |
Ethernet II 的数据帧格式:
Preamble:
- 8 字节,用于告知 NIC 网卡有数据传来。
MAC 地址字段:
-
大小为 6 字节,48 bits. 前 24 位由 OUI 组成,后 24 位由 vendor 定义组成.
-
其中第 8 位为 1 时,表示组播,为 0 时表示单播
-
目的地址为
ffff.ffff.ffff
全 F,表示为广播地址 -
目的地址唯一时,为单播地址。
Ether Type:
- 2 字节,表明该以太网帧中封装了那种网络层的协议。
- '0080' - IPV4
- '0806' - ARP
data Unit:
- 数据最小至最大范围为:46 ~ 1500 字节,如果上层协议长度小于 46 字节,必须补位到 46 字节。
FCS:
- 4 字节,用于差错校验。
IEEE 802.3 Ethernet
前 8 字节和 Ethernet II 类似,1 位前导符加上 7 位帧分隔符。
源 MAC 和目的 MAC 也和之前一样,每个 6 字节。
接着 5 字节表示 LLC Header:
Length: 两字节,表示该帧的长度。理论上是 0 - 65534 字节,但由于 Ethernet 帧限制,MTU 最大为 1500 字节。
d:1 字节,表示 DSAP。
s:1 字节,表示 SSAP。
c: 2 字节,表示控制字段
通过 DSAP 和 SSAP 标识内嵌了哪种网络协议,常见值为:
- hex '04' - IBM SNA
- hex '06' - IP 协议
剩下的位置为数据单元和 4 字节的校验和。
但由于 SAP 的设计方式和一些协议并不兼容,SNAP 又被设计出来,用于改善该问题,使其不兼容的协议可以用 802.3 标准通信。
在使用 SNAP 时,同时将 DSAP 和 SSAP 设置为 AA
,Control 设置为 03
.
之后的 5 字节作为 SNAP 的头部:
O:3 字节,表示 Organization Unique Identifier
T:2 字节,表示用到的私有协议。
剩下的同为数据单元和校验和。
虽然说 802.2 + 802.3 整合可以起到 Ethernet 2 的作用,当由于前者的位数更长,所以支持 Ethernet 2 慢慢成为主流。
但有一个问题就出现了,就是如何区分 Ethernet2 和 802.3 协议呢?
在目的 MAC 之后,Ethernet2 用 2 字节表示所用的协议,802.3 用两字节表示帧的长度。
由于在以太网中 MTU 最大值为 1500 字节 - hex '05DC',所以如果作为长度时(802.3),该值一定会小于 1500 字节。
进而在大于 1500 字节时,表示的是 Ethernet2 协议,否则为 IEEE 802.3 协议。
具体在传输时,通过所在 字段,length 和 ethertype 字段,如果大于 1500 表示 Ethernet 2 否则为 IEEE 802.3.
至于在以太网中,为什么 MTU 的最大值设置成 1500 Byte 字节,可以阅读阿里这篇文章.
概括来说,MTU=1500 是在考虑传输效率和常见带宽的一个折中方案。
一般来说,协议的传输用 802.3,用户流量用的是 Ethernet2.
企业网络架构
从扁平网络到分层网络:
在最初的设计时,整体采用扁平式的网络结构,所有的终端设备直接连接交换机,交换机直接连到路由器,从而接入互联网。很明显,这样设计的网络没有冗余,存在单点故障的问题,当交换机或者路由器挂掉时,整个网络都无法正常通信。
随着网络规模的增大以及扁平式网络无法很好的提供服务,逐渐演化成分层式架构,对应也是软件层面上的解耦,各司其职。
分层式架构常分为三层:
- 接入层 :一般使用二层交换机,工作在数据链路层。
- 分布层 :一般使用三层交换机,工作在网络层。
- 核心层:一般使用三层交换机,工作在网络层。
接入层:负责设备接入,并且常用来检查设备是否合规。
分布层( 汇聚层 ):部署策略,提供冗余,容易排错。
核心层:负责高速转发数据.
下面两幅图是在是否添加了核心层的对比:
没有核心层:
添加核心层:
可以发现,如果没有核心层存在的话,核心设备直接相互连接,在拓展性,易用性上,维护成本都存在着极大的挑战。
常见企业架构模型
发展到现在,下图中是较为常见的企业架构模型:
- 企业园区:企业的核心网络
- 企业边缘:
- Internet 端,用于在连接互联网时,进行一些安全产品的防护
- WAN 端,企业分支如何连接仅企业的核心网络,同样需要一些安全产品的防护
- 运营商:这里提供互联网访问,和企业内网(WAN,VPN)用于远程站点的访问。
- 远程站点:公司的分支机构,通过如 VPN 等,连接到企业核心网络。