网络地址翻译NAT


为什么提出NAT(net address translate NAT)?

  • IPv4总地址池已于2011年2月3日枯竭
  • 然而每个上网设备都需要上网资源,包括IPv4地址

解决方案:私有地址

  • 不可路由的地址、但仍可用于广域网链路上
  • 不再具备唯一性
  • NAT正是将私有IP地址和公有IP地址之间的转换的一种工具

私有地址IP范围:

网络地址翻译NAT

除此之外还有PAT(port address translate):将多个私有IP地址影射到同一个公有IP地址的不同端口

两种技术上其实没有本质的不同


NAT工作原理

  • NAT是一个IP地址耗尽的快速修补方案
  • 当内网需要和外网通信的时候,NAT完成私人地址转换成合法的globleIP地址
  • NAT转换器能够维护一个地址转换表,以便回来的分组能够找到它的出处,当回来的分组到达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服务的网络中使用的私有地址

网络地址翻译NAT

所以每个私网内部是可以进行通信的,但是私网之间不能相互通信,私网也不能和外网进行通信