网络包从一个网口进入交换机的内部,通过MAC转发表进行转发到对应的网口出去。MAC转发表是如何维护的?怎么知道网络包的消息头中某个MAC地址要走哪个端口的?
第一种情况是收到包时,将发送方MAC地址以及其输入端口的号码写入MAC地址表中。由于收到包的那个端口就连接着发送这个包的设备,所以只要将这个包的发送方MAC地址写入地址表,以后当收到发往这个地址的包时,交换机就可以将它转发到正确的端口了。交换机每次收到包时都会执行这个操作,因此只要某个设备发送过网络包,它的MAC地址就会被记录到地址表中。
另一种是删除地址表中某条记录的操作,是为了防止设备移动时产生问题。比如,我们在开会时会把笔记本电脑从办公桌拿到会议室,这时设备就发生了移动。从交换机的角度来看,本来连接在某个端口上的笔记本电脑消失了。这时如果交换机收到了发往这台已经消失的笔记本电脑的包,那么它依然会将包转发到原来的端口,通信就会出错,因此必须想办法删除那些过时的记录。然而,交换机没办法知道这台笔记本电脑已经从原来的端口移走了。因此地址表中的记录不能永久有效,而是要在一段时间不使用后就自动删除。
只要笔记本电脑连接到会议室的交换机,交换机就会根据笔记本电脑发出的包来更新它的地址表。
过时记录从地址表中删除的时间一般为几分钟,因此在过时记录被删除之前,依然可能有发给该设备的包到达交换机。
总之,交换机会自行更新或删除地址表中的记录,不需要手动维护。当地址表的内容出现异常时,只要重启一下交换机就可以重置地址表,也不需要手动进行维护。
具备管理功能的高端交换机是提供手动维护地址表的功能的,但一般的低端机型中没有这个功能。
以上是交换机的基本工作方式,下面来看一些特殊情况下的操作。比如,交换机查询地址表之后发现记录中的目标端口和这个包的源端口是同一个端口。当交换机发现一个包要发回到原端口时,就会直接丢弃这个包。
另外一种情况,如果地址表中找不到指定的MAC地址,可能是因为具有该地址的设备还没有向交换机发送过包,或者这个设备一段时间没有工作导致地址被从地址表中删除了。这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。这样做不会产生什么问题,因为以太网的设计本来就是将包发送到整个网络的,然后只有相应的接收者才接收包。只要返回了响应包,交换机就可以将它的地址写入地址表,下次也就不需要把包发到所有端口了。
此外,如果接收方MAC地址是一个广播地址,那么交换机将包发送到除源端口之外的所有端口。广播地址(broadcast address)是一种特殊的地址,将广播地址设为接收方地址时,包会发送到网络中所有的设备。MAC地址中的FF:FF:FF:FF:FF:FF和IP地址中的255.255.255.255都是广播地址。
本文摘取自周自恒翻译的户根勤编写的《网络是怎样连接的》
网友评论