热门标签 | 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地址转换示意图


推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 编码unicode解决了语言不通的问题.但是.unicode又有一个新问题.由于unicode是万国码.把所有国家的文字都编进去了.这就导致一个unicode占用的空间会很大.原来 ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
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社区 版权所有