交换机连接主机

交换机连接主机
  上篇文章,我们介绍了两个主机直接互连的通信过程。这篇文章,我们引人一个关键成员——交换机,介绍两个主机通过交换机间接互连的通信过程。两个主机直接互连的情况在实际应用中是比较少见的,而通过交换机间接互连是很广泛的,通常同一个简单局域网里的主机都是通过交换机进行互连的。
  我们首先介绍交换机的功能,然后介绍两个主机通过交换机互相通信时交换机的工作流程。
  交换机主要有四个主要功能:学习、洪泛、转发和过滤。

学习

  二层转发的数据通常称为帧(frame)。交换机工作在二层,意味着它只解析和处理二层的头,并且特别关注源和目标的MAC地址。
  交换机内部维护了一个MAC地址与端口的对应表,称为MAC Address Table,简称MAC表。刚开始,MAC表是空的。一个主机(设备)接入交换机的某个端口后,当希望与其它主机通信时就会向此端口发送数据包。交换机从某个端口接收到数据包后,解析二层的头,获得源MAC地址,就能建立此MAC地址与端口的对应关系,并将此对应关系加入MAC表。
  上述建立和维护MAC表的功能就是交换机的学习功能。

洪泛

  根据交换机学习功能的描述,不可避免的会出现在MAC表中找不到对应的目标MAC地址的情况,典型的情况是交换机刚启动后,MAC表还是空的情况。这时交换机会怎么处理这个帧呢?实际是,交换机应对这种情况的措施是将此帧复制多份,并发送给除接收端口外的其它所有端口。这种行为称为洪泛(Flooding)。
  发生洪泛时,连接到交换机端口上的设备都会收到一份相同内容的帧,它们会各自对比帧中的目标MAC地址是否与自己的相同,如果相同就处理,如果不相同就丢弃此帧。

转发

  理想的情况下,交换机接收到一个帧,解析出帧中的目标MAC地址,在MAC表中能找到对应的端口,并将此帧从此端口发送出去,这种行为称为转发(Forwarding)。
  在交换机内部可以通过三种方式进行帧的转发:
  存储转发(Store and Forward):交换机会将整个帧拷贝到内存缓冲区,然后检测帧中是否存在错误,然后再转发。这种方式是三种方式中最慢的,但事实它提供了错误检测,并且可以支持附加特性,例如按照优先级的转发。
  直通式(Cut-Through):这种方式与存储转发方式正好相反,它不存储帧的任何内容,它仅仅检测帧中的目标MAC地址并且转发此帧。这种方式是三种方式中最快的,但是它不提供错误检测和附加特性。
  碎片隔离(Fragment Free):这种方式是前两种方式的融合。它只将检测帧的前64个字节拷贝到内存缓冲区,并检测此64个字节。如果帧出现问题,那么通常可以通过检测前64个字节发现。这种方式是在错误检测和速度之间做了平衡。

过滤

  交换机不会将一个数据包从接收的端口发送出去,即不会让数据包原路返回,这种行为称为过滤。
  过滤通常发生在洪泛的场景下。数据包会被复制多份发给除了接收端口之外的其它端口。比较罕见的场景是,主机发送了一个目标MAC地址是自己的MAC地址的帧,这通常意味这某种错误或者攻击,交换机接收到这样的帧,就会将此帧丢弃,不会转发此帧。

交换机的工作流程

  上面的内容分别介绍了交换机的主要功能,这里我们介绍在实际传输过程中交换机的工作流程。
  如下图:

  为了简化流程,并且将注意力集中在交换机上,我们忽略ARP的过程并假设各个主机都知道其它主机的IP地址和MAC地址。由于交换机工作在二层,只识别MAC地址,不识别IP地址,所以我们也将IP地址忽略掉。
  1.刚开始交换机内部的MAC地址表是空的。主机A希望给主机B发送一些数据Data,由于主机A已经知道主机B的MAC地址,所以主机A就将自己的MAC地址MAC-A和主机B的MAC地址MAC-B附加到Data上,组成帧发送出去。
  2.交换机接收到主机A发送过来的帧,解析其中的源MAC地址MAC-A,得到MAC-A与端口的对应关系,并将对应关系存入MAC表中。这就是交换机的学习功能。
  3.交换机解析帧中的目标MAC地址MAC-B,尝试在MAC表中查找MAC-B,没有找到。此时交换机只有一个选择,就是将此帧复制多份,发给所有的端口,这就是交换机的洪泛功能。洪泛时,交换机不会将帧发送给接收此帧的端口,这就是交换机的过滤功能。
  4.经过交换机的洪泛,主机B和主机C都接收到了内容一样的帧。主机C解析帧,发现目标MAC地址与自己的不同,就将此帧丢弃了。主机B解析帧,发现目标MAC地址与自己的相同,就进行数据的处理。
  5.接收到帧的主机B如果希望发送数据给主机B,可以构建帧,帧中的源MAC是主机B自身的MAC地址MAC-B,目标MAC是主机A的MAC地址MAC-A。
  6.交换机接收到主机B发送的帧,解析帧中的源MAC地址,得到MAC地址与端口的对应关系,并将对应关系存储MAC表中。解析出目标MAC地址MAC-A,在MAC表中查找MAC-A,找到对应的端口,将此帧从这个端口发送出去。这包括了交换机的学习功能和转发功能。