NAT(地址转换技术)详解

目录html

NAT产生背景

今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣。他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需。企业利用互联网发布信息,传递资料和订单,提供技术支持,完成平常办公。然而,Internet在给亿万用户带来便利的同时,自身却面临一个致命的问题:构建这个无所不能的Internet的基础IPv4协议已经不能再提供新的网络地址了。web

2011年2月3日中国农历新年, IANA对外宣布:IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会。2011年4月15日,亚太区委员会APNIC对外宣布,除了个别保留地址外,本区域全部的IPv4地址基本耗尽。一时之间,IPv4地址做为一种濒危资源身价陡增,各大网络公司出巨资收购剩余的空闲地址。其实,IPv4地址不足问题已不是新问题,早在20年之前,IPv4地址即将耗尽的问题就已经摆在Internet先驱们面前。这不由让咱们想去了解,是什么技术使这一危机延缓了尽20年。服务器

要找到问题的答案,让咱们先来简略回顾一下IPv4协议。网络

IPv4即网际网协议第4版——Internet Protocol Version 4的缩写。IPv4定义一个跨越异种网络互连的超级网,它为每一个网际网的节点分配全球惟一IP地址。若是咱们把Internet比做一个邮政系统,那么IP地址的做用就等同于包含城市、街区、门牌编号在内的完整地址。IPv4使用32bits整数表达一个地址,地址最大范围就是232 约为43亿。以IP创始时期可被联网的设备来看,这样的一个空间已经很大,很难被短期用完。然而,事实远远超出人们的设想,计算机网络在此后的几十年里迅速壮大,网络终端数量呈爆炸性增加。并发

更为糟糕的是,为了路由和管理方便,43亿的地址空间被按照不一样前缀长度划分为A,B,C,D类地址网络和保留地址。其中,A类网络地址127段,每段包括主机地址约1678万个。B类网络地址16384段,每段包括65536个主机地址。
ANA向超大型企业/组织分配A类网络地址,一次一段。向中型企业或教育机构分配B类网络地址,一次一段。这样一种分配策略使得IP地址浪费很严重,不少被分配出去的地址没有真实被利用,地址消耗很快。以致于二十世纪90年代初,网络专家们意识到,这样大手大脚下去,IPv4地址很快就要耗光了。因而,人们开始考虑IPv4的替代方案,同时采起一系列的措施来减缓IPv4地址的消耗。正是在这样一个背景之下,本期的主角闪亮登场,它就是网络地址转换——NAT。svg

NAT是一项神奇的技术,说它神奇在于它的出现几乎使IPv4起死回生。在IPv4已经被认为行将结束历史使命以后近20年时间里,人们几乎忘了IPv4的地址空间即将耗尽这样一个事实——在新技术突飞猛进的时代,20年可算一段漫长的历史。更不用说,在NAT产生之后,网络终端的数量呈加速上升趋势,对IP地址的需求剧烈增长。此足见NAT技术之成功,影响之深远。学习

说它神奇,更由于NAT给IP网络模型带来了深远影响,其身影遍及网络每一个角落。根据一份最近的研究报告,70%的P2P用户位于NAT网关之内。由于P2P主要运行在终端用户的我的电脑之上,这个数字意味着大多数PC经过NAT网关链接到Internet。若是加上2G和3G方式联网的智能手机等移动终端,在NAT网关以后的用户远远超过这个比例。ui

ip地址基础知识

同窗你如今作两个操做.net

  • 打开你的命令行输入ipconfig查询你的Ip地址
  • 打开百度,输入Ip查询,查询你的ip地址

你是否是发现了一件很神奇的事情,这两个地址是不同的。可是咱们又常常说每一个主机只有一个ip,这个ip是他的身份标识。这彻底矛盾啊。这就引出了咱们今天要讲的NAT技术
其实并不矛盾。这里咱们要引入公网ip和私网ip这两个概念,关于这个问题的解读。你们能够参看个人博文。为何百度查到的ip和ipconfig查到的不同 计算机网络

NAT技术的工做原理和特色

NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息。NAT一般部署在一个组织的网络出口位置,经过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的链接能力。那么,什么是内部网络IP地址?

RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配,被IANA做为私有地址保留。这些地址能够在任何组织或企业内部使用,和其余Internet地址的区别就是,仅能在内部使用,不能做为全球路由地址。这就是说,出了组织的管理范围这些地址就再也不有意义,不管是做为源地址,仍是目的地址。对于一个封闭的组织,若是其网络不链接到Internet,就可使用这些地址而不用向IANA提出申请,而在内部的路由管理和报文传递方式与其余网络没有差别。

对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,一般是出口设备的接口地址。一个对外的访问请求在到达目标之后,表现为由本组织出口设备发起,所以被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通讯两端均无感知的状况下完成了。依据这种模型,数量庞大的内网主机就再也不须要公有IP地址了。
NAT的转换示意图以下所示
这里写图片描述
咱们通常使用私网ip做为局域网内部的主机标识,使用公网ip做为互联网上通讯的标识
在整个NAT的转换中,最关键的流程有如下几点

  • 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要通过NAT网关
  • 网络访问只能先由私网侧发起,公网没法主动访问私网主机;
  • NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向作源信息替换,入方向作目的信息替换;
  • NAT网关的存在对通讯双方是保持透明的;
  • NAT网关为了实现双向翻译的功能,须要维护一张关联表,把会话的信息保存下来。

静态NAT

若是一个内部主机惟一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是没必要要的,由于一个公网IP就能惟一对应一个内部主机。显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。好比用户但愿隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通讯。
这里写图片描述

动态NAT

它可以将未注册的IP地址映射到注册IP地址池中的一个地址。不像使用静态NAT那样,你无需静态地配置路由器,使其将每一个内部地址映射到一个外部地址,但必须有足够的公有因特网IP地址,让链接到因特网的主机都可以同时发送和接收分组

这里写图片描述

NAT重载(常常应用到实际中)

这是最经常使用的NAT类型。NAT重载也是动态NAT,它利用源端口将多个私网ip地址映射到一个公网ip地址(多对一)。那么,它的独特之处何在呢?它也被称为端口地址特换(PAT)。经过使用PAT(NAT重载),只需使用一个公网ip地址,就可将数千名用户链接到因特网。其核心之处就在于利用端口号实现公网和私网的转换。
面对私网内部数量庞大的主机,若是NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪一个内部主机。此时,须要NAT设备根据传输层信息或其余上层协议去区分不一样的会话,而且可能要对上层协议的标识进行转换,好比TCP或UDP端口号。这样NAT网关就能够将不一样的内部链接访问映射到同一公网IP的不一样传输层端口,经过这种方式实现公网IP的复用和解复用。这种方式也被称为端口转换PAT、NAPT或IP假装,但更多时候直接被称为NAT,由于它是最典型的一种应用模式。
这里写图片描述
举个例子,客户端172.18.250.6和百度服务器202.108.22.5通讯,172.18.250.6发送数据时,先转换为219.155.6.240:1723(任意>1024的随机端口),而后再利用这个身份发送数据给百度服务器,而后百度服务器回应数据并发送给219.155.6.240:1723,NAT网关检查本身的关联表,意识到这是本身地私网中172.18.250.6的数据包,而后把这个数据发送给客户端

也就是说,咱们利用端口号的惟一性实现了公网ip转换为私网ip的这一步。PAT(NAT重载)可以使用传输层端口号来标识主机,所以,从理论上说,最多可以让大约65000台主机共用一个公有IP地址

NAT技术的优缺点

优势

  • 节省合法的公有ip地址
  • 地址重叠时,提供 解决办法
  • 网络发生变化时,避免从新编址(这个问题具备亲身体会,本来所在的实习单位搬迁,咱们搬到了新的住处,网络环境发生了一些变化,可是因为nat技术的特色,咱们局域网的地址并无发生改变,咱们依然使用着最初的编址方案)

    NAT对咱们来讲最大的贡献就是帮助咱们节省了大量的ip资源

缺点

