一、网关的本质是什么?
网关的英文Gateway,直译是“门户”或者“出入口”,“网关”就是“网络的关口”,或者说“网络的出入口”,更严谨一点说就是“当前子网的出入口”。当你用“当前子网的出入口”去理解网关后,就会很清晰的将其和路由器的概念区分开来:从网络层视角看,路由器才是那个“网间连接器”和“协议转换器”,它是网关的母体,一个网关仅是对应了路由器上的一个接口。要强调下,路由器一般都充当着网关的角色,但是却不能断言网关一定是路由器。因为路由器只是在网络层基于IP对网络进行分隔和连接,在链路层的交换机也可以基于MAC做类似的事,这里的网关就是交换机了,并且继续往上到应用层,也可以有自己的网关,那里则会基于应用层协议对网络进行管理。交换机通常是运行在网络OSI七层模型的第二层数据链路层,如图中,第三层网络层通常是路由器运行在该层,那么三层交换机就是说明交换机具有了路由器的某些功能,但是三层交换机是不能替代路由器的。交换机既然是利用端口进行网络数据传输,那么它是如何识别数据是谁给谁的呢?其实交换机通电后会自动建立一个端口地址表,也叫MAC地址表它会记录每个设备的MAC地址机和哪个端口连接的,它会有自动学习功能,一开始如果没有地址,每次经过交换机的信息,它都会读取并记录下送信息过来的设备端口MAC地址,如果下次有其他设备送信息给该设备,就直接送达了。最普遍的情况下,转发原则是这样的:交换机收到一个以太帧数据,它自己会比对交换机已经学习到的端口地址表,如果表里存在端口地址,直接在对应的端口转发出去。如果表里不存在,则会向剩下的每个端口(除送信息过来的端口)广播发送一条相同的信息。交换机A和交换机B,现在如果从主机01发一个数据到主机03,设定的前提是,交换机A和B的地址表都是空白。那么首先,从主机01发数据到交换机A,交换机A在收到数据以后,先识别出主机的MAC地址是01(假设是01因为每台设备都是16进制的唯一地址),端口号是1。交换机A查找自己MAC地址表,发现没有(如果有就直接转发),交换机A向其他的所有端口广播。交换机B收到数据信息后,识别并学习源地址和过来的端口号。交换机B查看地址表,发现没有,记录并向除了端口3以外的两个端口发送广播包。最后的情况是,主机02会收到数据一次,不是自己的,丢弃数据;主机03收到数据一次,正好是自己的,接收数据;主机04也收到一次,丢弃。整个转发过程就是这样了。交换机就是为网络而生的。假设有6台设备,现在要实现其中任意两设备之间的端到端的通信,且只有网线可用,这时最简单的架构莫过于“全状态”网络。在全状态网络中,每台设备都独立建立了到其余各台设备的专线,6台设备总共就需要15条线路。此时还看不到什么明显问题,但是当需要接入网络的设备持续增加时就会发现问题越来越明显。假设需要在n台设备间组建一个全状态网络,此时求需要的线路数量本质就是“从n个元素中取2个元素为一组,求全部的组合数”,依据高中的组合计算公式,结果就是n(n-1)/2条线路。而n(n-1)/2本质则是一个一元二次方程,函数图像是一个开口向上的抛物线,又因为n至少为2,所以可以发现其实际的函数图像非常陡峭。如此陡峭的函数曲线,不光意味着随着新的设备不断接入后的网络组建成本会狂飙,也意味着组建巨型网络几乎不可能,因为结构太复杂成本太高了。但此时如果引入一个中心节点情况便会大为改观。仍旧是6台设备间组网,通过与中心节点建立连接,可形成一个星形网络。此时的线路数量一下子就从原来的15下降到6了,腰斩一半还要多。而且随着接入设备的增多,星型网路需要的线路数量的增加是非常平稳的,其函数图像就是一个经过原点的45度直线,在接入网络的设备数量大于3之后,整个图像完全在全状态网络的抛物线之下。但问题是,简单粗暴的将6台设备通过一个中心节点连接的话,中心节点就像只有一个坑位的厕所,其是分时共享的,并不能同时满足全部设备的通信要求。有设备正在使用网络其他设备就必须等待,否则就会冲突,谁也用不了。于是交换机便应运而生:以交换机作为中心节点既能简化组网,又能满足全部设备的同时通信要求。所谓交换机的独享带宽是相对于集线器的共享带宽来说的,它俩在外观上很像,但功能上区别其实挺大。假设想要组建一个小型局域网,如果使用集线器连接,会发现随着接入设备增多,这个网络的通信会越来越卡,其原因就是集线器是个共享带宽的设备。这就像多人分蛋糕,参与分享的人越多,每个人分的越少。但交换机则不然。一台8端口的交换机,你只使用当中的2、3个端口接入2、3台设备,和将全部8个端口插满接入8台设备,在进行网络通信时是没有区别的,并不会因为接入设备变多而出现僧多粥少的局面。集线器本质就是个多端口的中继器,而中继器本质则是个信号放大器。设备间距离太远,网线太长导致信号衰减会影响通信,那就把一条长网线换成两条短网线,中间使用中继器连接,这信号衰减问题就解决了。但一个中继器只能连接两台设备,于是对其进行升级,增加更多端口,这就成集线器了。可是在没发明交换机之前,造成带宽只能分享不能独享的原因又是什么呢?原因是“冲突”。星型网络本质就是要多台设备同时通过一个中心节点通信,这显然会造成冲突。对这个冲突问题,集线器一点办法都没有,它只是个多端口信号放大器而已。这时解决冲突靠的是CSMA/CD协议,这个协议运行在网卡上,而网卡一般又被集成在计算机主板上,所以冲突问题实际是参与通信的计算机自己解决的。但基于CSMA/CD的冲突解决办法效率其实很低。CSMA/CD协议的内容简单说就是,在通信前先检测线路上是否有其他信息在传输,有就等待一个随机的时间,然后再探测线路上有没有其他信息在传输,还是有就又等待一个随机时间,如此循环直到没有就发送。在发送过程中也会持续保持冲突监听。这其实跟一个没有红绿灯的十字路口很像,需要司机自己看路况判断是等待还是直接通过。在车少时大家也许还能达成默契,但随着车辆增多,这种默契会越来越难维持,车速会越来越慢,最后发生堵塞。交换机是如何解决上述问题的呢?简单说就是弱化CSMA/CD协议在冲突处理中的作用,而改由作为中心节点的交换机来扛大梁。这就像给没有红绿灯的十字路口安装红绿灯,司机们不用自己决策来预防路口堵塞,而是统一听从灯信号指挥。这在本质上其实就是实现了一个粗糙的队列。当各个通信设备独立做决策时,因为不知晓其他设备的通信情况,只能依靠探测和随机等待来实现对中心设备的共享,是无法建立通信队列的。但交换机加入进来后,其他设备都与它通信,它就会像开了上帝视角一样俯瞰全局,进而轻松实现全部信息的统筹排队。可以排队了就不会有冲突,而没有了冲突也就实现独享带宽了。简单说就是,交换机是依靠建立队列实现的独享带宽。在交换机那里排队的不是庞大的应用层报文,而是非常小的链路层数据分组,处理单个数据分组的时间非常短,和CPU的时间片是一个级别。这些快速通过的分组到了目的地后又快速组装,用户体验上就是大家都完整的独享了整个带宽。交换机和集线器在工作原理和功能上有显著的区别,主要体现在以下几个方面:
1.数据传输方式
集线器:采用广播方式传输数据。当一个设备发送数据包给另一个设备时,集线器会将这个数据包复制并发送到所有其他端口,即使该数据包并不是为这些端口的设备准备的。这种方式会导致带宽浪费,并且可能引发安全问题。(不管是啥数据,给所有人都发一遍)
交换机:采用直通式或存储转发的方式智能地传输数据。它会记录每个端口连接的设备的MAC地址,当接收到数据包时,根据目标MAC地址直接将数据包发送到指定的端口,而不是广播到所有端口。这不仅提高了带宽使用效率,也增强了安全性。(谁的数据仅发给他一个人)
2.带宽使用
集线器:所有设备共享同一总带宽。例如,在10Mbps的集线器上连接的设备,如果多台设备同时通信,它们必须共享这10Mbps的带宽。
交换机:每个端口都有自己的专用带宽。例如,在10/100Mbps的交换机上,每个端口可以独立地以10Mbps或100Mbps的速度运行,不会因为其他端口的通信而受到影响。
3.冲突域与广播域
集线器:所有端口处于同一个冲突域中,这意味着所有设备之间的通信都会产生冲突,尤其是在网络流量大的时候。
交换机:每个端口都是一个独立的冲突域,减少了冲突的发生。但是,所有的端口仍然处于同一个广播域内,除非通过VLAN等技术来分割广播域。
4.智能功能
集线器:不具备学习能力,不能管理数据流,也不能提供额外的安全或管理功能。
交换机:具有学习能力,能够管理数据流,支持VLAN、QoS(服务质量)、端口镜像等多种高级功能,可以更好地管理和优化网络性能。
交换机相比集线器提供了更高效的数据传输、更好的带宽利用、更低的网络冲突率以及更多的管理和安全功能。因此,在现代网络环境中,交换机已广泛取代了集线器。