首页 > 编程知识 正文

不同的网络怎么地址转换(ip地址转换)

时间:2023-05-05 07:53:48 阅读:65253 作者:2857

NAT概要网络地址转换(NAT )诞生于1994年,是在IPv4地址资源枯竭的背景下提出的。 NAT最初的设计目的之一,是作为IPv6全面部署前的迁移战略,IPv6的部署推进延迟的原因之一,而NAT的延迟在不需要互联网地址时成为世界上唯一的,因此互联网的各种各样的延迟通过允许在多个范围内重复使用地址,大大缓解了地址枯竭的问题。 NAT还可以与防火墙结合使用形成复合设备,该设备已成为连接到最终用户的最常见的路由器类型。

NAT本质上是一种允许在互联网的不同位置重用同一IP地址集的机制(见上图)。 设立NAT的主要动机是急剧减少的有限的IP地址空间。 使用NAT的最常见情况是,唯一连接到互联网的站点只分配了少量的IP地址,但内部必须同时有多个主机连接到互联网。 当所有进出的流量都通过单独的NAT设备时,该设备将内部系统的地址空间与全局互联网地址空间分开,因此所有内部系统都使用本地分配的专用IP地址访问互联网

NAT部署用于解决两个问题: IP地址耗尽和路由可扩展性问题。 在NAT刚上市的时候,为了方便,我知道直到拥有更大地址空间的协议(IPv6 )被广泛引入为止。 由于分类互联网域名路由(CIDR )的发展,解决了路由可扩展性问题。 NAT减少了对具有全局路由的internet地址的需求,还提供了防火墙功能,并且只需要最少的配置。 然而,具有讽刺意味的是,发展迅速且广泛使用的NAT对IPv6的推进过程产生了巨大影响。 IPv6的许多好处之一是不需要NAT。

虽然NAT有一些缺点,但最明显的是,NAT内部的主机必须具有特殊的配置,才能提供互联网可访问的服务。 因为互联网上的用户无法直接访问具有私有地址的主机。 另外,为了使NAT正常工作,每个相同的连接或相关的双向包都必须通过相同的NAT。 这是因为NAT必须重写每个包的地址信息,以便在专用地址空间中的系统和internet主机之间正常通信。 在许多方面,NAT和互联网协议的基本目的是相反的。

NAT的工作原理是改写通过路由器的数据包的识别信息。 这经常发生在数据传输的两个方向上。 在此最基本的形式中,NAT需要改写单向传输的分组的发送源IP地址,改写单向传输的分组的目的地IP地址。 这允许发送包的源IP地址是NAT路由器上面向互联网的网络接口地址(全局地址),而不是原始主机的接口地址。 一般而言,NAT路由器将从管理的内部主机发送的分组的发送源IP地址从本地地址改变为全局地址,对从外部发送的分组进行逆转换并将它们分配给适当的内部主机。 因此,从internet上的主机来看,数据包来自具有全局路由IP的NAT路由器,而不是位于NAT内部的专用地址的主机。 大多数NAT同时执行“变换”(translation )和“包过滤”(packet filtering )。

基本NAT和NAPT传统NAT包括基本NAT (基本NAT )和网络地址端口转换(NAPT )。 基本NAT仅执行IP地址重写,并且本质上将私有地址重写为公用地址——往往取决于ISP提供的地址池或公用地址范围。 基本NAT也有静态和动态两种,主要区别在于维护的NAT地址映射表的一对一映射关系是静态的、不变的,还是动态的、可变的。 basic NAT无法减少使用的IP地址数量,因为全局可路由地址的数量必须大于或等于希望同时访问互联网的内部主机的数量。

NAPT也称为IP假面舞会,它使用传输层标识符(TCP和UDP端口以及ICMP查询标识符)来确定特定包与NAT中的哪个主机相关。 即,变更外出目的地数据包的发送源端口来进行端口变换,采用端口复用(Port Address Translation,PAT )方式。 内部网络中的所有主机都可以共享一个合法的外部IP地址来访问互联网,从而最大限度地节约IP地址资源。 这使许多内部主机可以同时访问互联网,但使用的公共地址较少,通常只需要一个。 它还可以隐藏网络中的所有主机,从而有效地避免来自互联网的攻击。

地址冲突解决NAT内部使用的地址范围不限于本地网络管理员以外的任何人。 因此,能够在专用地址的范围内采用全局地址空间。 然而,如果互联网上的另一个实体也使用了这样的全局地址,则专用范围内的本地系统将阻止使用相同地址的本地系统使用相同地址的远程系统为了避免这些问题,保留了三个IPv4地址范围: 10.0.0.0/8、172.16.0.0/12和192.168.0.0/16作为专用地址范围。 这些地址范围经常用作嵌入式DHCP服务器(DHCP传送门)地址池的默认值。

实际上,专用地址是指RFC1918规定的上述三个地址范围。 这三个私有地址本身是可路由的,但是公共网络上的路由器不转发这三个私有地址的流量。当这些私有地址位于一家公司内部时

址后,内部的计算机在和外网通信时,边界路由会通过NAT或者NAPT技术,将内部的私有地址转换成外网IP,外部看到的源地址是边界路由转换过的公网IP地址,这在某种意义上也增加了内部网络的安全性。