在介绍NAT的诸多缺点以前,咱们先简单介绍下什么是IP的端到端通讯:
IP协议的一个重要贡献是把世界变得平等。在理论上,具备IP地址的每一个站点在协议层面有至关的获取服务和提供服务的能力,不一样的IP地址之间没有差别。人们熟知的服务器和客户机实际是在应用协议层上的角色区分,而在网络层和传输层没有差别。一个具备IP地址的主机既能够是客户机,也能够是服务器,大部分状况下,既是客户机,也是服务器。端到端对等看起来是很日常的事情,而意义并不寻常。但在以往的技术中,不少协议体系下的网络限定了终端的能力。正是IP的这个开放性,使得TCP/IP协议族能够提供丰富的功能,为应用实现提供了广阔平台。由于全部的IP主机均可以服务器的形式出现,因此通信设计能够更加灵活。使用UNIX/LINUX的系统充分利用了这个特性,使得任何一个主机均可以创建本身的HTTP、SMTP、POP三、DNS、DHCP等服务。与此同时,不少应用也是把客户端和服务器的角色组合起来完成功能。例如在VoIP应用中,用户端向注册服务器登陆本身的IP地址和端口信息过程当中,主机是客户端;而在呼叫到达时,呼叫处理服务器向用户端发送呼叫请求时,用户端实际工做在服务器模式下。在语音媒体流信道创建过程后,通信双向发送语音数据,发送端是客户模式,接收端是服务器模式。而在P2P的应用中,一个用户的主机既为下载的客户,同时也向其余客户提供数据,是一种C/S混合的模型。上层应用之因此能这样设计,是由于IP协议栈定义了这样的能力。试想一下,若是IP提供的能力不对等,那么每一个通讯会话都只能是单方向发起的,这会极大限制通讯的能力。细心的读者会发现,前面介绍NAT的一个特性正是这样一种限制。没错,NAT最大的弊端正在于此——破坏了IP端到端通讯的能力。
NAT的弊端
首先,NAT使IP会话的保持时效变短。由于一个会话创建后会在NAT设备上创建一个关联表,在会话静默的这段时间,NAT网关会进行老化操做。这是任何一个NAT网关必须作的事情,由于IP和端口资源有限,通讯的需求无限,因此必须在会话结束后回收资源。一般TCP会话经过协商的方式主动关闭链接,NAT网关能够跟踪这些报文,但老是存在例外的状况,要依赖本身的定时器去回收资源。而基于UDP的通讯协议很难肯定什么时候通讯结束,因此NAT网关主要依赖超时机制回收外部端口。经过定时器老化回收会带来一个问题,若是应用须要维持链接的时间大于NAT网关的设置,通讯就会意外中断。由于网关回收相关转换表资源之后,新的数据到达时就找不到相关的转换信息,必须创建新的链接。当这个新数据是由公网侧向私网侧发送时,就会发生没法触发新链接创建,也不能通知到私网侧的主机去重建链接的状况。这时候通讯就会中断,不能自动恢复。即便新数据是从私网侧发向公网侧,由于重建的会话表每每使用不一样于以前的公网IP和端口地址,公网侧主机也没法对应到以前的通讯上,致使用户可感知的链接中断。NAT网关要把回收空闲链接的时间设置到不发生持续的资源流失,又维持大部分链接不被意外中断,是一件比较有难度的事情。在NAT已经普及化的时代,不少应用协议的设计者已经考虑到了这种状况,因此通常会设置一个链接保活的机制,即在一段时间没有数据须要发送时,主动发送一个NAT能感知到而又没有实际数据的保活消息,这么作的主要目的就是重置NAT的会话定时器。

