当前位置:   article > 正文

NAT详解(网络地址转换)_nat转换

nat转换

一句话说清楚它是干什么的:

网络地址转换:是指通过专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址,它使得整个专用网只需要一个全球IP就可以访问互联网,由于专用网IP地址是可以重用的,所以NAT大大节省了IP地址的消耗。

概念:

NAT(Network Address Translation),是指网络地址转换,1994年提出的。

当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。

实现方式:

  • 静态转换:一对一,私有ip和共有ip的映射关系定下来就不会变了
  • 动态转换:也是一对一,但是每次私有ip跟共有ip的映射关系都是不一样
  • 端口多路复用(即端口地址转换(PAT,Port Address Translation)):内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。

请添加图片描述

NAPT(Network Address Port Translation),即网络地址端口转换,可将多个内部地址映射为一个合法公网地址,NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换)、地址超载(address overloading)。
NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。

PAT叫端口地址转换,NAT是网络地址转换。
PAT可以看做是NAT的一部分。
在NAT时,考虑一种情形,就是只有一个Public IP,而内部有多个Private IP,这个时候NAT就要通过映射UDP和TCP端口号来跟踪记录不同的会话,比如用户A、B、C同时访问CSDN,则NAT路由器会将用户A、B、C访问分别映射到1088、1098、23100(举例而已,实际上是动态的),此时实际上就是PAT了。

由上面推论,PAT理论上可以同时支持(65535 - 1024)= 64511个连接会话。但实际使用中由于设备性能和物理连接特性是不能达到的,CISCO的路由器NAT功能中每个Public IP最多能有效地支持大约4000个会话。

PAT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。PAT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。也就是采用多路复用 技术,或改变外出数据的源port的技术将多个内部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地址

优缺点:

优点

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

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

缺点

在介绍NAT的诸多缺点之前,我们先简单介绍下什么是IP的端到端通信:
IP协议的一个重要贡献是把世界变得平等。在理论上,具有IP地址的每个站点在协议层面有相当的获取服务和提供服务的能力,不同的IP地址之间没有差异。人们熟知的服务器和客户机实际是在应用协议层上的角色区分,而在网络层和传输层没有差异。一个具有IP地址的主机既可以是客户机,也可以是服务器,大部分情况下,既是客户机,也是服务器。端到端对等看起来是很平常的事情,而意义并不寻常。但在以往的技术中,很多协议体系下的网络限定了终端的能力。正是IP的这个开放性,使得TCP/IP协议族可以提供丰富的功能,为应用实现提供了广阔平台。因为所有的IP主机都可以服务器的形式出现,所以通讯设计可以更加灵活。使用UNIX/LINUX的系统充分利用了这个特性,使得任何一个主机都可以建立自己的HTTP、SMTP、POP3、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协议 )
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/166147
推荐阅读
相关标签
  

闽ICP备14008679号