NAT技术基本知识

一、NAT技术

公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(网络信息中心)或者ISP(网络服务提供商)分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻 址的地址。
私有IP地址:也叫内部地址,属于非注册地址,专门为组织机构内部使用。因特网分配编号委员会(IANA)保留了3块IP地址做为私有IP地址:
10.0.0.0 ——— 10.255.255.255
172.16.0.0——— 172.16.255.255
192.168.0.0———192.168.255.255
地址池:地址池是有一些外部地址(全球唯一的IP地址)组合而成,我们称这样的一个地址集合为地址池。在内部网络的数据包通过地址转换到达外部网络时,将会在地址池中选择某个IP地址作为数据包的源IP地址,这样可以有效的利用用户的外部地址,提高访问外部网络的能力。

NAT技术:NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,如下图所示。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。


简单地说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题。通过这种方法,可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。

NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。比如Cisco路由器中已经加入这一功能,网络管理员只需在路由器的IOS中设置NAT功能,就可以实现对内部网络的屏蔽。再比如防火墙将WEB Server的内部地址192.168.1.1映射为外部地址202.96.23.11,外部访问202.96.23.11地址实际上就是访问访问 192.168.1.1。

NAT分类:

NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。

静态NAT(static NAT):

通过手动设置,使 Internet 客户进行的通信能够映射到某个特定的私有网络地址和端口。如果想让连接在 Internet 上的计算机能够使用某个私有网络上的服务器(如网站服务器)以及应用程序(如游戏),那么静态映射是必需的。静态映射不会从 NAT 转换表中删除。
  如果在 NAT 转换表中存在某个映射,那么 NAT 只是单向地从 Internet 向私有网络传送数据。这样,NAT 就为连接到私有网络部分的计算机提供了某种程度的保护。但是,如果考虑到 Internet 的安全性,NAT 就要配合全功能的防火墙一起使用。

注:在静态NAT方式中,内部的IP地址与公有IP地址是一种一一对应的映射关系,所以,采用这种方式的前提是,机构能够申请到足够多的全局IP地址。

动态地址NAT(pooled NAT):

动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。

动态NAT方式适合于 当机构申请到的全局IP地址较少,而内部网络主机较多的情况。内网主机IP与全局IP地址是多对一的关系。当数据包进出内网时,具有NAT功能的设备对IP数据包的处理与静态NAT的一样,只是NAT table表中的记录是动态的,若内网主机在一定时间内没有和外部网络通信,有关它的IP地址映射关系将会被删除,并且会把该全局IP地址分配给新的IP数据包使用,形成新的NAT table映射记录。

网络地址端口转换NAPT(Port-Level NAT):

