但这种多级结构的集线器以太网也带来了一些缺点。
(1)如图3-24(a)所示的例子,在三个系的以太网互连起来之前,每一个系的10BASE-T 以太网是一个独立的碰撞域 (collision domain, 又称为冲突域),即在任一时刻,在每一个 碰撞域中只能有一个站在发送数据。每一个系的以太网的最大吞吐量是10 Mbit/s, 因此三 个系总的最大吞吐量共有30 Mbit/s。 在三个系的以太网通过集线器互连起来后就把三个碰 撞域变成一个碰撞域(范围扩大到三个系),如图3-24(b)所示,而这时的最大吞吐量仍然是 一个系的吞吐量10 Mbit/s。 这就是说,当某个系的两个站在通信时所传送的数据会通过所 有的集线器进行转发,使得其他系的内部在这时都不能通信(一发送数据就会碰撞)。
(2)如果不同的系使用不同的以太网技术(如数据率不同),那么就不可能用集线器将 它们互连起来。如果在图3-24 中, 一个系使用10 Mbit/s 的适配器,而另外两个系使用 ·98 ·
10/100 Mbit/s 的适配器,那么用集线器连接起来后,大家都只能工作在10 Mbit/s 的速率。 集线器基本上是个多接口(即多端口)的转发器,它并不能把帧进行缓存。
请你举一个简单的代码示例。
根据你的要求,我将为你提供一个简单的代码示例来说明集线器的工作原理。
假设有三个子网:Subnet 1、Subnet 2 和 Subnet 3。它们通过一个集线器连接在一起。每个子网都有一个虚拟机(VM) 作为节点来模拟通信。
代码示例如下:
class Hub:
def __init__(self):
self.subnets = []
def add_subnet(self, subnet):
self.subnets.append(subnet)
def send_message(self, sender_subnet, message):
print(f"{sender_subnet}: Sending message - {message}")
for subnet in self.subnets:
if subnet != sender_subnet:
subnet.receive_message(message)
class Subnet:
def __init__(self, name, hub):
self.name = name
self.hub = hub
def receive_message(self, message):
print(f"{self.name}: Received message - {message}")
def send_message(self, message):
self.hub.send_message(self, message)
# 创建集线器
hub = Hub()
# 创建子网
subnet1 = Subnet("Subnet 1", hub)
subnet2 = Subnet("Subnet 2", hub)
subnet3 = Subnet("Subnet 3", hub)
# 将子网添加到集线器
hub.add_subnet(subnet1)
hub.add_subnet(subnet2)
hub.add_subnet(subnet3)
# 在 Subnet 1 发送消息
subnet1.send_message("Hello, Subnet 2!")
运行以上代码,输出结果将会是:
Subnet
1: Sending
message - Hello, Subnet
2!
Subnet
2: Received
message - Hello, Subnet
2!
Subnet
3: Received
message - Hello, Subnet
2!
这个例子中,通过模拟代码展示了集线器的工作原理。当在 Subnet 1 中发送消息时,集线器会将这条消息广播到其他子网。因此,Subnet 2 和 Subnet 3 都会接收到这条消息。
请注意,这只是一个简单的示例来说明集线器的基本功能。实际上,现代网络中很少使用集线器,而更常见的是使用交换机来实现更高效的数据转发。这是因为交换机能够在每个端口上建立独立的冲突域,从而避免了碰撞域扩大和吞吐量下降的问题。