浅谈网络地址转换(NAT)技术与内网、外网

前言

 我们现在常使用的IP地址是IPv4地址,由四组0-255的十进制数字组成,中间以小数点分隔。Internet上的每一台主机或者路由器都至少有一个IP地址。IP地址(IPv4地址,下文IP地址默认指IPv4)的长度是32位,总数为2的32次方,大约43亿个。


  43亿这个数字是远远不够地球上70亿人的上网设备来分配的。为了快速解决IP地址匮乏的这个问题,NAT技术诞生了。


------------------------------------------------------------------


  NAT(Network Address Translation),中文名唤作网络地址转换,诞生于IP地址匮乏的时代。

  NAT的基本思想是ISP(Internet服务提供商)为每个家庭或者公司分配一个IP地址,这个IP地址用作Internet流量的传输,也就是大家常说的外网IP地址或者公网IP地址。在客户网络的内部,每台计算机有唯一一个IP地址,即内网IP地址,这些地址主要用于路由内部流量。当一个数据包离开客户网络发送至其他ISP时,需要进行地址转换,把唯一的内网IP地址转换成外网的IP地址。

  这种地址转化使用IP地址的三个范围,这些地址已被声明私有化,任何内网中的设备可以任意使用这些地址,但是在这三个范围内的IP地址不允许出现在Internet(外网)上,这三个保留的地址范围是:

    10.0.0.0~10.255.255.255/8

    172.16.0.0~172.31.255.255/12

    192.168.0.0~192.168.255.255/16

  他们分别可以容纳16777216、1048576、65536台主机。一般家里用无线路由器,就用到了网络地址转换技术,我们连上wifi后分配的IP地址一般是以172或192为开头。学校或者大企业里面的网络可能会用到10开头的地址范围。

  NAT将内网外网划分好之后,是如何使内网的设备访问外网的呢?

  如下图,当计算机A在内网(假设IP为10.0.0.1)想去访问一个Internet上的网站S(假设IP地址为54.223.189.245)时,A的数据包需要先经过一个NAT盒子(NAT box),这个盒子先将A的IP源地址转换成外网的真实IP地址(假设IP为121.0.0.2),然后将转换后的数据包发送至Internet。


  于是问题来了,当网站S收到这个数据包后,会处理请求,并发送响应的数据包,然而这个数据包的目标地址是121.0.0.2(外网IP),数据包如何返回内网中的A呢?

  

  这里要先介绍一下源端口(Source Port)和目标端口(Destination Port)的概念。当一个进程希望与另一个进程建立TCP连接时,它把自己绑定到一个本机尚未被占用的TCP端口上,这个端口称为源端口,该TCP连接中所有入境的数据包都要被发送至这个端口。同时进程还需要提供一个目标端口,指明数据包到达远程主机后送至哪一个端口处理。每一个出境的TCP数据包都包括一个源端口和目标端口。

  举例来说,如下图,网站服务器S(IP地址为54.223.189.245)的HTTP服务运行在80端口上,公网上的计算机D(IP地址为121.141.56.23)想去访问网站S,于是把自己绑定到本机的33121端口上,并发送请求的数据包,这个数据包中就包含了计算机D的源端口33121和目标端口80。网站S收到请求后,发送响应的数据包,这个数据包中包含了服务器S的源端口80和目标端口3312。



  上面的例子是外网中的一台计算机访问一个网站。在内网中计算机发送的数据包同样存在着源端口和目标端口。NAT盒子做的事情就是对出入境数据包的端口进行修改。

  回到最初举的例子,假设内网计算机A(IP地址为10.0.0.1)发送的请求包的源端口是45421,目标端口是80,请求访问网站服务器S(IP地址为54.223.189.245)。

  当这个出境数据包经过NAT盒子时,其源地址被修改成公网的真实IP(121.0.0.2),源端口被修改一个索引值(假设为50002),这个索引值指向NAT盒子的地址转化表中的某一项,这一表项保存了计算机A的内网源地址和源端口。最后NAT盒子将重新生成的数据包发送出去。

  当网站S响应的入境数据包到达NAT盒子时,数据包经过处理,目的地址由公网IP(121.0.0.2)还原为计算机A的内网IP(10.0.0.1),目标端口由索引值(50002)还原为计算机A的源端口(45421)。还原后数据包可以正常的在内网路由。

  这个过程基本如下图所示。


  如此一来,NAT解决了数据包在内网公网之间的地址和端口的转换问题,暂时缓解了IP地址的短缺,但是它却有着不少的缺点。

  NAT违背了IP的结构模型(每个IP地址唯一标识世界上的一台机器),采用NAT后可能有无数台主机使用10.0.0.1这个IP地址。NAT还打破了Internet的端-端的连接模型。内网中的主机可以通过NAT与一台公网上的服务建立连接,但是反过来却不行,公网上的主机无法与某一内网中的主机建立连接。举个简单的例子来说,你在内网某台计算机上搭建了一个网站,在外网是无法访问的。而且使用NAT后,Internet变得如电路交换网络一样脆弱。NAT盒子为每个经过它的连接维护必要的信息(即映射关系),若NAT盒子崩溃,并且所有映射表被摧毁,所有TCP连接将被摧毁。


  目前的IP地址匮乏,归根结底是IPv4设计者的锅,NAT只是权宜之策。既然NAT这么复杂,有人要问了,在IPv6普及后,NAT是否就会被取缔了呢?答案是不会的。因为NAT已被广泛使用,尤其是家庭和小型企业的网络,即使IPv6普及了,NAT在短时间内也很难被取代。


参考资料:《计算机网络》(第5版)

  • 17
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TaQini852

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值