网络地址端口转换NAPT(Network Address Port Translation)则是把内部地址映射到外部网络的一个IP地址的不同端口上。它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号
NAPT是使用最普遍的一种转换方式,它又包含两种转换方式:SNAT和DNAT。
(1)源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
(2)目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据包的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。
源NAT举例:对于一个内网的主机数量比较多,但是该组织只有一个合法的IP地址,当内网主机(10.1.1.3)往外发送数据包时,则需要修改数据包的IP地址和TCP/UDP端口号,例如将
源IP:10.1.1.3
源port:1493
改成
源IP:201.0.0.1
源port:1492(注意:源端口号可以与原来的一样也可以不一样
当外网主机(201.0.0.11)响应内网主机(10.1.1.3)时,应将:
目的IP:201.0.0.1
目的port:1492
改成
目的IP:10.1.1.3
目的port:1493
这样,通过修改IP地址和端口的方法就可以使内网中所有的主机都能访问外网,此类NAT适用于组织或机构内只有一个合法的IP地址的情况,也是动态NAT的一种特例。


目的NAT举例:这种方式适用于内网的某些服务器需要为外网提供某些服务的情况。例如以上拓扑结构,内网服务器群(ip地址分别为:10.1.1.1,10.1.1.2,10.1.1.3等)需要为外网提供WEB 服务,当外网主机HostB访问内网时,所发送的数据包的目的IP地址为10.1.1.127,端口号为:80,当该数据包到达内网连接的路由器时,路由器查找NAT table,路由器通过修改目的IP地址和端口号,将外网的数据包平均发送到不同的主机上(10.1.1.1,10.1.1.2,10.1.1.3等),这样就实现了负载均衡

二、NAT原理

1、地址转换

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
如下图所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共 IP,为202.20.65.5;私有网络端口的IP地址是保留地址为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机202.20.65.4发送了1个IP包(Dst=202.20.65.4,Src=192.168.1.2)。


当IP包经过NAT网关时,NAT Gateway会将IP包的源IP转换为NAT Gateway的公共IP并转发到公共网,此时IP包(Dst=202.20.65.4,Src=202.20.65.5)中已经不含任何私有网IP的信息。由于IP包的源IP已经被转换成NAT Gateway的公共IP,Web Server发出的响应IP包(Dst= 202.20.65.5,Src=202.20.65.4)将被发送到NAT Gateway。
这时,NAT Gateway会将IP包的目的IP转换成私有网中主机的IP,然后将IP包(Des=192.168.1.2,Src=202.20.65.4)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。转换示意图如下。


如果内网主机发出的请求包未经过NAT,那么当Web Server收到请求包,回复的响应包中的目的地址就是私有网络IP地址,在Internet上无法正确送达,导致连接失败。

2、连接跟踪

在上述过程中,NAT Gateway在收到响应包后,就需要判断将数据包转发给谁。此时如果子网内仅有少量客户机,可以用静态NAT手工指定;但如果内网有多台客户机,并且各自访问不同网站,这时候就需要连接跟踪(connection track)。如下图所示:


在NAT Gateway收到客户机发来的请求包后,做源地址转换,并且将该连接记录保存下来,当NAT Gateway收到服务器来的响应包后,查找Track Table,确定转发目标,做目的地址转换,转发给客户机。

3、端口转换

以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP即可正常通讯。但是如果Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就无法判断将数据包转发给哪台客户机,如下图所示。


此时,NAT Gateway会在Connection Track中加入端口信息加以区分。如果两客户机访问同一服务器的源端口不同,那么在Track Table里加入端口信息即可区分,如果源端口正好相同,那么在实行SNAT和DNAT的同时对源端口也要做相应的转换,如下图所示。


三、NAT应用

NAT主要可以实现以下几个功能:数据包伪装、平衡负载、端口转发和透明代理。
数据伪装: 可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也常用来实现共享上网。例如,内网主机访问外网时,为了隐藏内网拓扑结构,使用全局地址替换私有地址。
端口转发: 当内网主机对外提供服务时,由于使用的是内部私有IP地址,外网无法直接访问。因此,需要在网关上进行端口转发,将特定服务的数据包转发给内网主机。例如公司小王在自己的服务器上架设了一个Web网站,他的IP地址为192.168.0.5,使用默认端口80,现在他想让局域网外的用户也能直接访问他的Web站点。利用NAT即可很轻松的解决这个问题,服务器的IP地址为210.59.120.89,那么为小王分配一个端口,例如81,即所有访问210.59.120.89:81的请求都自动转向192.168.0.5:80,而且这个过程对用户来说是透明的。
负载平衡:目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。
失效终结:目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上,提高系统的可靠性。
透明代理:例如自己架设的服务器空间不足,需要将某些链接指向存在另外一台服务器的空间;或者某台计算机上没有安装IIS服务,但是却想让网友访问该台计算机上的内容,这个时候利用IIS的Web站点重定向即可轻松的帮助我们搞定。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《FD.io VPP开发基础知识手册》是一本以中文撰写的指南,旨在帮助读者了解和学习FD.io VPP(Vector Packet Processing)开发的基本知识。 该手册首先详细介绍了VPP的概念和基本原理。VPP是一个高性能的软件数据平面,用于在网络功能虚拟化(NFV)环境中处理大量网络数据包。它具有非常低的延迟和高吞吐量,可用于构建各种网络应用和协议。 手册接着介绍了VPP的基本组件和数据结构。读者将了解到VPP的管道和节点模型,以及与之相关的数据平面抽象(如向量处理和数据包缓冲区)和控制平面抽象(如API和消息队列)。 此外,手册还详细讲解了VPP的插件机制和开发工具。插件是扩展VPP功能的一种方式,读者将学习如何开发、编译和加载插件,以及如何在VPP中使用它们。 最后,手册还提供了一些实例和案例研究,帮助读者更好地理解和应用VPP开发知识。这些实例包括网络解析、服务链、路由等等,读者将通过实际操作来加深对VPP开发的理解和熟练度。 总的来说,《FD.io VPP开发基础知识手册》是一本功能全面、易于理解的中文指南,适合对VPP开发感兴趣的读者使用。无论是初学者还是有一定开发经验的人员,都可以从中获得有用的知识和经验,提高在VPP开发领域的技能水平。 ### 回答2: fd.io VPP是一个高性能数据平面软件,全称为Fast Data - input/output Vector Packet Processing。VPP可以通过灵活的插件架构实现多种网络功能,并且具有可扩展性和高并发性能。 fd.io VPP开发基础知识手册中文版是一本介绍如何使用和开发fd.io VPP的指南。该手册详细介绍了VPP的架构、特性、插件和API等方面的内容,对于想要学习和开发fd.io VPP的人来说是非常有用的参考资料。 在该手册中,你可以学习如何安装和配置VPP,了解VPP的核心概念和数据结构,学习如何创建和配置VPP的各种插件,以及如何使用VPP API进行编程和开发。此外,手册还介绍了VPP的调试和性能优化技巧,帮助开发者更好地理解和使用VPP。 通过学习这本手册,你将掌握如何使用VPP实现各种网络功能,如路由、转发、NAT、安全等。你还可以学习如何通过插件扩展VPP,使其适用于各种应用场景。 总之,fd.io VPP开发基础知识手册中文版是一本全面介绍和指导如何使用和开发fd.io VPP的指南。通过学习该手册,你可以深入了解VPP的架构和特性,并能够使用VPP实现各种网络功能。 ### 回答3: fdio是一个开源的数据平面开发框架,而vpp是其核心组件,全称为Vector Packet Processing。在fdio vpp开发基础知识手册中文版中,主要介绍了fdio vpp开发的基础知识和相关的技术细节。 该手册首先介绍了fdio vpp的基本概念和架构,包括数据平面和控制平面的划分,以及vpp节点之间的通信方式。接着,手册介绍了vpp的安装和配置,包括相关软件依赖的安装和编译vpp的步骤。同时,还介绍了vpp的特点和优势,例如高性能、可扩展性和灵活性。 在基础知识部分,手册详细介绍了vpp的数据结构和API,包括vpp的核心数据结构、内存管理和线程模型。同时,还介绍了vpp的插件机制和模块化设计,以及如何使用vpp进行数据包处理和网络功能开发。此外,手册还包括了使用vpp进行网络编程和性能优化的相关内容。 除了基础知识,手册还提供了一些实际应用案例和示例代码,帮助读者更好地理解和应用fdio vpp开发。手册中还包括了一些常见问题和故障排除的指导,以及其他相关资源的参考。 总之,fdio vpp开发基础知识手册中文版是一本很有价值的学习资料,对于想要学习和应用fdio vpp开发的人来说是很有帮助的。无论是对于新手入门还是对于已经有一定经验的开发者来说,都能够从中获得实际的指导和技术支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值