seegongsik
网络

NAT 怎么工作

家里有手机,有笔记本电脑,还有电视。可是在外面的世界看来,你家的地址只有一个。这么多设备,怎么能共用一个地址一起上网呢?秘密就握在家里的路由器手里。

01

多台设备,一个地址

家里用网络的设备不止一台。手机、笔记本电脑和电视都连在路由器上,路由器给每台设备分配一个只在家里有效的地址,这叫私有地址,就像只在一栋公寓楼里才用得上的门牌号。
可是外面的互联网看到的你家地址,只有路由器手里的那一个公网地址。所以设备要出门时,路由器会把私有地址摘下来,换上公网地址再送出去。这就是 NAT,也就是网络地址转换。

NAT
出门的地址203.0.113.7
点一下家里的设备让它出门

点一下家里的设备,把它送出门。三台都用同一个公网地址出去。

不管点哪台设备,出门的地址都一样。手机、笔记本电脑和电视都戴着同一个公网地址出去,所以从外面看,三个请求都来自同一户人家。
这样共用地址是有原因的。现在仍被广泛使用的地址体系,能造出的地址数比世界人口还少,没法给每户人家的每台设备都发一个公网地址。可是地址一样,就冒出一个疑问:回复回来时,路由器怎么知道它该给哪台设备?

02

记下是谁发的

路由器会为每个出门的请求留一条记录,这些记录就是 NAT 表。哪台设备发往外面的哪台服务器,一行一行记下来,比如“电视发往视频服务器”。
这时,前面学过的端口号也一起记上。就算两台设备同时向同一台服务器发请求,每一行的端口号也不同,配对就不会混。每个出门的请求都在表里留下一行,以后回复来了,只要查表就行。

NAT 表 (设备 ↔ 外部请求)
设备 / 端口外部请求
表还是空的
点一下设备发到外面

点一下设备把它发到外面。路由器会把“设备 ↔ 外部请求”的配对一行一行记进表里。

每发出一台设备,表里就多出一行。现在只看表,就能清楚知道哪一行是哪台设备的请求。
这张表就是 NAT 的核心。地址合成一个送出去,是谁发的则由表来记住。表里的行不会永远留着,一段时间没有往来,路由器就会把它删掉。接下来看看,外面的回复回来时,这张表怎么派上用场。

03

把回复送回去

外面的服务器发来了回答。这个回答先到达你家的公网地址,也就是路由器。家里有好几台设备,这个回答该交给谁呢?
路由器翻开刚才记下的表,把回答上的端口号和发来的服务器跟表里的行对一对,就知道这是“电视发往视频服务器的请求的回答”。于是它摘下公网地址,换回电视的私有地址,把回答准确地交给电视。一张表,就把回家的路重新走了一遍。

外部回复到达 (来自 video.example 服务器)
NAT 表
看着表,点对的设备把它送回去

看着外面来的回复,在表里找到配对,点对的设备把它送回去。

点了表指向的设备,回复就回到了原处。点别的设备,跟表对不上,回复就送不过去。
地址合成了一个,但有了表就不会乱。出门时把许多地址合成一个,回来时再照着表分开。你在家看视频、收发消息的时候,路由器也在不停地重复这件事。

04

外面的人不能先进来

这里还有一个额外的好处。回复要进来,表里得有配对,而这个配对是里面的设备先发请求时才有的。
那么,从外面先发起的连接呢?表里没有这样的配对。路由器不知道该交给谁,就直接丢掉。只有从里面发起的连接才能回来。所以 NAT 起到了天然防火墙的作用。

分别点回复和连接。表里有配对就通过,没有就被挡

分别点从里面发起的请求的回复和从外面先发起的连接。表里有配对就通过,没有就被挡住。

从里面发起的请求的回复,表里有配对,所以顺利进来了。从外面先发起的连接没有配对,在门口就被挡住了。
并没有谁特意规定要挡。因为是照着表把回复送回去,自然就成了这样,所以叫它“天然”防火墙。不过,NAT 本来就不是为了安全而设计的,光靠它保护不了整个家。要保护什么、怎么保护,会在安全领域另外讲。

05

小结

用一句话概括:家里的每台设备都有自己的私有地址,出门时要经过路由器,用一个公网地址出去。
路由器把谁发往哪里连同端口号一起记在表里,回复来了就看表,送回对的设备。所以许多设备共用一个地址也不会乱。外面的连接又不能先进来,它还起到了天然防火墙的作用。这就是 NAT。

依次点要点回顾一下

依次点要点回顾一下。(以一个地址出去 → 用表记住 → 把回复送回 → 天然防火墙)

现在你知道了一户人家怎样用一个地址一起上网。家里的设备和外面交换数据的路,算是铺好了。
那么,这条路上实际来来往往的是什么呢?我们最常做的事,就是用浏览器打开网页。下一课讲浏览器和网页服务器交换网页时遵守的约定:HTTP。

一句话总结家里的每台设备都有自己的私有地址,但出门时要经过路由器,用一个公网地址出去,这就是 NAT。路由器把哪台设备发往哪里连同端口号一起记在表里,回复回来时就看这张表,把它准确送回对的设备。所以许多设备共用一个地址也不会乱。从外面先发起的连接在表里没有配对,会被挡住,因此 NAT 还起到了天然防火墙的作用。
← 网络
如果有帮助,请支持我们