优秀文章推荐:https://www.youtube.com/watch?v=1z0ULvg_pW8, 引用文中的一段总结:“Hubs and Switches are used to create networks. Routers are used to connect networks.”集线器和交换机是用于构建网络的,而路由器是用于连接不同网络的(现在的路由器也拥有构建网络的功能)。

1、集线器工作在计算机网络的物理层,交换机工作在数据链路层,路由器工作在网络层。

2、路由器就是一个拥有完整TCP/IP协议簇的特殊计算机,它不是应用处理计算机,而是用于网络数据的路径规划。

3、集线器现在已经被交换机代替了,并且路由器拥有交换机的功能。这里有一个规律,工作在高层的设备能够拥有工作在低层设备的功能。

4、由于集线器工作在物理层,它不会理会传输的数据内容,也就是网络数据里面的MAC地址或者IP地址和它是没有关系的,它不会把数据拆包并且分析,只会转发数据。集线器的内部没有MAC地址表,所以就无法进行制定端口的数据转发,为了避免数据的冲撞,它采用CSMA/CD(即带冲突检测的载波监听多路访问技术)介质访问控制机制,所以同一个时间只能有两个端口是互联的,其它的端口都处于载波侦听状态,无法使用网络带宽。其实简单的说集线器的内部原理就是将所有端口的之间都连在一起,下图是简单的示意图:(为了绘图简单使用单线代表差分线)

集线器、交换机和路由器_单片机

示意图中有一个集线器和三台主机,主机通过直通网线或者交叉网线连入到集线器(假设集线器有MDIX功能),当主机1发送一帧数据给主机2时,集线器会在内部形成一条绿色通道:

集线器、交换机和路由器_单片机_02

这时候主机1可以向主机2发送数据,但是主机3无法获得数据发送权,只有等主机1和主机2的通讯完成之后主机3才能占用信道。很明显这种设计是有不足的,因为如果存在一台主机4的话,主机1和主机2的通讯的时候主机3和主机4完全可以通讯,但是集线器却无法实现这个功能,主机3和4只能处于等待信道空闲的状态。如果集线器的某个端口连接到10Mbps的因特网中去,这时候主机1、2、3只能获得3.3Mbps的网络带宽。

5、交换机是集线器的升级,它内如拥有一个MAC地址表,也就是说每台设备连入到交换机的时候都会被交换器“索要”自己的MAC地址,然后在内部创建一个MAC地址映射表,例如:

MAC地址 端口号
54 E1 AD 4F 78 5E  1
38 EF AA 23 88 9A 2
E2 F4 23 09 AB C8 3

通过这个MAC地址表我们可以有目的地转发数据到特定的端口,从而弥补集线器的不足,达到网络带宽的更高利用率。这里我们知道要转发数据帧到特定的端口我们需要知道数据帧的目的主机的MAC地址,所以交换机要将网络帧数据解包分析,那么交换机至少要工作在数据链路层才能有资格获取到源MAC地址和目标MAC地址。其实在功能上集线器和交换机是相同的,目的都是互联多台电脑组成一个局域网,但是他们组成的局域网中的主机需要自己合理地分配自己的IP地址,因为集线器和交换机都没有DHCP服务器的功能,两台IP相同的主机会产生冲突。还有个问题就是交换机如果得知每个端口的计算机的MAC地址的,因为在数据链路层没有应用协议,而在IP层才有一个ARP地址解析协议,有网友说,连入到交换机的计算机发送数据帧的时候,交换机会把数据帧里面的源MAC地址提取出来放入自己的MAC地址表,然后再提取目的MAC地址,在MAC表中查找是否有对应MAC地址的计算机,有的话转发数据给该计算机即可,所以计算机想要交换机认识自己,就需要主动发送一个网络帧数据,可以是一个广播数据帧也可以是一个没有的帧。

6、路由器可以解决交换机无法实现的功能,但是路由存在的目的不仅仅是为了弥补交换机的不足,他的主要目的是路由,说白了就是为网络数据导航,告诉网络数据怎么走能够最快的到达目的地。但是我们这里不谈路由,这个太复杂了,我们只谈在局域网中路由器的工作。由于路由器工作在网络层,所以路由器有资格获取网络数据帧的源和目的MAC地址,也拥有一个MAC地址映射表(这个表和交换机的MAC地址和端口的表不一样,这个是MAC地址和IP地址的映射表),就可以完成交换机的工作。路由器还可以知道数据帧的源和目的IP地址,但是在局域网中,不使用IP地址进行匹配,而是使用MAC地址,网络数据中的目的MAC地址和主机的MAC地址是相同的,主机才会接受这一帧数据,所以路由器的功能凌驾于交换机之上,可以这么说,路由器就是一个有计算核心和TCP/IP协议的交换机,它可以转发局域网的数据到另一级网络。