集线器 (hubs),交换机(switch) 和网桥(bridge)的区别
集线器(hub)
- hub工作在OSI的第一层,发给 hub 的数据包会广播给所有的端口
- hub的是直接的物理连接到每一台设备的网卡,所有有较低的连接丢失风险,因为hub是所有设备共享带宽的一个设备,所以它是半-双工的,所以他会存在冲突,同时发给hub的入站和出站包会存在冲突,需要算法解决冲突,因此hub的性能相对会差一些
- hub本质上是一个多端口中继器,它不管包的内容,只是简单的把某个端口收到的包,再广播给其他所有的端口,所以,一台主机发给另外一台主机的内容会被其他无关的主机监听到。有安全问题
网桥(bridge)
- 物理世界桥是用来连接一个河的两边,而计算机世界桥是用来连接两个物理网段的网络
- bridge和switch都工作在OSI的数据第二层(数据链路层),数据包会根据MAC地址来发给指定的端口,不存在hub的那种不管三七二一就广播带来的安全问题
- 桥会跟踪插到他的接口上的网络的所有主机的地址,当桥的一端的这个网络的数据包发到桥,桥会过滤机制,保证属于这一端的网络的数据包留在本地,而不会被无辜的转发到对面网络(因为本地包,不是发给桥对面的)
- 当桥接受到网络发出来的包的地址不属于桥的这一端,那么他会发到对面去。但是,实际上它并不知道对面是否存在这个地址,只是猜测既然不在这边,那么可能在对面,然后如果对面网络还有其他桥,那么它会发现这个包不在自己这里,又会把包发到其他桥的对面去,所以一个包要到达目的地址所在的主机,需要经过多个桥
- 因为上面这一点,广播和多播(比如arp这种找所有人要地址的包)的这类流量必须经过网络上的所有桥,那么所有的主机都是有机会读到这个广播包的,而网络那么大(特别是桥越多的网络),其实很多包是和自己无关的,那么就会有可能引起广播风暴,从而阻止了单播的流量(就是目的明确的包)
交换机(switch)
- 其实switch本身就是一种bridge,它具备老式bridge的功能,但是解决了一些它的问题
- switch克服了hub的缺点,他可以为每个接入的主机设备分配专用的带宽,提供全-双工的的连接,他利用MAC地址表来做数据包的转发决策,用ASICS和内容寻址寄存器(CAM)表来提高帧的处理率
- switch集hub和bridge的所长于一身,将hub的多端口功能和桥的过滤功能集中在一起使用,只允许目标设备才能见到单播的数据包,所以不会像桥一样可能会阻止单播包
- 交换机允许冗余链接,并且由于为网桥开发的生成树协议(STP),广播和多播运行不会引起风暴
- 交换机跟踪每个接口中的MAC地址,因此它们可以将流量仅快速发送到包的目的地
- 因为上面的这些特点,switch具备更高的性能和安全性
- switch总的来讲,有一下优点:
- switch是即插即用设备。一旦第一个数据包到达,他们便开始学习接口或端口以到达所需的地址,然后用做后续的过滤用。
- switch提供了一种简单的方法来连接以不同速度运行的网段,例如10 Mbps,100 Mbps,1GB和10GB网络
- 交换机正在取代网络内部的路由器,因为它们在以太网网络上转发帧的速度快10倍以上
bridge和switch的其他区别
- 古老bridge只有2到4个端口,而switch其实是一种高性能的多端口的bridge,可以多达几百个端口,本质上switch也是一个bridge设备,它用具备bridge的功能
- 古老的bridge是的包转发是基于软件的,而后来研发的switch则是基于硬件来研发,用芯片来做包的转发决策,性能远比老的bridge优越
- 新的switch可以具有多个生成树实例。而老式bridge只能有一个。
那么为什么switch没有继续使用bridge这个名字呢,因为早期的生产商生产的bridge不符合IEEE的规范(规范从来没有定时bridge只有2个端口),后来者未免与他相提并论,后来干脆不用bridge这个词,直接改用switch,但本质是更好的对规范的实现。
那么以上的这3个物理设备的概念,对应的也存在虚拟的软件实现,如虚拟的bridge网桥,虚拟的交换机,如docker和k8s这种分布式的软件,经常会使用bridge来建立子网以及和宿主机通信等功能