NAT映射

       在如图所示的NAT网络模型中,内部地址为(X:x)的主机要与外部主机通信,需要使用一个外部地址(X':x'),NAT负责创建一个由(X:x)到(X':x')的地址映射。假设内部主机先连接到(Y1:y1),再连接到(Y2:y2),NAT需先创建(X:x)到(X1':x1')的映射,再创建(X:x)到(X2':x2')的映射。在大多数情况下,X1'等于X2',因为大多数网站只使用一个全局路由的IP地址。如果x1'等于x2',映射被认为是重复使用的。如果x1'和x2'均与x相等,NAT实现的是称为端口保留的动作。在某些情况下,端口保留是不可能的,所以NAT必须处理端口冲突问题。

       参照上图,如果对于任何Y1:y1或Y2:y2(即外部主机),X1':x1'等于X2':x2',则NAT存在独立于端点的映射。若当且仅当Y1等于Y2时,X1':x1'才等于X2':x2',则NAT存在地址相关的映射。若当且仅当Y1:y1等于Y2:y2时,X1':x1'才等于X2':x2',则NAT存在地址和端口相关的映射。NAT对信息进行处理的行为按照上述条件进行划分,其分类又可称为全锥形NAT(Full Cone NAT)、地址限制锥形NAT(Address-Restricted cone NAT)、端口限制锥形NAT(Port-Restricted cone NAT)和对称型NAT(Symmetric NAT)。若NAT的外部地址是在没有考虑内部或外部地址的情况下选择的,则拥有多个外部地址的NAT(即X1'可能不等于X2')可任意选择一个地址映射,或者为每个连接选择相同的映射(称为配对)。配对是所有传输层的推荐NAT行为,如果未使用配对(即内部主机与外部主机进行一对一通信时NAT却使用不同的映射),内部主机的通信对等端可能会错误地判断它正与不同的主机进行通信。

发夹和环回

       当客户端希望访问位于同一个NAT私有地址空间内的服务器时(如上图所示),会导致一个有趣的问题。能够支持这种场景的NAT需要实现发夹(hairpinning)或者NAT环回(NAT loopback)。若发送方知道接收方的私有地址,这没有问题,可以直接进行连接。但在某些情况下X1只知道公用地址信息:(X2':x2)。在这种情况下,X1借助(X2‘:x2')尝试连接(X2:x2)。当NAT将数据包发送到对应映射的(X2:x2)时即完成了一个发夹过程。但问题是目的是(X2:x2)的数据包头部中的源地址应该是(X1:x1)还是(X1':x1')呢?答案是前者,这种NAT被称为有“外部源IP地址和端口”的发夹行为是TCP NAT所必需的。之所以需要这种行为,是为了均采用全局路由地址的应用能够识别对方。

NAT的P2P限制

       前面提到过,NAT的设计与互联网协议的基本宗旨是背道而驰的,这其中重要的一点(也是其缺陷)就是破坏了IP端到ajdhk的能力。其解决方案:NAT穿越写在另一篇博文中。

端到端服务模型

       IP协议的一个重要贡献是把世界变得平等。在理论上,具有IP地址的每个站点在协议层面有相当的获取服务和提供服务的能力,不同的IP地址之间没有差异。人们熟知的服务器和客户机实际是在应用协议层上的角色区分,而在网络层和传输层没有差异。一个具有IP地址的主机既可以是客户机,也可以是服务器,大部分情况下,既是客户机,也是服务器。端到端对等看起来是很平常的事情,而意义并不寻常。在以往的技术中,很多协议体系下的网络限定了终端的能力,正是IP的这个开放性,使得TCP/IP协议族可以提供丰富的功能,为应用实现提供了广阔平台。因为所有的IP主机都可以服务器的形式出现,所以通讯设计可以更加灵活。使用UNIX/LINUX的系统充分利用了这个特性,使得任何一个主机都可以建立自己的HTTP、SMTP、POP3、DNS、DHCP等服务。与此同时,很多应用也是把客户端和服务器的角色组合起来完成功能。例如在VoIP应用中,用户端向注册服务器登录自己的IP地址和端口信息过程中,主机是客户端;而在呼叫到达时,呼叫处理服务器向用户端发送呼叫请求时,用户端实际工作在服务器模式下。在语音媒体流信道建立过程后,通讯双向发送语音数据,发送端是客户模式,接收端是服务器模式。而在P2P的应用中,一个用户的主机既为下载的客户,同时也向其他客户提供数据,是一种C/S混合的模型。上层应用之所以能这样设计,是因为IP协议栈定义了这样的能力。如果IP提供的能力不对等,那么每个通信会话都只能是单方向发起的,这会极大限制通信的能力。

       大多数IP流量均使用TCP和UDP在互联网上进行传输,这些协议本身可以很好地被NAT支持而无须增加额外的复杂性。但当应用层协议与它们一起携带传输层或更底层的信息,如IP地址,NAT的问题就会变得复杂很多。因为NAT作为较低层的协议却划分了服务器和客户端两个概念,违背了互联网协议的端到端原则。

其他局限性

       NAT的局限性除了前面的破坏了端到端原则以外,还有以下几点:

 1.使得IP协议从面向无连接变成面向连接

       NAT必须维护专用IP地址与公用IP地址以及端口号的映射关系。在TCP/IP协议体系中,如果一个路由器出现故障,不会影响到TCP协议的执行。因为只要几秒收不到应答,发送进程就会进入超时重传处理。而当存在NAT时,最初设计的TCP/IP协议过程将发生变化,Internet可能变得非常脆弱。

2.NAT违反了基本的网络分层结构模型的设计原则

       因为在传统的网络分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。

3.NAT同时存在对高层协议和安全性的影响问题

       RFC对NAT存在的问题进行了讨论。NAT的dqdlc认为这种临时性的缓解IP地址短缺的方案推迟了Ipv6迁移的进程,而并没有解决深层次的问题,他们认为是不可取的。

 

                                                          本文部分内容摘自《TCP/IP详解 卷1:协议(中文版)第2版》,有改动

       

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。