计算机网络工程

作者:hingsmy
作者邮箱:hingsmy@gamail.com
本人代为发布,已征得原作者同意

2020 年 10 月 26 日 第7周

Switching Basic 交换基础


Switch use application-specific integrated circuits (ASICs) to build andmaintain their MAC tables 交换机使用专用集成电路(ASIC)构建和维护其MAC表


  • Hardware-based bridging 基于硬件的桥接(ASICs)
  • Wire-speed 线速
  • Low latency 低延迟
  • Low cost 低成本

  • How to learn MAC address 如何学习MAC地址
  • How to forward frame 如何转发帧
  • How to prevent loop 如何防止环路

我们的交换机,它到底是具体是什么工作的?

交换机,它是通过bridge演化过来的,bridge跟hub最大的区别是它有一张表,交换机继承了集线器的衣钵,它里面也有一张表,这张表我们有一个专有的名词叫做MAC table。

在二层当中用来做转发的一个地址结构叫MAC address。那么MAC table是什么意思呢?他就记录了每一台连在交换机上面的主机的MAC地址,比如说交换机连接主机a的MAC地址,它连接在5号端口。交换机连接主机d的 MAC地址,它连接在9号端口。

交换机依据MAC address table进行数据转发。同时交换机是根据硬件进行数据转发的,这种硬件叫做ASICs,它是一种很特别的可以进行写程序的一种硬件,我们可以往里面加载我们写的一些程序。这种硬件它可以用来转发数据,且转发数据非常的快。

Low latency,low cost,wire speed。基本上没有什么延迟的进行一个数据转发。

当一台交换机刚刚打开的时候,它里面的这张MAC address table一定是空白的,当插上一个主机的时候,然后另外再插一个主机的时候,交换机的MAC address table里面就会慢慢的生成一些数据。

这个数据是怎么产生的是课程重点学习的一个方向,how to learn MAC address, 交换机如何学到我们的MAC地址的。

当我的交换机学到MAC地址之后,就需要学习交换机是如何进行转发。当学了交换机是如何进行数据转发了过后,就需要来研究一个在二层网络里面最复杂最麻烦也是最难搞懂的一个问题。就是怎样防止环路。

Switch Address Learning 交换机地址学习

Layer 2 switches remember the source MAC address of each frame received on an interfaceand enter this information into a MAC table 第2层交换机会记住接口上接收到的每个帧的源MAC地址,并将此信息输入到MAC表中

  • When a switch is first powered on, the MAC table is empty 首次打开交换机电源时,MAC表为空白
  • When a device transmits and an interface receives a frame, the switch places theframe's source address in the MAC table 当设备发送数据并且接口接收到帧时,交换机会将帧的源地址放置在MAC表中
  • The switch will flood (broadcast) the network with this frame out of every port except thesource port 交换机将从每个端口(源端口除外)在此网络中广播该帧
  • If a device answers this flooded frame and sends a frame back, then the switch will takethe source address from that frame and place that MAC address in its MAC table 如果一个设备应答此广播帧并发送回复的一帧,则交换机会从该帧获取源地址并将该MAC地址放入他的MAC表中
  • Switch now has both of the relevant MAC addresses 于是交换机现在就有了这两个相关的MAC地址


交换机是如何构建出我们的MAC address table的。

首先交换机刚刚开电,它的MAC address table一定是空的。只有当我的主机连接上去,当我的主机开始有一些数据传送的时候,他才会能够构建出一些数据。

如果只是简单的把这些主机给连上去,这些主机没有发送信息的情况下,交换机也是不知道它的接口连接的是哪一台主机的,也没有办法学到它的 MAC地址。

当我的主机全部连上去了,这个时候我的主机a要和主机b进行通信,假设主机a知道主机b的MAC地址。主机a跟主机B通信用的是MAC地址,主机a为了跟主机b通信,它就会产生一个数据,这里面是一些从上层来的数据,走到第3层会在前面加一个IP地址,接着走到第2层会在前面再加上一个MAC地址。

