一、概述
交换机(Switch),在网络通讯中属于非常重要而基础的设备,常见资料往往侧重于介绍某一点或对某个名词的解释,本文试图从用户使用的角度来理解交换和交换机,不过仅限于HCIA的层次,也就是比较浅层但希望是可以比较全面和实用。
二、交换
其实从名字看,我们就能大概知道交换机的作用是在网络中“传递”数据的,而且是默认不带限制的“传递”,但传递这个词比较偏向于一对一的传递,而交换机是多对多的传递,所以交换机这个名字就取的很好。
常见交换机一般会有很多端口,比如24口的、48口的,目的就是要尽可能多的让设备接进来实现互通。
1.一对一
假设现在有两台电脑需要通讯,我们只需要简单的“直连”即可,像下图这样。配置好PC的IP就可以直接互通了。
2.多对多
但我们工作中不可能只有两台电脑,比如一个办公室少说也有三五个人,每人一台电脑该怎么办呢。在很久很久以前其实还有方案就是“集线器”,像下图这样。
集线器的特点是每个端口收到的数据都向其他端口转发,其实对于小规模应用或者一台主发其他设备只收也是可以的。但如果网络比较大,或应用比较多,大量的PC需要互相通信,那集线器这样的东西肯定不行了。因为通信受限于端口的带宽,如果每一个信号都向所有端口转发那集线器就太忙了。
如果让你基于集线器的特性来改造你会怎么办?其实好办,我给PC都编个号(也就是MAC地址),同时让集线器”记住”各端口连的PC的MAC地址问题不就解决了吗。比如下图这样,设备如果记住了MAC地址与端口的对应关系,PC6向PC9发数据时,设备就知道只需要向E0/0/4转发即可。交换机其实就是这么个原理。
那如果单台交换机的端口不够了咋办,没关系可以串联的,比如下图这样。通过MAC地址与端口对应表,PC6如果向PC11发包就只需要走这样的路径:LSW5的E0/0/5->LSW6的E0/0/3->LSW7的E0/0/1。
那现在的问题就变成了,如何在交换机中维护这样一个MAC地址表?那就是ARP协议啦。
三、ARP协议与ARP表
考虑如下的网络结构,如果PC1想要与PC2通讯它该怎么办?
对于PC1来说它知道如下信息:
1)自己的IP
2)自己的MAC地址
3)PC2(目标)的IP
同时它还知道自己与交换机连着的。所以当PC1需要向PC2发数据而它又不知道更多信息的情况下,它可以向交换机发一个广播包“问一问”谁是PC2(通过目标IP)。我们知道广播包可以转发到网络中所有设备的所有端口,所以如果PC2真实存在的话,它一定是能收到的,像下图这样。
在PC2收到ARP广播的同时,网络中所有交换机其实也都收到了,甚至也包括了PC3,所以网络中所有的PC设备可以做如下记录:
192.168.0.11 的MAC等于5489-9893-0811
当PC2记录了上述信息后,它需要回应PC1,所以它会发一个ARP的响应报文来告知PC1自己的MAC地址,像下图这样。
如此各PC可以生成如下的ARP表:
PC1:
PC2:
PC3:
然后有一点不知道你是否注意到了,PC3的ARP表中只有PC1的MAC而没有PC2的,也就是PC1发的ARP报文是广播而PC2发的响应报文并不是广播。原因是网络中不光PC在记录MAC地址,交换机也是有记录的,因为交换机的记录它可以做到将PC2的响应报文原路送回给PC1而不需要广播。
四、ARP与MAC表
前面我们说PC1因为只知道目标IP其他啥也不知道,所以它需要发一个ARP广播到网络中问问目标你到底在不在啊,同时也将自己的MAC地址和IP告知了网络中所有设备,这其中就包括了交换机,所以各交换机可以做如下记录。
当PC2响应ARP包时,各交换机又可以添加一笔如下记录。
如此一来,除了PC机可以记录下ARP表,交换机还能记录下下图这些MAC地址表。
LSW3:
LSW2:
LSW4:
如此,依据PC机的ARP表(IP与MAC对应关系)和交换机的MAC表(端口与MAC对应关系),数据就可以在PC机间高效的传输啦。
五、报文传输
假设网络中PC机已完善了ARP表,交换机已完善了MAC表。
PC1需要向PC2发送一个消息,这个消息只需要知道IP即可,因为PC1的ARP表中有PC2的MAC地址,网卡会自动把这个信息放到报文中并传递给LSW3。LSW3收到报文后可以查询自己的MAC表,发现目的MAC来自E0/0/1,所以它会通过E0/0/1端口将报文传递出去,也就是给了LSW2。同样的LSW2查询MAC表知道要向E0/0/2传递,所以报文传递给了LSW4。LSW4查MAC表知道目标MAC就在自己的E0/0/1端口,它直接传过去就行了,于是PC2就这样收到了来自PC1的报文。
六、回顾
本篇我们了解了交换机的工作原理,以及与交换功能密切相关的ARP协议、ARP表、MAC地址表。
常用命令:
PC机查询ARP表:arp -a
交换机查询MAC表:display mac-address