网络地址翻译NAT
为什么提出NAT(net address translate NAT)?
- IPv4总地址池已于2011年2月3日枯竭
- 然而每个上网设备都需要上网资源,包括IPv4地址
解决方案:私有地址
- 不可路由的地址、但仍可用于广域网链路上
- 不再具备唯一性
- 而NAT正是将私有IP地址和公有IP地址之间的转换的一种工具
私有地址IP范围:
除此之外还有PAT(port address translate):将多个私有IP地址影射到同一个公有IP地址的不同端口
两种技术上其实没有本质的不同
NAT工作原理
- NAT是一个IP地址耗尽的快速修补方案
- 当内网需要和外网通信的时候,NAT完成私人地址转换成合法的globleIP地址
- NAT转换器能够维护一个地址转换表,以便回来的分组能够找到它的出处,当回来的分组到达NAT转化器的时候,它查找地址转换表以获得目标机的私人地址,并转换地址之后发往目标机
例子:这台有私人地址的内网的主机要访问右边的公网里面的Web服务器:
- 私人地址的主机先完成它的封装,封装好的数据来到NAT BOX后,NAT转化器把它的源IP和源端口分别替换为一个公网的IP地址 140.203.14.66 和一个端口号5001,并且呢它把这一个替换记载到它的地址转换表里面(索引就是置换之后的端口号5001)
- 转换后的分组被送到外网,在外网按照IP寻址,MAC寻址,最后定位到Web server,Web server收到这个HTTP的请求它会把它打开,找到请求所对应的资源,封装好作为应答(封装好的这个头部里它的源IP、目的IP 源端口和目的端口和来时候的那个报文的这两个参数分别做了交换)
- 当这个应答穿过互联网来到NAT转换器的时候,NAT转换器通过查找5001目的端口,查找到它表里边的对应的私人的地址和端口,接着下来呢就把到达报文的目的的IP和目的的端口置换为表里边记录的 10.0.0.3 和 5503,转换后的分组发到 10.0.0.3 这台主机所在的子网,最后通过MAC寻址,定位到这台主机
NAT带来的问题
- 违背了IP的结构模型(每个IP地址唯一地标识了一台机器)
- 将互联网改变成了“面向连接”的网络,NAT转换器维护着连接的状态,一旦它崩溃,连接也没有了
- 违背了最基本的协议分层原则
- 如果传输层不是采用TCP或UDP,而是采用了其它的协议,NAT将不再工作
- 有些应用会在payload中插入IP地址,然后接收方会提取出该IP地址并使用,但是NAT转换器对此一无所知,导致该类应用不再有效
- NAT让一个IP地址可以承载61440(65536-4096)个私人地址(超载,PAT)
无NAT服务的网络中使用的私有地址
所以每个私网内部是可以进行通信的,但是私网之间不能相互通信,私网也不能和外网进行通信