禁止转载,欢迎交流,如有错误请务必指正。
背景
所有设备要上网,要在网络上交换信息,必须要有IP地址,目前我们所用的IP地址大多还是IPv4,由32位的二进制数组成,也就是说IPv4只有2的32次方(40几亿)个IP地址。40多亿只是听起来多,目前世界上网民的数量已经突破了这个数字,再加上越来越多的设备需要连接上互联网,一个网民除了电脑还有手机,平板电脑,甚至现在的电器都有联网的需求。再加上部分地址被留作特殊用途,IPv4的IP地址早就成为稀缺资源。
如果可以让一个IP地址被重复利用,就可以一定程度上解决这个问题,于是就有了NAT。
解决方法
简单来说,NAT(Network Address Translation)使一些IP地址可以在内网被重复利用,并在内网的这些设备需要与外网通信的时候,通过地址转换把内网IP地址转换成公网IP地址。
这些可以重复利用的IP地址叫做内网IP。在所有IPv4地址中,部分地址被拿了出来当作内网IP,这些IP不会出现在外网。比如小型局域网中最常见的192.168开头的IP地址,就是内网IP,还有10开头的,172.16开头的。
局域网中DHCP服务器会给设备动态分配内网IP地址,比如你的手机是192.168.1.100,电脑是192.168.1.101,可能每个局域网中都有192.168.1.100这个IP地址,这样就达到了重用IP地址的目的。
NAT的作用(PAT)
显然这么多设备都用相同IP地址,不可能可以直接在外网上通信,这时NAT就发挥了作用。在这些使用内网IP的设备想要与外网通讯时,会经过地址转换,通常是在路由器上完成的。当与外网通讯的请求经过路由器时,路由器会把数据包中的源IP地址和端口转换成一个公网的IP地址和路由器上一个可用的端口。
比如192.168.1.100这个设备在用5000端口访问139.180.202.154的80端口,路由器把这些数据记录进地址转换表,然后把192.160.1.100替换成自己拥有的公网IP和路由器上一个可用的端口,再发送到139.180.202.154。这里所谓可用的端口就是路由器上还没被地址转换表记录的端口,而端口的范围是1到65535,也就是一个路由器,一个公网IP就可以让六万多设备同时访问互联网。
NAT的其他方式
上面说的其实只是NAT的其中一种方式,叫PAT(Port address translation),端口地址转换,也是最常用的。除了PAT以外,NAT还有动态NAT和静态NAT两种方式。
动态NAT的用处非常小,它与PAT的不同指出在于它并不记录端口,也就是说一个内网个IP地址在同一时间内只能对应一个外网IP,并不能真正的实现多个设备用同一个公网IP上网。
静态NAT则是手工的将某个内网地址(和端口)与外网地址(和端口)进行匹配。上面所说的最常用的PAT实现的是内网设备访问外网,而静态NAT通过手动匹配则可以实现外网设备访问内网。比如192.168.1.105是一台Web服务器,那么可以把他和自己拥有的公网IP的80端口绑定在一起,那么外网设备访问这个IP的80端口的时候,路由器就会把这个请求转发给192.168.1.105,这也叫端口映射。