历史发展
集线器 hub
现在计算机之间的通信,包括了点对点通信的功能;但是很明显,这个功能之所以能够实现,并不是因为我的pc和其他的pc之间都连接了一条网线….这是不可能实现的
最初为了能让非星形拓扑结构也能点对点通信,以太网被发明了。以太网搞出来一个叫做集线器的东西;大家都把网线插到集线器上,再由集线器去帮助不同的pc建立点对点通信;最开始,hub的本质是信号放大器;
hub的工作方式很像是广播,但是hub相对广播更加简单直接,它不会对经过它的包做任何改动,不会去识别包的头部,只是物理意味上的转发
显然集线器是工作在物理层的设备
集线器可以将多台设备接成一个星形的拓扑网络;hub可以帮助两台设备实现点对点通信,最初这种功能的实现原理是通过载波聚合;这样带来了一个问题,载波聚合的电缆,一时间只能供给两个设备使用,如果有其它的设备的信息加入,会出现干扰;所在局域网里,使用了一种载波侦听/冲突重发机制,这种机制可以让设备监听当前的线路是否正在被占用,如果被占用,就过一段时间再进行一次侦听,如果线路被释放了,才可以获取到线路的使用权;
如此看来,hub虽然实现了星形拓扑下的点对点通信,但是这个通信并不是没有任何限制的,本质上同时只能够有两台设备使用;
假设场景如下:一楼有3个设备,101 102 103二楼有三个设备201 202 203;此时如果他们六个同时接入一个hub,理论上每两个设备都可以进行通信;但是如果一层存在两个设备进行频繁通信,就会造成线缆资源的拥堵,其它设备会经常抢不到资源;那么如何解决这个问题呢?
网桥
如果能够让一层的三个设备接入一个网络,二层的设备接入另一个网络,那么二层的设备进行相互通信的时候就不会因为一层设备之间的占用而导致拥堵;这样使用两台hub完成接线之后,一层和二层的设备就相互隔离了,那么如果一楼设备想要和二楼设备进行通信,该如何解决?
答:将一楼和二楼的两个hub进行连接;此时,连接两个局域网的设备,就成为了连接两个局域网的桥
网桥会过滤mac,只有mac地址匹配的内容才会被转发,mac地址是数据链路层使用的地址,网桥工作在数据链路层
网桥会对包产生一些修改,也就是如果发送到网桥里的包,网桥会对它进行一个缓存&重构这个包;
交换机
早期的交换机可以看成是多个网桥的集合,当然由于不是一口进一口出,而是多口进多口出,所以交换机中存在mac table;这种简单的交换机工作在L2层(数据链路层);(需要注意的是交换机有一个特性:它会建立一个端口和mac映射的表,当一个新的设备接入的时候它会广播一次这个数据包,如果某个端口有了回应,交换机会建立起这个mac和这个端口的映射,这听起来很像是ARP协议…但是在严格定义的交换机上,并不会涉及到IP地址)
当然随着技术的发展,有的交换机也具有了路由的功能,产生了所谓的L3 switch;
严格意义上的交换机就是多个网桥的集合,不具备arp功能,也就是它只能进行mac地址上的过滤
不过现在纠结这个定义已经没有什么意义了,从产品类别上讲,已经有很多交换机都具备了路由功能;这时候很难去讲它是交换机还是路由器了;
网桥存在的另一个重要意义
如果网桥只是个信号增强器,那么会出现一种问题:
devA1—hubA=========bridge=========lanB
devA2—-|
局域网A中的数据,即使是A1发送给A2的数据,也会被hubA发送到lanB中,这样hubA和hubB之间的线路压力就会很大,因为它不仅仅承担了两个局域网之间的数据通信,它还会无脑转发局域网内部的包;
所以birdge后来具备了mac学习功能,它可以建立mac对应表,假设A1要发送数据给A2,那么hubA会把这个数据包同时发送给A2和lanB;在经过网桥的时候,网桥会进行一个对照,如果发现这个包的目标地址根本就不在lanB;那么会把这个包丢弃;这样就降低了局域网之间的通信压力;
历史的轮回:从hub到switch
让我们来整理一下一个包从发送到被确认接收的过程:
原设备发送包->被hub接收->hub确认是否需要转发(根据IP的前缀确认)->如果需要转发则转发给自己连接的另一个网络->另一个局域网的hub同样会检查这个包是否需要转发->重复这个过程->直到某个hub发现不需要转发,这个包就是发送给自己的局域网中的设备的->发送给自己局域网中的设备;->依照相同的工作模式把回应给发回去;
如果抛开IP前缀确认(实际上查MAC表也能完成这一步,不过效率相对较低);使用HUB已经完全可以建立起我们今天使用的网络;但是hub还是被switch取代了,因为switch拥有单播功能,switch一旦建立某个port和mac的映射关系之后,再遇到这个mac,会对指定的port进行单播而非广播;
这就好像历史又回到了点对点连接的时候,就仿佛有一位工人在帮助你接线;然而时过境迁,现在再也不需要人工去帮助你接线了;设备完成了所有的工作;