加上的MAC地址里,前一半是我主机B的MAC地址,即目标mac地址,另一半是主机A的mac地址,即原mac地址。

当我这个数据包到达了交换机之后,此时交换机的那张表是空白的,交换机他会看到我的0/0接口收到了一个二层的数据帧,它的源地址是A,交换机就知道交换机的0号端口连接的 MACaddress。

这就产生了我 MAC table里面第一个记录,fa0/0端口连接的 MAC address。接着交换机继续要转发这个数据,它的目标是要发送给B的 MAC address。

但此时交换机里这张表是空的,当交换机不知道该从剩下的123哪一个接口转发出去的时候,它会做一个最笨的办法,也就是“广播”,从每一个接口都把这个数据给转发出去。

当c跟d收到这个数据的时候,他们会看到这个数据要找B的MAC地址,而他们不是,他们就会把这个包丢弃掉。

当主机b看到这个数据包刚好是给他的,他就会产生回应。当主机b产生回应的时候,它也会产生一个数据包。里面同样有从上层来的数据,到了第3层加上ip地址,到了第2层加上mac地址,其目标MAC地址为A,其源MAC地址为B。

当这个数据包到达交换机的时候,交换机就会看到是从我的0/1接口,收到了一个数据包,这个数据包的源地址是b,他马上做一个记录,在MAC table里面构建出了第二条记录。

交换机接着继续看我要去哪里,我要去主机a,他通过查表,发现主机A的MAC地址,并得知通过fa0/0接口转发.

此时交换机已经知道了如何进行数据转发,所以它就不会再发送广播了。他直接发送一个单播数据,从这边就发送给a了。此时a就会收到来自b这台电脑的回复,

这个过程不断的重复,交换机最终会把所有的接口上面的 MAC地址都学习到。重点强调,就是交换机对于这个数据的转发的这种行为,当交换机的 MAC地址表是空白的或者交换机不知道目标MAC在哪一个接口的时候,他会做一个广播的行为。即,当交换机收到一个未知单播帧的时候,他会做出一个广播的行为。

Switch Forwarding 交换机转发


When a frame is received on an interface, the switch looks at the destination MAC address;then chooses the appropriate exit interface for it in the MAC table. 当在接口上接收到帧时,交换机将查看目标MAC地址;然后在MAC表中为其选择适当的出口接口。

  • When a frame arrives at a switch interface, the destination MAC address is compared tothe MAC table 当帧到达交换接口时,交换机将目标MAC地址与MAC表进行对照
  • If the destination MAC address is known and listed in the table, the frame is only sent outof the appropriate exit interface 如果目标MAC地址是已知的并且在表中列出,则仅从适当的出口接口发送帧
  • If the destination MAC address isn't listed in the MAC table, then the frame will beflooded out all active interfaces except the interface it was received on 如果目标MAC地址未在MAC表中列出,则该帧将被广播到所有活动接口上(接收该帧的接口除外)
  • If a host or server sends a broadcast on the LAN, by default, the switch will flood theframe out all active ports except the source port 如果主机或服务器在LAN上发送广播,则默认情况下,交换机会将帧广播到除源端口之外的所有活动端口上
  • The switch creates smaller collision domains, but it’s always still one large broadcastdomain by default Switch会创建较小的冲突域,但默认情况下始终是一个大的广播域
  • Source MAC is always checked first to make sure it’s in the MAC table 始终先检查源MAC,以确保它在MAC表中


交换机有了它构建的MAC表以后,就会根据这张表来进行数据转发。在二层交换的网络当中,为了防止环路,交换机中间它会选择一条最优的路径出来。

通过实验来确定一个二层网络当中数据转发的路径。实验展示了如何通过查看MAC addresstable来确定一个二层网络当中数据转发的路径。


部分图片来自网络,如有侵权请联系作者删除

文章作者: VYBFI
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 VYBFi的小站
网络工程 网络工程
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