计算机网络(第二十三题)

38 阅读5分钟

3.从总线以太网到星形以太网

大家知道,传统的电话网是星形结构,其中心就是电话交换机。那么在20 世纪70 年 代中期出现的局域网,为什么不采用这种星形结构呢?这是因为在当时的技术条件下,还很 难用廉价的方法制造出高可靠性的以太网交换机。所以那时的以太网就采用无源的总线结 构。这种总线式以太网一问世就受到广大用户的欢迎,并获得了很快的发展。

然而随着以太网上站点数目的增多,使得总线结构以太网的可靠性下降。与此同时, 大规模集成电路以及专用芯片的发展,使得星形结构的以太网交换机可以做得既便宜又可 靠。在这种情况下,采用以太网交换机的星形结构又成为以太网的首选拓扑,而传统的总线 以太网也很快从市场上消失了。

总线以太网使用 CSMA/CD 协议,以半双工方式工作。但以太网交换机不使用共享总 线,没有碰撞问题,因此不使用CSMA/CD 协议,而是以全双工方式工作。既然连以太网的 重要协议 CSMA/CD 都不使用了(相关的“争用期”也没有了),为什么还叫做以太网呢? 原因就是它的帧结构未改变, 仍然采用以太网的帧结构。

请你举一个简单的代码示例。

以下是一个简单的代码示例,演示如何使用以太网交换机的星形结构进行数据传输。



# 以太网交换机类
class EthernetSwitch:
    def __init__(self, num_ports):
        self.num_ports = num_ports
        self.port_mapping = {}  # 交换表,用于记录MAC地址与端口的映射关系

    def add_mapping(self, mac_address, port):
        self.port_mapping[mac_address] = port

    def transmit_frame(self, frame, source_mac, dest_mac):
        if dest_mac in self.port_mapping:
            output_port = self.port_mapping[dest_mac]
            print(f"Transmitting frame from {source_mac} to {dest_mac} via port {output_port}")
        else:
            print(f"Destination MAC address {dest_mac} not found in the switch's port mapping.")


# 创建一个有4个端口的以太网交换机
switch = EthernetSwitch(4)

# 添加MAC地址与端口的映射关系到交换表
switch.add_mapping('A1:11:11:11:11', 1)  # MAC地址A1:11:11:11:11对应端口1
switch.add_mapping('B2:22:22:22:22', 2)  # MAC地址B2:22:22:22:22对应端口2
switch.add_mapping('C3:33:33:33:33', 3)  # MAC地址C3:33:33:33:33对应端口3

# 传输帧的例子
frame1 = "This is frame 1"
frame2 = "This is frame 2"
frame3 = "This is frame 3"

source_mac1 = 'A1:11:11:11:11'
source_mac2 = 'B2:22:22:22:22'
source_mac3 = 'C3:33:33:33:33'

dest_mac1 = 'B2:22:22:22:22'
dest_mac2 = 'C3:33:33:33:33'
dest_mac3 = 'D4:44:44:44:44'  # 未在交换表中的MAC地址

# 第一个帧从端口1传输到端口2
switch.transmit_frame(frame1, source_mac1, dest_mac1)

# 第二个帧从端口2传输到端口3
switch.transmit_frame(frame2, source_mac2, dest_mac2)

# 第三个帧的目标MAC地址未在交换表中,将无法找到目标端口
switch.transmit_frame(frame3, source_mac3, dest_mac3)

此示例展示了一个简单的以太网交换机类,其中包含添加MAC地址与端口映射关系的方法和传输帧的方法。在交换机中,我们创建了一个4个端口的交换机,并添加了一些MAC地址与端口的映射关系到交换表中。然后,我们用来自不同源MAC地址的帧以及目标MAC地址测试了传输过程。交换机根据交换表中的映射关系,确定目标MAC地址对应的出口端口,并进行帧的转发。在示例中,前两个帧能够正确地从一个端口传输到另一个端口,而第三个帧由于目标MAC地址不在交换表中,无法找到目标端口而失败。

这个简单的示例展示了以太网交换机的工作原理,以及其中的星形拓扑结构如何实现高效的数据传输。

Transmitting frame from A1:11:11:11:11 to B2:22:22:22:22 via port 2

Transmitting frame from B2:22:22:22:22 to C3:33:33:33:33 via port 3

Destination MAC address D4:44:44:44:44 not found in the switch's port mapping.
你的理解是正确的。根据代码示例的输出结果:

第一个帧从源MAC地址 A1:11:11:11:11 传输到目标MAC地址 B2:22:22:22:22,通过端口 2 进行传输。
第二个帧从源MAC地址 B2:22:22:22:22 传输到目标MAC地址 C3:33:33:33:33,通过端口 3 进行传输。
第三个帧的目标MAC地址 D4:44:44:44:44 未在交换机的交换表中,因此无法找到目标端口。

这个示例展示了以太网交换机的工作原理,其中交换机根据交换表中的映射关系,将帧从源MAC地址传输到目标MAC地址的对应端口。如果目标MAC地址在交换表中找不到对应的端口,交换机将无法确定传输路径。