在局域网中,交换机是非常重要的网络设备,负责在主机之间快速转发数据帧。交换机与集线器的不同之处在于,交换机工作在数据链路层,能够根据数据帧中的MAC地址进行转发。本章介绍了共享式以太网和交换式以太网的区别,最后重点讲述了交换机进行MAC地址学习以构建MAC地址表的过程,对数据帧的转发原理。

共享式与交换式以太网

共享式以太网

wKioL1aN1vaBeiMcAAH0m8WxFzo770.jpg

    Hub与同轴电缆都是典型的共享式以太网所使用的设备,工作在OSI模型的物理层。Hub和同轴电缆所连接的设备位于一个冲突域中,域中的设备共享带宽,设备间利用CSMA/CD机制来检测及避免冲突。当网络中设备数量较少时,冲突较少发生,通信质量可以得到较好地保证;但是当设备数量增加到一定程度时,将导致冲突不断,网络的吞吐量受到严重影响,数据可能频繁地由于冲突而被拒绝发送。

    通过Hub或同轴电缆接入的终端会共享总线的带宽,接入的终端数量越多,每个终端获得的网络带宽越少;并且一个终端发出的报文(无论是单播、组播、广播),其余终端都可以收到。

    交互式以太网的出现有效地解决了这个问题,它大大较少了冲突域的范围。

换式以太网

wKiom1aN27bTHtIbAAHmfU_mHSo207.jpg

    网桥(Bridge)是一种工作在数据链路层的设备,早期被用在网络中连接各个终端主机。对于终端主机来说,网络好像是透明的,不需要由于网桥的存在而增加或改变配置,所有又称为透明网桥。网桥遵循的协议是IEEE 802.1D,又称为透明桥接协议。

    目前在交换式以太网中经常使用的网络设备时二层交换机。二层交换机和网桥的工作原理相同,都是按照IEEE 802.1D标准设计的局域网连接设备。他们的区别在于交换机比网桥的端口更多、转发能力更强、特性更加丰富。

    二层交换机的端口在检测到网络中的比特流后,它胡首先把比特流还原成数据链路层的数据帧,再对数据帧进行相应的操作。同样,二层交换机端口在发送数据时,会把数据帧转成比特流,再从端口发送出去。二层交换机也采用CSMA/CD机制来检测及避免冲突,但与Hub所不同的是,二层交换机各个端口会独立进行冲突检测,发送和接受数据,互不干扰。所以,二层交换机中各个端口属于不同的冲突域,端口之间不会有竞争带宽的冲突发生。

    由于二层交换机的端口处于不同的冲突域中,终端主机可以独占端口的带宽,所以交换式以太网的交换效率达到高于共享式以太网。

MAC地址学习

MAC地址表初始化

wKioL1aOBCXT9pckAAG8i0Asxr0566.jpg

    为了转发报文,以太网交换机需要维护MAC地址表。MAC地址表的表项中包含了与本交换机相连的终端主机的MAC地址、本交换机连接主机的端口等信息。

    在交换机刚启动时,它的MAC地址表中没有表项。此时如果交换机的某个端口收到数据帧,它会把数据帧从所有其它端口转发。这样,交换机就能确保网络中其它所有的终端主机都能收到此数据帧。但是,这种广播方式转发的效率低下,占用了太多的网络带宽,并不是理想的转发模式。

    为了能够仅转发目标主机所需要的数据,交换机就需要知道终端主机的位置,也就是主机连接在交换机的哪个端口上。这就需要交互机进行MAC地址表的正确学习。

MAC地址表学习过程(1)

wKiom1aOBW3zwJhuAAI2zrMMnMQ301.jpg

    交换机通过记录端口接收数据帧中的源MAC地址和端口的对应关系来进行MAC地址表学习。

    如上图,PCA发出数据帧,其源地址是自己的地址MAC_A,目的地址是PCD的地址MAC_D。交换机在端口E1/0/1收到数据帧后,查看其中的源MAC地址,并添加到MAC地址表中,形成一条MAC地址表项。因为MAC地址表中没有MAC_D的相关记录,所以交换机把此数据帧从所有其它端口都发送出去。

    交换机在学校MAC地址时,同时给每条表项设定一个老化时间,如果在老化时间到期之前一直没有刷新,则表项会清空。交换机的MAC地址表空间是有限的,设定表项老化时间有助于回收长久不用的MAC表项空间。

MAC地址表学习过程(2)

wKioL1aOG5-wQCOLAAHldEwrJxk997.jpg

    同样的,当网络中其它PC发出数据帧时,交换机记录其中的源MAC地址,与接收到数据帧端口相关联起来,形成MAC地址表项。

    当网络中所有的主机的MAC地址在交换机中都有记录后,意味着MAC地址学习完成,也可以说交换机知道了所有主机的位置。

    交换机在MAC地址学习时,需要遵循以下原则:

  • 一个MAC地址只能被一个端口学习

  • 一个端口可学习多个MAC地址

    交换机进行MAC地址表学习的目的是知道主机所处的位置,所以只要有一个端口到达主机就可以,多个端口到达主机反而造成带宽浪费,所以系统设定MAC地址只与一个端口关联。如果一个主机从一个端口转移到另一个端口,交换机在新的端口学习到了此主机MAC地址,则会删除原有表项。

    一个端口上课关联多个MAC地址,比如端口连接到一个Hub,Hub连接多个主机,则此端口会关联多个MAC地址。


交换机对数据帧的转发

单播帧的转发

    MAC地址表学习完成后,交换机根据MAC地址表项进行数据帧转发。

    上图中,PCA发出数据帧,其目的地址是PCD的地址MAC_D。交换机在端口E1/0/1收到数据帧后,检索MAC地址表项,发现目的MAC地址MAC_D所对应的端口是E1/0/4,就把此数据帧从E1/0/4转发,不在端口E1/0/2和E1/0/3转发,PCB和PCC也不会收到目的到PCD的数据帧。

广播、组播和未知单播帧的转发

wKiom1aOJqviULPTAAH008ljAU8174.jpg

    交换机需要把广播、组播帧从所有的端口转发出去(除了源端口)。因为广播和组播的目的就是要让网络中其它的成员收到这些数据帧。

    未知单播帧是指帧的目的MAC地址在交换机MAC地址表中午相应表项的数据帧。由于MAC地址表中续相应表项,所有交换机也要把未知单播帧从其他端口转发出去,以使网络中其他主机能收到。

广播域

wKioL1aOJ-vjTh0zAAIfr3HJ-dk086.jpg

    广播真是指目的MAC地址是FFFF.FFFF.FFFF的数据帧,它的目的是让本地网络中的所有设备都能收到。二层交换机需要把广播帧从除源端口之外的转发出去,所以二层交换机不能隔离广播。

    路由器或三层交换机是工作在网络层的设备,对网络层信息进行操作。路由器或三层交换机收到广播帧,对帧进行解封装,取出其中的IP数据包,然后根据IP数据包中的IP地址进行路由。所以,路由器或三层交换机不会转发广播帧,广播在三层端口上被隔离。

    广播域是指广播帧能够到达的范围。如上图中,PCA发出的广播帧,PCB能够收到,但PCC和PCD收不到,PCA和PCB就属于同一个广播域。广播域中的设备数量较少,广播帧流量就越少,网络带宽的无谓消耗也越少。

    通过网络中使用三层交换机或路由器,可以减少广播域,减少网络带宽浪费。