热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nat技术,NAT技术是什么

转载自擒贼先擒王的博客NAT详解一、概述NAT英文全称是“NetworkAddressTranslation”,中文意思是“网络地址转换”,它是一个IETF(Internet


转载先从qinzei捕获的王的博客NAT的详细解说


一、概要NAT的英文全名是“网络地址转换”,中文意思是“互联网地址转换”,它是internetengineeringtaskforce (IETF )、 internet工程团队) )标准上,一个机构就是一个精力充沛的龙猫,是将内部的专用网络地址(IP地址)翻译成合法的网络IP地址的技术。 使用NAT,可以将使用私有地址的内部网络连接到互联网或其他IP网络。 NAT路由器在将内部网络的分组发送至公共网络时,在IP分组的报头中将私有地址转换为合法的IP地址。


RFC1918规定了三个独特的地址,用于作为专用内部网络。


a类: 10.0.0.0—10.255.255.25510.0.0/8


b类: 172.16.0.0—172.31.255.255172.16.0.0/12


c类: 192.168.0.0—192.168.255.255192.168.0.0/16


这三个专用地址本身可以路由,但公共网络上的路由器不会转发这三个专用地址的通信。如果将这些专用地址放入某个公司,内部计算机将与外部网络进行通信外部源地址是通过公司边界路由转换而来的公共网络IP地址,在某种意义上提高了内部网络的安全性。


二.分类


NAT有三种类型。


静态NAT (静态NAT ) (一对一) ) ) ) )。


将内部网络的专用IP地址转换为公共IP地址。 一对IP地址是一对一的,一直不变。


动态地址NAT(pooledNAT ) (多对多) )。


将内部网络的专用IP地址转换为公共IP地址时,IP地址是不确定和随机的。 所有被允许访问互联网的专用IP地址都可以随机转换为指定的有效IP地址。 这意味着,通过指定可转换的内部地址和使用哪个合法地址作为外部地址,可以进行动态NAT转换。 动态NAT在路由器上配置外联网IP地址池,内部有计算机需要与外部通信时,从地址池中动态取出外联网IP,将它们的对应关系绑定到NAT表。 在通信结束之后,释放所述外联网IP,并可用于其它内部IP地址转换。 这个DHCP租赁IP有相似之处。 ISP提供的合法IP地址稍少于网络中的计算机数量。 可以采用动态变换的方式。


网络地址端口转换网络地址端口转换端口对等(napt ) (多对一) ) ) ) ) ) ) ) )。


变更外出目的地数据包的发送源端口,进行端口变换,采用端口复用方式。 内部网络中的所有主机都可以通过共享一个合法的外部IP地址访问互联网,从而最大限度地节省IP地址资源。 它还可以隐藏网络中的所有主机,以有效避免来自互联网的攻击。 因此,目前网络上使用最多的是PAT规则。 这是最普通的NAT技术,是IPv4能维持到今天的最重要的理由之一。 它提供多对一的方式,对于多个内部网IP地址,边界路由可为他们分配外网IP,并使用外部与所述外网IP的不同端口通信。 NAPT与动态NAT不同,它将内部连接映射到外部网络中的单独IP地址,并将NAT设备选择的端口号添加到该地址。


NAPT是最常见的转换方式,在HomeGW中也主要使用。 有SNAT和DNAT两种转换方式。 源NAT(sourceNAT,SNAT ) :更改数据包的源地址。 源NAT更改第一个包的源地址,并始终在将包发送到网络之前完成。 数据包伪装是SNAT的例子。 目的NAT(destinationNAT,DNAT ) :变更数据包的目的地地址。 与DNAT相反,Destination NAT是修改初始数据(如负载平衡、端口转发和透明代理)的目标地址,属于DNAT。 Basic NAT是一种将一组IP地址映射到另一组IP地址的方法,映射过程在IP中继设备上进行,对用户完全透明。 NAPT很复杂,它将许多(不能太多) IP地址连同TCP/UDP端口号映射到单独的IP地址和端口号。 无论是Basic NAT还是NAPT,它都提供了一种将内部专用地址转换为全球唯一可用于公共网络的IP地址的方法。


对于网络地址转换技术来说,最重要的一点是在构成NAT的路由器上形成了NAT转换表,因为这个转换表的形成是非常重要的。 配置NAT后,如果能制作正确的转换表,即使我们的工作成功了。


3、NAT三个方向: NAT在outside口有效,均需要在inside口先路由,在outside口先NAT。


ip nat inside source:


将内部本地地址转换为内部全局地址; 在数据方向inside-outside、outside上执行转换;


ip nat inside destination:


将内部全局地址转换为内部本地地址; 数据方向为outside-inside,在outside中执行转换


ip nat outside source:


将外部全局地址转换为外部本地地址; 数据方向outside-

>inside,在outside上执行转换;
NAT的应用分类:
ip nat source:
(1) 静态 nat的映射:永远一个ip对应另外一个ip。
ip nat inside source static A.B.C.D A.B.C.D
(2) 动态 nat的映射:每次一个IP会对应另外一个公网的IP;
ip nat inside source list 2 pool pcdjc
(3) 动态PAT映射:pool里面只有一个IP。
ip nat inside source list 2 pool pcdjc overload
(4) 静态PAT映射:
ip nat inside source list 3 interface fastEthernet 0/0 overload
ip nat inside destination:
(5) tcp负载均衡,外网主动发起流量访问内网服务器。只用动态,没有静态。
ip nat inside destination list 10 pool feng
ip nat outside source:
当两端同时做nat既inside和outside需要同时翻译并出现地址冲突的时候需要用outside source和其他同时命令同时实现。

