3.3 扩展以太网段:中继器、集线器和交换机
我们在表3.1中已经看到,每个物理以太网标准都有最大电缆长度,这种距离限制的原因和穿越介质时电信号的衰减(attenuation)有关。当你想要连接更远的设备时该怎么办?早期的解决方案是中继器(repeater),这种设备连接两个网段,将其在一端侦听到的所有信号发送到另一端。中继器在10BASE5和10BASE2的时代很常见,当时以太网段通常是单一的共享同轴电缆。
当基于UTP的电缆技术推出时,中继器被集线器(hub)所代替,如图3.2所示。集线器实际上是一个多端口的中继器,网段上的每个设备都连接到集线器,集线器将接收到的所有传输数据重发到其他各个端口。如果8端口集线器接收到端口1上的传输数据,它将把传输数据重发到端口2~8,而不会将其发到接收到传输数据的端口上。从集线器传输的数据都是新鲜的,可以发到最大距离,从而重置了距离计数器。
通过堆叠集线器,你可以支持许多设备的互连。但是,因为每个集线器盲目地重发信号,形成的网络仍然是单一的共享总线,很容易引起冲突。这种网络上的所有设备被称为同一冲突域(collision domain)的组成部分。而且,CSMA/CD要求一次只有一个设备传输。因此,可用的带宽在所有连接的设备之间共享。最终,在基于集线器的以太网中,没有设备能够同时传输和接收。这被称为半双工(half-duplex)通信。随着共享总线上的设备数量的增加,冲突的概率也会增加。最终,不断的冲突使通信无法持续。
因为冲突的倾向和低下的带宽利用率,人们开发出了更智能的互连设备——交换机(switch)。交换机不通过盲目的重新广播建立单一的共享总线,而是检查每个帧的目标地址,只将其转发到相关的端口。如果多个帧同时被发送到同一个目标地址,交换机可以缓存这些帧,一次发送一个,以避免冲突。所以,在交换机中,尽管背板的带宽是共享的,但每个当前通信连接的带宽不是共享的,每组通信中的端口可以使用全部带宽,仅受交换机背板的限制。
由于这些特性,每个交换端口自成冲突域。只要每个端口只连接一个设备,就不会发生冲突。CSMA/CD算法可以禁用,允许连接的两端同时发送和接收,实际上成倍提高了性能。这被称作全双工(full-duplex)通信。
虽然交换机能为单播流量做出智能的转发决策,但是仍然必须支持广播和组播流量,允许发送者传输到所有或者多个连接的设备。当一个交换机端口接收到广播,它会被重传到所有其他端口,这就是交换机和所连接设备被称作共享一个广播域(broadcast domain)的原因。当交换端口接收到组播时,只向与该地址有关的端口转发。
交换逻辑
让我们更深入地探究一下交换机的魔法。交换机必须检查每个输入帧,确定是转发它还是忽略它。为此,交换机必须学习与每个端口相关的MAC地址。这一映射由交换机检查每个输入帧源MAC地址建立。知道源端口和源MAC地址之后,交换机在设计用于快速搜索的特种内存中建立一个查找表,这一内存被称作内容可寻址存储器(Content Addressable Memory,CAM)。
检查输入帧源地址之后,交换机检查帧的目标地址,并搜索MAC地址表中的匹配项。如果没有找到匹配项,交换机向所有其他端口发送该帧,假设位置的目标地址将会响应,然后将其加入地址表。如果找到匹配项,且匹配项不是源端口,交换机将该帧转发到目标地址对应的端口。如果匹配项就是源端口,该帧被忽略。如果你将一个集线器连接到交换机端口,就会看到这种情况。交换机将把连接到集线器的所有设备的MAC地址关联到同一个交换机端口,集线器将会把它连接的设备接收到的所有信号重发到交换端口上。