动机
- 由于ipv4地址耗尽,只需/只能从ISP(互联网服务提供商)申请一个ip地址
- 本地网络设备地址变更,无需通告外界网络
- 变更isp时,无需修改内部网络设备ip地址
- 内部网络设备对外界网络不可见,即不可直接寻址(安全)
实现过程
-
替换: 利用nat将外出ip数据包的源ip地址、源端口号替换为nat ip地址、新端口号
-
记录:将上述每对替换信息存储到nat转换表中。
-
再替换:外部回包时,再利用内网出去时的源ip地址,源端口号,替换每个进入内网ip数据报中的目的地址、目的端口号
16-bit端口号字段
可以同时支持60000多并行连接
nat主要争议
- 路由器应该只处理三层功能
- 违背端到端通信原则
- 地址短缺问题应该由ipv6来解决
nat缺点
- 一些安全协议不能跨nat设备使用
- 需要耗费一定cpu资源进行nat操作,需耗费一定的内存资源存储nat
nat技术类型
- 静态nat:将内部本地地址(私有ip)与内部全局本地地址(公有ip进行一对一映射)
- 优点:因为主要用在内网中存在需要对公网提供的服务器的场景,比如:web服务器、邮件服务器、ftp服务器,这样做对外界屏蔽了内网的细节,所以起到了安全的作用
- 缺点:每一个内部ip地址需要独占一个宝贵的公网ip,即使该地址没有被使用,也不能被用作其他的地址转换
- 动态nat:基于地址池的转换,同样是一对一的映射关系。将公网地址放置在一个地址池中,数据包外出时只要在地址池中取出一个公网地址供该私有地址专用,并形成nat映射表项。
当占用一个公网地址的用户在一定时间内没有数据传输时,该公网地址资源被回收到地址池中,供其他用户使用。这种方式不会对数据报头部中的端口地址进行转换。 - 端口地址转换pat:即对数据包的源地址和端口均进行转换,可使得多个内部本地地址同时共享一个公网地址,通过ip+端口号的方式来识别不同的源,也是一种多对一的映射。
对于只申请到少量ip地址甚至只有一个合法的ip地址却经常有很多用户同时要求上网的情况,这种方式是最有效。也是真正意义上缓解ipv4地址紧缺的问题。
nat穿透问题的3种解决方案
用户希望连接内网10.0.0.1
解决方案
-
静态配置nat,将特定端口的连接请求通过地址转换再转发给服务器
-
通过UPnp(互联网网关设备协议)
-
双方之间建立中继,双方都与该中继器建立连接