前文所述,发明以太网交换机(Switch),使得以太网进入交换时代,当前大多数园区网、企业网基本采用交换式以太网技术,人们不再担心产生冲突。它仍然遵循802.3技术标准,数据帧格式方面没有任何改变,从而兼容传统的以太网标准。发展到现在,速率为100Gbps高速以太网端口已大范围进入商用,2017年IEEE批准了802.3bs标准,包括200Gbps、400Gbps的标准,2019年7月16日紫光旗下H3C公司宣称部署了国内首个400Gbps以太网——深圳网络空间与科学技术实验室网络,以太网不断刷新着网络速率极限。下面我们就看看构成交换式以太网的交换机是如何进行工作的。
(一)交换机与集线器的区别
很早以前的集线器(历史文章有专门介绍集线器)是构成以太网的基础设备,其内部只是简单将所有端口连接在一起,当一个端口发来数据时,它只是简单地向其他端口转发信号,工作在物理层,因此当计算机终端多的时候产生冲突在所难免。而交换机拥有一条很高带宽的背板总线和内部交换矩阵。交换机的所有的端口都挂接在这条背板总线上,控制电路收到数据帧以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,内部交换矩阵将在源端口与目标端口间建立一个通路,迅速将数据包传送到目的端口,目的MAC若不存在,才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部MAC地址表中。(下图为集线器与交换机内部结构简单示意图)
左:集线器内部结构 右:交换机内部结构
【小知识】交换矩阵(交换网板)也称为Crossbar,是一种带有多个超高速率接口的硬件芯片,一般用于数据处理芯片之间数据的高速转发或高端交换机跨线卡的数据转发。Crossbar被称为交叉开关矩阵或纵横式交换矩阵。最开始的以太网交换构建在共享总线的基础之上,共享总线结构所能提供的交换容量有限,一方面是因为共享总线不可避免内部冲突;另一方面共享总线的负载效应使得高速总线的设计难度相对比较大。随着交换机端口对“独享带宽”的渴求,这种共享总线的结构很快发展为共享内存结构,后来又演进为目前业界最为先进的Crossbar结构,Crossbar结构的交换矩阵(交换网板)完全突破了共享带宽限制,在交换网络内部没有带宽瓶颈,不会因为带宽资源不够而产生阻塞。
(二)交换机MAC地址表的学习与建立
MAC地址表是交换机进行数据转发的唯一依据,通过查询MAC地址表来转发数据帧。
交换机在加电启动后,其MAC地址表为空,交换机通过动态学习来逐步建立和维护这张表。当一个数据帧交付到交换机的某一端口时,交换机可以学习到源主机的MAC地址和其对应的交换机端口号,但它并不知道目标主机在哪个端口上,于是它向整个广播域发出该数据包,如果目的主机在此网络中,那它收到此数据包后立即回应源主机,交换机自然收到回应的数据包,通过回应数据包就知道了目的主机所接的端口号是多少。通过不断学习,交换机就收集齐所有的MAC地址和端口的映射条目。交换机在其运行过程中持续地维护这张表作为转发数据帧的依据。
以下图为例,交换机加电时其MAC地址表为空,当A主机向G主机发送数据时,交换机在1号端口收到数据帧,它得知MAC地址为A的主机对应交换机端口为1,因此在MAC地址表中加入表项(A,1),但交换机不知道MAC地址为G的主机在哪里,于是它将该数据帧采用广播的方式向所有端口复制广播帧,G主机收到该广播帧,并回应A主机,这样交换机在5号端口上收到了源地址为G的数据帧,就学习到MAC地址为G的主机在5号端口上,下一次就不用广播而直接转发数据帧了。经过不断学习,交换机就掌握了该网络中所有主机和端口的映射表,当一个数据帧到达交换机时他将目的MAC地址取出,并在MAC地址表中查找到目的MAC地址对应表项,然后将数据帧转发到对应的端口。
交换机的地址学习
从下表可以看出,MAC地址表是1对多的映射关系,即一个MAC地址对应唯一一个端口号,一个端口下可以接入多个主机(MAC地址,后续文章再介绍)。
交换机MAC地址表
序号 | MAC地址 | 端口号 |
1 | A | 1 |
2 | G | 5 |
3 | B | 2 |
4 | C | 3 |
5 | D | 4 |
6 | E | 5 |
7 | F | 5 |
8 | H | 5 |
(三)交换机的数据转发方式
交换机的数据转发方式一般有以下三种:
(1)存储转发模式(store-and-forward),这种模式是比较常见的(历史文章里有专门介绍数据交换方式的文章)。当数据帧进入交换机端口后,交换机会把数据帧放到缓存中,主要是检查数据的完整性以及目的MAC地址,只有数据帧的大小在64字节到1518字节之间,而且CRC校验和正确的情况下,交换机才转发这个数据帧,小于64字节的帧会被丢弃。存储转发方式转发的数据都是可靠的,但速度会相对慢一些,是交换机默认的、最常用的一种方式。
(2)直通式(cut-through),直通式转发模式对进入交换机的数据帧,只检查目的MAC地址,然后根据MAC表直接转发数据。这种转发方式比较快,但如果网络上的碎片或者垃圾数据较多的话,这种转发方式带来的后果就是垃圾数据会在网络中占用大量的资源。这种转发模式有一个有趣而形象的名称:热土豆方式,就像拿到一个烫手的山芋,立即就扔出去
(3)无碎片转发(fragment-free),这种方式综合了以上两种方式的特点,既不检查完整的帧,又不是直接转发。它检查帧的前64字节,帧长度大于等于64字节后就根据目的地址进行转发,这样可以避免碎片帧被转发出去。
(四)交换机的端口协商
交换机的端口一般可以设置全双工、半双工模式,端口速率可设置为100Mbps或10Mbps。交换机端口与所连接的设备必须使用相同的双工设置。多数100BASE-TX和1000BASE-T设备支持自动协商特性,即这些设备通过信号来协调要使用的速率和双工设置。然而,如果自动协商被禁用或者设备不支持,则双工设置必须通过自动检测进行设置或在交换机端口和设备上都进行手工设置以避免双工错配——这是以太网问题的一种常见原因(设备被设置为半双工会报告迟发冲突,而设备被设为全双工则会报告runt)。许多低端交换机没有手工进行速率和双工设置的能力,因此端口总是会尝试进行自动协商。当启用了自动协商但不成功时(例如其他设备不支持),自动协商会将端口设置为半双工。速率是可以自动感测的,因此将一个10BASE-T设备连接到一个启用了自动协商的10/100交换端口上时将可以成功地创建一个半双工的10BASE-T连接。但是将一个配置为全双工100Mb工作的设备连接到一个配置为自动协商的交换端口时(反之亦然)则会导致双工错配。
即使电缆两端都设置成自动速率和双工模式协商,错误猜测还是经常发生而退到10Mbps模式。因此,如果性能差于预期,应该查看一下是否有计算机设置成10Mbps模式了,如果已知另一端配置为100Mbps,则可以手动强制设置成正确模式。这里举的例子为100M端口,1G或10G端口同样有协商问题,有的设备之间端口对接还需设置主从关系(即master、slave模式)。
当两个节点试图用超过电缆最高支持数据速率(例如在3类线上使用100Mbps或者3类/5类线使用1000Mbps)通信时就会发生问题。不像ADSL或者传统的拨号Modem通过详细的方法检测链路的最高支持数据速率,以太网节点只是简单的选择两端支持的最高速率而不管中间线路。因此如果过高的速率导致电缆不可靠就会导致链路失效。解决方案只有强制通讯端降低到电缆支持的速率。
今天的篇幅有点长,希望耐心看完。如有不当之处请指正。