四、工作原理

了解原理之前先了解下NAT 术语。

在配置了 NAT 的路由器上,可以把整个网络分成两部分:内部网络和 外部网络。

NAT 技术中有四个术语:

内部本地地址(Inside Local):内网中设备所使用的IP地址内部全局地址(Inside Global):对于外部网络来说,局域网内部主机所表现的 IP 地址。外部本地地址(Outside Local):外部网络主机的真实地址。外部全局地址(Outside Global):对于内部网络来说,外部网络主机所表现的 IP 地址。外网设备所使用的真正的地址。

local 、global 是相对于端口状态说的,local是inside部分可以被路由的,global是outside部分可以被路由的。

网络地址转换常常和代理服务搞混,但是它们之间有明确的不同。NAT 对源和目的计算机都是透明的。没有任何一方会意识到它正在和第三方设备打交道。但是代理服务却不是透明的。源计算机知道它正向代理服务器发起一个请求,而且你还必须进行配置才能这样做。目的计算机会认为代理服务器就是与它直接通信的源计算机。还有,代理服务通常工作在 OSI 参考模型的第 4 层 (传输层) 或更高,而 NAT 工作在第 3 层 (网络层)。由于代理服务工作在更高层,所以通常它将比 NAT 要慢。

NAT 工作在 OSI 参考模型的网络层 (第3层) 是有道理的,因为路由器就工作在这一层:

NAT设备维护一个状态表,用来把非法的IP地址映射到合法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址,发往下一级,这意味着给处理器带来了一定的负担。但对于一般的网络来说,这种负担是微不足道的。在运行NAT的路由器中,当数据包被传送时,NAT可以转换数据包的IP地址和TCP/UDP数据包的端口号。设置NAT功能的路由器至少要有一个Inside(内部)端口和一个Outside(外部)端口。内部端口连接内网的用户,外部端口一般连接到Internet。当IP数据包离开内部网络时,NAT负责将内网IP源地址(通常是专用地址)转换为合法的公共IP地址。当IP数据包进入内网时,NAT将合法的公共IP目的地址转换为内网的IP源地址。

NAT的基本工作原理是:当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

当内部网络中的一台主机想传输数据到外部网络时,它先将数据包传输到NAT路由器上,路由器检查数据包的报头,获取该数据包的源IP信息,并从它的NAT映射表中找出与该IP匹配的转换条目,用所选用的内部全局地址(全球唯一的IP地址)来替换内部局部地址,并转发数据包。

当外部网络对内部主机进行应答时,数据包被送到NAT路由器上,路由器接收到目的地址为内部全局地址的数据包后,它将用内部全局地址通过NAT映射表查找出内部局部地址,然后将数据包的目的地址替换成内部局部地址,并将数据包转发到内部主机。

其实主要就是 修改 IP 数据包中的源 IP 地址,或目的 IP 地址。主要目的是把 RFC1918所提议的私有地址转变成在 Internet 上可路由的公有合法地址。对于某些有限的应用(如 DNS、 FTP 等),它也可以修改 IP 数据包有效载荷中的地址。由于应用的复杂性, NAT 目前支持的应用有限,当然,如果需要,完全可以针对新的应用做相应的开发工作。

总体来说,NAT进行地址转换的过程就是“本地地址”与“全局地址”之间的转换过程,无论数据包是从内部网络发往外部网络,还是从外部网络发往内部网络。不同的只是本地地址和全局地址所对应的网络不同,以及数据包重新封装的源和目的地址不同。具体如图所示。

这个过程是通过NAT中的本地址与全局地址映射条目来实现的,所以事先要在NAT路由器上配置这样的映射条目。

5、NAT中的转换方式: 从内网中设备上发出的IP包是以“inside local address”作为源地址,以“outside local address”作为目的地址。当数据包到达NAT设备的“inside”接口后,地址分别被翻译成“inside global address”和“outside global address”并从“outside”接口送出。外网设备上发出的IP包以“outside global address”作为源地址,以“inside global address”作为目的地址。当数据包到达NAT设备的“outside”接口后,地址分别被翻译成“outside local address”和“inside local address”并从“inside”接口送出。

当内部网络用户访问外部网络时,所进行的是“内部本地地址”和“内部全局地址”之间的转换。
在NAT路由器接收到来自内部网络主机发送的数据包时,其源IP地址(SA)为“内部本地地址”,目的IP地址(DA)为“外部本地地址”。当数据包被转发到外部网络时,数据包的源IP地址(SA)就会转变为“内部全局地址”,而目的IP地址(DA)被转变为“外部全局地址”。也就是把数据包的所有源IP地址(SA)和目的IP地址(DA)全部由本地地址转换为全局地址。如图6-9上部分数据包IP地址转换示意图。
相反,当外部网络用户访问内部网络时,所进行的是“外部本地地址”和“外部全局地址”之间的转换。
在NAT路由器接收到来自外部网络主机发送的数据包时,其源IP地址(SA)就是“外部全局地址”,目的IP地址(DA)就是“内部全局地址”。相当于由内部网络向外部网络发送数据包时数据包中的源IP地址(SA)和目的IP地址(DA)的互换。而当数据包被路由器转发到本地网络时,源IP地址(SA)被转变为“外部本地地址”,目的IP地址(DA)被转变为“内部本地地址”,也相当于由内部网络向外部网络发送数据包时数据包中的源IP地址(SA)和目的IP地址(DA)的互换。如图6-9下部分数据包IP地址转换示意图


推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 标题: ... [详细]
author-avatar
wwhh47123_829
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有