随着internet的发展和网络应用的增多,ipv4地址枯竭已经成为制约网络发展的瓶颈。尽管ipv6可以从根本上解决ipv4地址空间不足的问题,但目前众多的网络设备和网络应用仍是基于ipv4的,因此在ipv6广泛应用之前,一些过渡技术的使用是解决这个问题的主要技术手段。
nat 英文全称 “network address translation”,中文意思是“网络地址转换”,它是一个 ietf(internet engineering task force, internet 工程任务组) 标准,允许一个整体机构以一个公用 ip(internet protocol)地址出现在 internet上。
顾名思义,它是一种把内部私有网络地址(ip 地址)翻译成合法网络 ip 地址的技术。因此nat 在一定程度上,能够有效的解决公网地址不足的问题。
nat 主要可以实现以下几个功能:
数据伪装:
可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也常用来实现共享上网。
端口转发:
当内网主机对外提供服务时,由于使用的是内部私有 ip 地址,外网无法直接访问。因此,需要在网关上进行端口转发,将特定服务的数据包转发给内网主机(外网主动访问内网的情况,外网用户必须要知道访问那个端口可以跳到要访问的主机上)。
负载均衡:
目的地址转换 nat 可以重定向一些服务器的连接到其他随机选定的服务器。
失效终结:
目的地址转换 nat 可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可以使用目的地址转换 nat 透明的把连接转移到一个备份服务器上。
透明代理:
nat 可以把连接到因特网的 http 连接重定向到一个指定的 http 代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的浏览器支持代理连接。
nat 有三种类型:
静态nat
静态nat是指将内网ip转换为公网ip时,内网ip和外网ip的映射关系是一对一的永久映射,可以实现外部网络对内部服务器的访问。
原理图如下所示,内部ip(192.168.1.1)永久映射为外部公网ip(200.1.1.100)。
动态nat
动态nat是指将内网ip转换为公网ip时,ip地址是不确定的,也就是说,只要指定哪些内网ip可以进行转换,以及用哪些合法公网ip作为外部地址,就可以动态的将一个内网ip地址映射到公网ip地址池中的一个公网ip。当可用的合法ip地址略少于网络内部计算机数量时,可以使用动态地址nat。
原理图如下所示,内部ip(192.168.1.1)动态映射为公网ip地址池中(200.1.1.100~200.1.1.110)的一个外部公网ip(200.1.1.100)。
网络地址端口转换napt
网络地址端口转换napt是业界使用最广泛的nat类型,指将多个内网ip动态转换为同一个公网ip,使用不同的端口号来区分不同的主机。
原理图如下所示,内部ip(192.168.1.1)动态映射为公网ip地址池中(200.1.1.100~200.1.1.110)的一个外部公网ip(200.1.1.100)。内网端口1066映射为外网端口1024。
结语
可以看出 nat 这技术是工作在较为底层的网络协议上,操作的是数据包,当然网络的分层也仅仅是逻辑上的概念,所以 nat 技术你既可以使用物理硬件来做,例如路由器之类;也可以是应用软件来做,例如各种代理软件,不用死板的认为涉及到数据包的处理就得是硬件干的活。
当然,具体到 nat,因为它的功用性,一般是在物理层面做的,例如路由器上,毕竟它的主要作用就是让多台电脑使用一个共用 ip 来上网。
如果你使用过虚拟机,大概也能理解你可以给虚拟机设置 nat 上网方式,这样你的主机就相当于一个 nat 设备了,这样就不需要其他的物理设备。
无论你几个主机使用一个 ip,只要用路由器,总是绕不开 nat,因为你的网络肯定要分内网和外网,你连上路由器分配的就是一个内网地址,这样你发的所有数据包源地址都是一个内网地址,所以必须要 nat,除非你是直接怼了 wan 口的网线,用宽带拨号上网。