其次,NAT在实现上将多个内部主机发出的链接复用到一个IP上,这就使依赖IP进行主机跟踪的机制都失效了。如网络管理中须要的基于网络流量分析的应用没法跟踪到终端用户与流量的具体行为的关系。基于用户行为的日志分析也变得困难,由于一个IP被不少用户共享,若是存在恶意的用户行为,很难定位到发起链接的那个主机。即使有一些机制提供了在NAT网关上进行链接跟踪的方法,可是把这种变换关系接续起来也困难重重。基于IP的用户受权再也不可靠,由于拥有一个IP的不等于一个用户或主机。一个服务器也不能简单把同一IP的访问视做同一主机发起的,不能进行关联。有些服务器设置有链接限制,同一时刻只接纳来自一个IP的有限访问(有时是仅一个访问),这会形成不一样用户之间的服务抢占和排队。有时服务器端这样作是出于DOS攻击防御的考虑,由于一个用户正常状况下不该该创建大量的链接请求,过分使用服务资源被理解为攻击行为。可是这在NAT存在时不能简单按照链接数判断。
总之,缺点大概以下:

  • 没法进行端到端的ip跟踪(破坏了端对端通讯的平等性)
  • 不少应用层协议没法识别(好比ftp协议 )

NAT穿越技术

前面解释了NAT的弊端,为了解决IP端到端应用在NAT环境下遇到的问题,网络协议的设计者们创造了各类武器来进行应对。但遗憾的是,这里每一种方法都不完美,还须要在内部主机、应用程序或者NAT网关上增长额外的处理。

应用层网关(ALG)

前面咱们已经介绍到了,NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力(也就是净载中的数据没法修改),在许多应用层协议中,好比多媒体协议(H.32三、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能致使问题。也就是说,NAT只是将数据包的包头的ip地址和端口号进行了转换,可是没有对包内数据中的ip地址和端口号进行转换因而咱们开始设想能不能使用一种行之有效的方法保证包头的ip和端口号与包中数据里的Ip地址和端口号都转化为公网的ip地址和端口号。

ALG的实际应用

对于ALG的实现机制仍是不清楚,若是有懂的大佬,推荐下书籍
下面咱们举个FTP传输的例子来简单介绍一下ALG的实际应用
这里写图片描述
图中私网侧的主机要访问公网的FTP服务器。
NAT设备上配置了私网地址192.168.1.2到公网地址8.8.8.11的映射,实现地址的NAT转换,以支持私网主机对公网的访问。组网中,若没有ALG对报文载荷的处理,私网主机发送的PORT报文到达服务器端后,服务器没法根据私网地址进行寻址,也就没法创建正确的数据链接。整个通讯过程包括以下四个阶段:

(1) 私网主机和公网FTP服务器之间经过TCP三次握手成功创建控制链接。

(2) 控制链接创建后,私网主机向FTP服务器发送PORT报文,报文中携带私网主机指定的数据链接的目的地址和端口,用于通知服务器使用该地址和端口和本身进行数据链接。

(3) PORT报文在通过支持ALG特性的NAT设备时,报文载荷中的私网地址和端口会被转换成对应的公网地址和端口。即设备将收到的PORT报文载荷中的私网地址192.168.1.2转换成公网地址8.8.8.11,端口1084转换成12487。

(4) 公网的FTP服务器收到PORT报文后,解析其内容,并向私网主机发起数据链接,该数据链接的目的地址为8.8.8.11,目的端口为12487(注意:通常状况下,该报文源端口为20,但因为FTP协议没有严格规定,有的服务器发出的数据链接源端口为大于1024的随机端口,如本例采用的是wftpd服务器,采用的源端口为3004)。因为该目的地址是一个公网地址,所以后续的数据链接就可以成功创建,从而实现私网主机对公网服务器的访问。

NAT技术的将来

在知乎上看到过这样一种言论,随着ipV6技术的到来,NAT技术已经再也不须要了。在我看来,技术的革命必定是一步一步实现的,好比先是在局部地区使用IPV6,而后再逐步扩大其规模,减小IPv4的规模,因此NAT技术仍是须要的。并且到了那个时候,网络世界中会充斥着两种地址ipV4和ipV6,这个时候更须要NAT技术了,由于NAT的中文翻译叫作网络地址转换啊。因此学好这个知识点对于咱们理解网络是相当重要的。每到此时都会感慨,学校学到的知识真的只是皮毛,可是倒是我如今全部知识的基础。

参考文献

  1. 《CCNA学习指南》点此处下载此书
  2. ALG原理与应用
  3. P2P技术详解