狭义上的计算机网络路由器,核心职责其实很简单,就是做路由决策。它只负责判断收到的数据包应该发往哪个目的地,或者在不需要的时候直接丢弃,至于其他复杂的网络功能,通常是由专门的设备去独立处理的。
什么是路由器的数据包?
在家用路由器中,数据包的处理其实是一堆功能的集合体。它不仅仅是负责把数据送到该去的地方,还兼任了无线接入点、PPPoE客户端、DHCP服务器、DNS代理、NAT网关以及防火墙等多种角色,甚至有些还带个Web界面供用户管理。
很多号称千兆的家用路由器,在交换性能上可能还凑合,但在NAT性能上往往差远了。NAT技术主要解决的是运营商只给分配一个公网IP的问题,因为只有一个IP,多个设备没法同时直接对外连接,所以需要路由器来帮忙转译。
NAT技术最初没有标准,是厂商们脑洞大开搞出来的,后来才补了标准。它虽然极大增加了网络复杂性,还导致很多协议不支持,甚至衍生出内网穿透技术,但作为IPv4地址紧缺时代的续命技术,它被运营商广泛使用至今。
由于NAT机制的存在,外部主机无法直接主动连接到你家里的设备,因为路由器不知道该怎么转发这些数据。虽然可以通过手工设置端口转发来解决这个问题,但需要注意的是,部分新的家用路由器为了省事,居然取消了这项功能。
顺便提一下,现在的家用路由器功能越来越花哨,除了基础的NAT和路由,有些甚至搞出了所谓的‘孕妇模式’,可能是为了过滤某些网络内容。这也从侧面说明了现代路由器已经变成了一个功能极其复杂的综合网络设备。
路由器会给内网设备分配保留的内网IP,然后记录它们发起请求的端口和公网端口的映射关系。当数据发出去时,源地址会被改成运营商分配的公网IP;服务器回包时,路由器再根据之前的映射关系,把数据反向转发给内网对应的设备。