松茸博客 - NAT
type: channel
link: https://songr.cn/tag/NAT/
items: 家用路由器与NAT

家用路由器与NAT
type: item
date: 2020-01-20T17:37:00+08:00
description: 路由器有家用路由器、企业路由器等，大家最常说的就是指家用路由器。今天我们来分辨一下路由器和家用路由器。路由器是连接两个或多个网络的硬件设备，在网络间起网关的作用，是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议，例如某个局域网使用的以太网协议，因特网使用的TCP/IP协议。这样，路由器可以分析各种不同类型网络传来的数据包的目的地址，把非TCP/IP网络的地址转换成TCP/IP地址，或者反之；再根据选定的路由算法把各数据包按最佳路线传送到指定位置。所以路由器可以把非TCP/ IP网络连接到因特网上。这是百度百科对路由器的解释，解释的非常到位，路由器就是干这个活的。严格来讲“家用路由器”和网络专业上讲的“路由器”完全不是一个概念！如果仅仅从功能上来说，路由器 = 交换机 + NAT。以下“家用路由器”专指家用路由器，而”路由器“专指书上讲的路由器。路由器是工作在网络层的设备，交换机是工作在数据链路层的设备，因此路由器比交换机更高一层，正是因为高了一层，所以才能实现NAT这种功能。一台家用路由器由一个CPU担任网关的角色，一个端口创建一个局域网地址池，连接到交换机芯片上分给四个局域网端口，另一端口接广域网口，与局端设备保持连接，获得一个公网IP。至于无线芯片，其实是连在交换机芯片上的。所以家用无线路由器严格来说产品名称应该是家庭网关。也就是说，家用路由器 = 路由器 + 防火墙 + 交换机 = 防火墙 + 交换机 + NAT。何为NAT我们都知道，一台家用路由器可以允许多台设备同时连接上网，那么当设备通过家用路由器向网络发送请求后，返回的响应到达路由器时，路由器必须要知道该响应对应的是哪台设备发送的请求。我们向网络供应商（ISP）申请网络访问权限时，ISP会给路由器分配一个公网ip，路由器内部的设备只能使用内网ip。NAT的作用就是实现公网/内网ip以及端口的转换。为此，需要一张表，用于记录内外ip和端口的映射关系。假设内网中有两台设备A和B，同时访问同一个外网ip的相同端口。那么在路由器处就会记录如下映射关系：（remote ip_r : port_r)--(local ip_a : a_port)（remote ip_r : port_r)--(local ip_b : b_port)假设恰好a_port和b_port的值相同，那么来自远端的响应数据到达路由器时，路由器就无法确定该请求应该给A还是给B。对于这种情况，NAT采用一个三元组来进行区分：（remote ip_r : port_r)(nat port)(local ip_a : a_port)，即通过增加nat port来进行区分。当A和B请求到来时，为两个请求生成两个尚未使用的端口：a_port和b_port，并记录如下关系：（remote ip_r : port_r)(nat a_port)(local ip_a : same_port)（remote ip_r : port_r)(nat b_port)(local ip_b : same_port)即当A请求到达路由器时，路由器将请求的源ip换成ISP分配的公网ip，并将源端口换成a_port；而当请求B到达路由器时，路由器将请求的源ip换成ISP分配的公网ip，并将源端口换成b_port。当A和B的请求返回时，根据返回的目的端口（返回的目的端口就是请求的源端口）是a_port还是b_port即可确定该将响应给A还是B。路由器和交换机的区别两者都是连接互联网的设备，它们之间主要区别就是，交换机工作在网络的第二层数据链路层，而路由器工作在第三层网络层(延伸ISO七层网络模型)。这个区别是两者各自工作方式的根本区别。路由器可以根据IP地址寻找下一个设备，可以处理TCP/IP协议，而交换机是根据MAC地址寻址的。到这我们就可以明白为什么家用路由器WAN口和LAN口为什不能设置为同一网段了，而单纯的路由器WAN/LAN口是可以在同一网段的。所谓的旁路由只不过是路由器的正经功能而已。