路由的进化史: 集线器->交换机->路由器->反向代理服务器

210 阅读5分钟

这三种网络设备本质上是处理不同层次的数据,从集线器到交换机到路由器,处理的层次越来越高,功能也越来越复杂。

集线器 (一层)

集线器的作用就是把设备集中在一起,并且支持放大信息。是纯工作在物理层的设备,也无法对集线器进行配置。

在没集线器之前,设备想相互通讯只能两两连接,连接复杂

image.png

因此设计了集线器,要加一个设备不用加这么多线了

image.png

但又引发了一个问题,同一条线同一时间只能一台设备发送消息,太多了会冲突。因此只能通过设计规则避免冲突,也就是网络工程书上常常介绍的 CSMA/CD。监听信道是否有设备在发送,当有空之后再随机等待一段时间发送消息。因此用集线器来连接的设备称为一个冲突域,设备发送消息是相互冲突的。

这里没有什么路由的概念,都是广播,集线器会把消息往所有端口发。

交换机 (二层)

二层数据链路层有一个重要的数据那就是 mac 地址,交换机可以解析这个 mac 地址,于是就知道了包要往哪个设备发。因此多台设备可以相互转发不受影响,因此就不再是一个冲突域了。

image.png

交换机没有 mac 地址,不会存 ip 和 mac 的映射。也就是不能根据 ip 来发消息,但貌似没什么方法可以发送数据链路层的协议,只能借助一下 ARP 协议。

ARP (Address Resolution Protocol) 协议是地址解析协议,因为硬件设备只支持根据 mac 地址接收信息,因此当发 ip 的时候,需要把 ip 解析成 mac 地址才能发表目标设备。

例如当上图的 PC1 要给 PC2 发消息,知道 ip 是没用的,还要知道 PC2 的 mac 地址。一开始 PC1 不知道 mac 地址,所以只能广播,PC2 收到广播就会告诉 PC1 mac 地址,然后就可以发消息了。

image.png

PC1 的 arp 列表为空,所以发送失败了

image.png

arp 协议发送后添加到 arp 表格里面就可以发成功了

image.png

ping 虽然是基于 ip 协议,但交换机转发并没有关心 ip 地址,ip 的左右就是标识某一台设备,因此 ip 可以随便设置,只要不重复没有任何影响。

路由器 (三层)

交换机虽然隔离了冲突域,但不知道 ip 的情况下还是只能广播。而且每个节点都需要知道所有节点的 mac 地址才能进行转发,也就意味着所有节点都需要至少广播一次,而且需要存储所有的 mac 地址。这样效率和成本都比较高。因此需要做一些分组。路由器则作为"组长", 负责和其他组的"组长" 进行通讯。因此也隔离了广播域。

在网络层,ip 的很重要的作用就是分组。常常提到的子网就是一种划分方式。这里就不赘述子网的划分规则了。

为了能当上 "组长", 方便和 "组员"沟通,路由器不仅有一个mac,也会有 ip。由路由器来存 ip 和 mac 的映射关系,"组员" 就可以不用再存其他的 mac 地址,只要和 "组长" 打交道就行了。路由器每一个端口都是一个"组长", 有 mac 有 ip。

pc 设备往往会有一个网关,其实就是一条默认路由,把所有不知道 mac 的 ip 地址往这个地址发。这个地址就是路由器的ip。

image.png

和交换机那个拓扑结构一样,但换成了路由器,PC1 ping PC2 就 ping 不通了。路由器隔离了广播域,导致 arp 无法广播,PC1 就不知道 PC2 的 mac 地址了。就算知道了,发给了路由器,路由器也会丢了,因为路由器没配置路由规则,所以不会进行路由。

image.png

image.png

如果需要路由,需要几步

  1. 给路由器每个端口添加地址,和 PC1 相连的设置为 1.1.1.3/24,和 PC2 相连的设置为 2.2.2.3/24
  2. 设置 PC1 和 PC2 的网关分别为 1.1.1.3 和 2.2.2.3
  3. 路由器配置路由规则 (因为路由器会创建直接路由,因此同一个路由器之间的转发不需要再单独配置静态路由)

像下面那样就可以 ping 通了

image.png

反向代理服务器(四层)

到了四层,就到了传输层。四层的协议核心是增加了端口,主要包括 tcp,udp 协议。这层会解析传输层协议,因此可以猜到会根据端口和传输层协议来进行转发。一般会用到负载均衡服务器上,也就是反向代理服务器。因为我们期望客户端对后端的 ip 只有一个,毕竟公网 ip 比较珍贵,而且后端服务为了稳定性会经常更新,后端ip 会发生变化,且后端服务需要横向拓展。因此需要有一个负载均衡服务器,按端口和协议来转发到后台。

image.png

四层负载均衡方案非常多,有软件也有硬件方案。

阿里的NLB就是典型的四层负载均衡 image.png

反向代理服务器 (四层和七层)

一般七层都会支持四层的转发,七层就是应用层了,也就是会解析应用层的协议,例如根据http 的 url 进行转发,常见的就是 nginx,几乎想怎么转发就怎么转发了,可以通过脚本配置转发方案。

总结

越往下转发性能越差,但功能越来越强,因此一般是场景选择不同的路由方式。路由的发展史就是利用越来越高级别的网络协议进行转发的过程,越往上,协议越复杂,转发逻辑就越复杂。