头图

上一小节介绍了 集线器 ,一种工作于物理层的简单网络设备。由于集线器采用广播的方式中继、转发物理信号,传输效率受到极大制约。

精准转发

为了解决集线器工作效率低下的尴尬,我们需要设计一种更高级的网络设备。新设备根据以太网帧的目的 MAC 地址,将它精准地转发到正确端口:

注释:这里 端口 ( port )指的是转发设备的插口,也可叫做网口。

如上图,中间节点是转发设备,它在内部维护着一张主机 MAC 地址与对应端口的映射表,现与 3 台主机相连。这样一来, 当转发设备接到主机 A 发给主机 C 的数据后,根据目的 MAC 地址搜索映射表,便可将数据准确地转发到对应的端口 3

现在,传输模式变得更有针对性了——数据帧被精准转发到正确的端口,其他端口不再收到多余的数据:

不仅如此,主机 AB 通讯的同时,其他计算机也可通讯,互不干扰。转发设备每个端口是一个独立的冲突域,带宽也是独立的。

集线器的缺陷全部避免了!

交换机

能够根据以太网帧目的地址转发数据的网络设备就是 以太网交换机 ( ethernet switch ):

交换机长相跟集线器没啥区别嘛。当然了,大部分网络设备都是一个布满端口的盒子,关键在于内部构造。

再看看现实中的交换机长啥样:

总结起来,以太网交换机属于 二层网络设备 ,特点如下:

  • 根据目的地址转发以太网帧;
  • 每个端口是独立冲突域;
  • 每个端口带宽独立;

Mac地址学习

交换机完美地解决集线器的缺点,但新问题又来了,映射表如何获得呢?

最原始的方式是:维护一张静态映射表。当新设备接入,向映射表添加一条记录;当设备移除,从映射表删除对应记录。然而,纯手工操作方式多少有些烦躁。

好在计算机领域可以实现各种花样的自动化——通过算法自动学习映射表。我们先来看看大致思路:

初始状态下,映射表是空的。现在,主机 AB 发送一个数据帧 FRAME1 。因为映射表中没有地址 B 的记录,交换机便将数据帧广播到其他所有端口。

由于交换机是从 Fa0/1 端口收到数据帧的,便知道 A 连接 Fa0/1 端口,而数据帧的源地址就是 A 的地址!此时,交换机可以将 A 的地址和端口 Fa0/1 作为一条记录加入映射表。交换机学习到 A 的地址!

接着,主机 BA 回复一个数据帧 FRAME2  。由于映射表中已经存在地址 A 的记录了,因此交换机将数据帧精准转发到端口 Fa0/1 。同理,交换机学习到主机 B 的地址。

当主机 C 开始发送数据时,交换机同样学到其地址,学习过程完成!

这就是 MAC地址自动学习 的基本原理。

小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:


fasionchan
188 声望8 粉丝

慕课网专栏《Python源码深度剖析》作者