前言
NAT(Network Address Translation,网络地址转换)
一、NAT出现的背景
首先,我们先了解一下地址转换功能出现的背景。所谓地址,就是用来识别每一台设备的标志,因此每台设备都应该有一个唯一不重复的地址,就好像网上买东西填的地址一样,有了这个地址快递员知道该把包裹送给谁了。网络也是一样,本来互联网中所有的设备都应该有自己的固定地址,而且最早也确实是这样做的。比如,公司内网需要接入互联网的时候,应该向地址管理机构申请 IP 地址,并将它们分配给公司里的每台设备。换句话说,那个时候没有内网和外网的区别,所有客户端都是直接连接接到互联网的。
随着互联网的普及,可分配的地址用光了,导致后来的设备无法接入互联网。这将严重影响互联网的继续发展。解决问题的关键在于固定地址的分配方式。,假如有 A、B 两家公司,它们的内网是完全独立的。这种情况下,两家公司的内网之间不会有网络包流动,即使 A 公司的某台服务器和 B 公司的某台客户端具有相同的 IP 地址也没关系,因为它们之间不会进行通信。只要在每家公司自己的范围内,能够明确判断网络包的目的地就可以了,是否和其他公司的内网地址重复无关紧要,只要每个公司的网络是相互独立的,就不会出现问题。从而大幅节省了 IP 地址。当然,就算是内网,也不是随便分配地址的,因此需要设置一定的规则,规定某些地址是用于内网的,这些地址叫作私有地址,而原来的固定地址则叫作公有地址 。从而大幅节省了 IP 地址。
但是当内网和互联网之间需要传输包的时候,问题就出现了,因为如果很多地方都出现相同的地址,包就无法正确传输了。于是,内网和互联网连接的时候,需要采用这样的结构,一部分是对互联网开放的设备(公网ip),另一部分是内部设备(私有ip)。内网中的设备不能和互联网直接收发网络包,而是通过一种特别的机制进行连接,这个机制就叫地址转换。该机制将内网设备的私有ip地址映射为公网ip地址,再将包发出去。
二、NAT原理
地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号 进行改写。具体的过程我们来看一个实际的例子,假设现在要访问Web 服务器,看看包是如何传输的。首先,TCP 连接操作的第一个包被转发到互联网时,将发送方 IP 地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备 (一般为路由器) 的互联网接入端口的地址。与此同时,端口号也需要进行改写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中。如下图:
| 公有ip和端口 | 私有ip和端口 |
|---|---|
| 100.0.0.1:1000 | 192.168.31.11:8888 |
| 100.0.0.1:1001 | 192.168.31.11:7000 |
| 100.0.0.1:1002 | 192.168.31.12:7000 |
改写发送方 IP 地址和端口号之后,包就被发往互联网,最终到达服务器,然后服务器会返回一个包。服务器返回的包的接收包是原始包的发送方,因此返回的包的接收方就是改写后的公有地址和端口号。这个公有地址其实是地址转换设备的地址,因此这个返回包就会到达地址转换设备。接下来,地址转换设备会从地址对应表中通过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,这样包就能够到达原始的发送方了。在后面的包收发过程中,地址转换设备需要根据对应表查找私有地址和公有地址的对应关系,再改写地址和端口号之后进行转发。当数据收发结束,进入断开阶段,访问互联网的操作全部完成后,对应表中的记录就会被删除。通过这样的的机制,具有私有地址的设备就也可以访问互联网了。从互联网一端来看,实际的通信对象是地址转换设备(这里指的是路由器)。
三、什么是NAPT (PAT)
上面提到的NAT原理,从严格意义上来讲是NAPT(Network Address Port Translation),即网络地址端口转换。也有叫成PAT。早期的地址转换机制是只改写地址不改写端口号的。(即真正的NAT),用这种方法也可以让内网和互联网进行通信,而且这种方法更简单。但是,使用这种方法的前提是私有地址和公有地址必须一一对应,也就是说,有多少台设备要上互联网,就需要多少个公有地址。当然,访问动作结束后可以删除对应表中的记录,这时同一个公有地址可以分配给其他设备使用,因此只要让公有地址的数量等于同时访问互联网的设备数量就可以了。但是局域网内人数过千的话还是需要上百个公网ip。
改写端口号可以解决这个问题。端口号有16 比特,总共可以分配出几万个端口 ,因此如果用公有地址加上端口的组合对应一个私有地址,一个公有地址就可以对应几万个私有地址,这种方法提高了公有地址的利用率。
本文详细介绍了NAT(网络地址转换)的背景、原理及其演变为NAPT(网络地址端口转换)的过程。NAT的出现是为了解决IP地址短缺问题,通过将内网私有地址映射为公网地址实现内网设备访问互联网。NAPT进一步提高地址利用率,通过改写端口号使得一个公网地址可以对应多个私有地址。
690





