我们知道,IPv4协议中,IP地址的数量并不能够满足我们现在的需要。除了通过子网掩码划分子网的方式可以一定程度解决这个问题外,还有一个方法——NAT技术。
NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。NAT能够将私有IP转化为对外通信时的全局IP,很多学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;全局IP要求唯一,但是私有IP不需要,在不同的局域网中,可以出现相同的私有IP。
1 NAT IP转换过程
以上图中的10.0.0.10向163.221.120.9发送过程为例:
- 客户端向服务器端发送请求,路由器将源地址从10.0.0.10替换成路由器的全局IP地址202.244.174.37
- 将数据包发送给目的IP地址,服务器要给源IP地址的客户端发送响应
- 路由器再将收到的数据包的IP首部的目的IP地址从202.244.174.37替换回10.0.0.10
上面的就是NAT 技术的整个工作过程,那么它是怎么替换回去的呢?
答:在NAT路由器内部,有一张自动生成的,用于地址转换的表;当10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系。
2 NAPT
那么问题来了,如果在局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据包中的相同的目的IP,如何把它们正确替换成具体的主机呢?NAPT解决了这个问题:
向上面这样,使用IP地址和端口号一起作为识别,在替换时,只替换了IP地址,这时候端口号就可以作为区分的标识了。这种关联关系也是由NAT路由器自动维护的。例如,在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除该表项。
3 NAT技术的缺陷
NAT技术需要依赖这个转换表,所以由此,就有了一些限制:
- 无法从NAT外部向内部服务器建立连接:也就无法从公网访问内部网络服务
- 转换表的生成和销毁都需要额外开销
- 有一些应用虽然是A端口发送数据,但是是B端口接收数据的
等等。