【转帖】NAT类型及转换原理深入剖析
NAT类型及转换原理深入剖析
http://www.m6000.cn/other/459.html
大家都知道。NAT是位于内、外网之间,用来进行内、外网地址转换的,在当前仍是IPv4为主流协议的IP网络,NAT技术的应用非常广,因为它可以节约紧缺的公网IP地址。但是千万别以为NAT技术很简单,认为只是把内部(或者外部)地址转换成外部(或者内部)地址。在具体的应用中,NAT的应用方式,或者说NAT类型非常多,本文以Cisco设备中的NAT技术从专业角度进行一些基础知识和应用配置方面的介绍,全面的NAT配置与应用到时大家参见本人于编写的《金牌网管师——大中型企业网络组建、配置与管理》一书,或者明年将出版的《Cisco/H3C路由器配置与管理完全手册》一书。
一、NAT类型
NAT路由器是被配置为转换内部网络(inside network)中的非注册内部本地IP地址(inside local addresses)为注册IP地址(registered IP addresses)。当内部网络中使用非注册IP地址的设备要与外部公用网络(public network)进行通信时,就会使用NAT。在Cisco设备(包括防火墙、路由器,或者包含相关Cisco软件的计算机)中,NAT有多种形式和工作方式。这是在Cisco设备上配置NAT应用之前必须要掌握的。
n 静态NAT(Static NAT)
静态NAT是把非注册IP地址(如本地局域网IP地址)一对一地映射到注册IP地址(如公网IP地址)。这在网络设备需要以公网IP地址访问外网时特别有用。但一定要注意,这里仅例举了单一的正方向的IP地址转换,实际上是可以反方向,或者双方向进行IP地址转换的,下面动态NAT和复用NAT也一样可以有正向、反向、或者双向转换方式。
如图1显示的是一个静态NAT应用示例(注意箭头方向)。内部网络中的192.168.32.10、192.168.32.12和192.168.32.15这三个专网IP地址设备在通过路由器访问公网时,对应转换成213.18.123.110、213.18.123.11和213.18.123.12这三个公网IP地址,让对方看到的也是这三个公网IP地址。
图1 静态NAT应用示例
n 动态NAT(Dynamic NAT)
动态NAT是把非注册IP地址映射到一组注册IP地址,具体映射是哪两组IP地址之间的映射关系,还要看所配置的具体公用IP地址池和通信时间。但最终非注册IP地址与注册IP地址还是一对一地进行映射。
图2是一个动态NAT应用的示例。内网中的三个IP地址与一个范围为213.18.123.100到213.18.123.150的公网IP地址池进行映射。最终的结果是,192.168.32.10映射为213.18.123.116,192.168.32.12映射为213.18.123.112,而192.168.32.15映射为213.18.123.125,……。
图2动态NAT应用示例
n 复用转换(Overloading)NAT
复用NAT是动态NAT的一种形式。它是通过与IP地址的不同端口组合,把多个非注册IP地址映射到一个注册IP地址。图3是一个复用转换NAT的应用示例。示例中本地网络中的所有用户通过路由器访问公用网络时,都将映射成同一个公网IP地址——213.18.123.100,只是所使用的端口不同而已(分别为101、102、103号端口)。这对于公网IP地址比较紧张,而内网中又部署了多种应用服务器时特别有用,可以通过一个公网IP地址配置多个应用服务器。
图3复用转换NAT应用示例
n 交迭转换NAT(Overlapping NAT)
交换转换NAT是内、外部网络IP地址的相互转换方式。这种NAT方式出现在内、外网都是使用公网注册IP地址时。当你的内部网络主机使用的是注册IP地址时,路由器必须维护一张映射表,以便路由器能够对内、外网的两个注册IP地址进行交迭转换。这两方面的作用:一是可以避免内部主机真实的公网IP地址暴露在外网用户,另一方面又可以在内网使用非专网络IP地址与外网相同IP地址的用户造成冲突。这种NAT既可以通过静态NAT,又可以通过使用DNS和执行动态NAT来实现。
图4显示了一个交迭转换NAT的应用示例。在私有网络中,某主机分配了一个公网注册的IP地址237.16.32.16,连接公网时通过路由器转换成为另一个公网注册IP地址213.18.123.103。同时来自外网IP地址服务器上返回的消息又会通过路由器转换成内网中分配的固定公网注册IP地址237.16.32.10。
图4 交迭转换NAT应用示例
二、NAT术语
下面是与Cisco NAT技术密切相关的几个术语描述,这对理解NAT技术工作原理非常重要。
n 内部网络(Internal Network)
通常是指一个局域网,也称残余域(stub domain)。残余域使用的是内部网络IP地址,但可以是注册的IP地址,也可以是非注册的IP地址。使用非注册IP地址的所有计算机都必须使用NAT转换后再与其他网络进行通信。
n 外部网络(External Network)
将本地私有网络以外的所有网络都可看成是外部网络。当然,外部网络也可以是其他私有网络,也可以是公用网络,如互联网。所以外部网络上的用户使用IP地址同样既可以是注册的,也可以是非注册的。
n 本地地址(Local address)
在IP地址中,可以根据IP地址的作用范围分为本地地址和全局地址两大类。本地地址就是只有本地网络用户才可以访问,并仅作用于本地网络的IP地址。这属于非注册类型的IP,不能在互联网等公网中使用。
n 全局地址(Global address)
与本地地址相对应的IP地址。它是可以供全球用户访问的IP地址,当然是在公网中注册了的IP合法地址。
n 内部本地地址(Inside local address)
这是本地地址的一种,是指分配给内部网络主机的IP地址。这个IP地址是计算机操作系统或诸如DHCP之类的服务进行分配的,不是由NIC(Network Information Center,网络信息中心)或者服务提供商统一分配的注册IP地址。
n 外部本地地址(Outside local address)
这也是本地地址的另一种,是与内部本地地址性质一样的外部网络主机IP地址,也不是合法的互联网IP地址。它是由外部网络计算机操作系统或诸如DHCP之类的服务进行分配的。
n 内部全局地址(Inside global address)
这是全局地址的一种,是由NIC或服务提供商分配的注册IP地址。对于外界网络来说,它们扮演的是一个或多个内部本地址IP地址。
n 外部全局地址(Outside global address)
这也是全局地址的另一种,是与内部全局地址址性质一样的外部网络主机全局地址。对于外界网络来说,它们扮演的也是一个或多个本地址IP地址。
三、NAT地址转换原理
在残余域中的多数计算机是使用内部本地地址(Inside local addresses)进行通信的。在残余域中有些计算机需要与外部网络进行频繁通信时,就需要为他们配置内部全局地址(Inside global addresses),这样无需转换就可以直接与外部网络通信。
总体来说,NAT进行地址转换的过程就是把本地地址转换成全局地址的过程,无论数据包是从内部网络发往外部网络,还是从外部网络发往内部网络。不同的只是本地地址和全局地址所对应的网络不同。具体如图5所示。
图5 NAT基本地址转换原理
在以上转换过程中,当数据包还在内部网络位置时有一个作为源地址的内部本地地址和一个作为目的地址的外部本地地址;而当数据包被交换到外部网络时,数据包的源地址就会转变为内部全局地址,而目的地址被转变为外部全局地址。
相反,当数据包是从外部网络位置发来,并且仍位于外部网络中时,则它的源地址就是外部全局地址,目的地址就是内部本局地址;而当数据包被交换到本地网络时,源地址被转变为外部本地地址,目的地址被转变为内部本地地址。
如图6所示的是以上详细的地址转换方式。
图6 NAT的详细地址转换原理
数据包由内部网络发往外部网络时的基本转换原理如下:
(1)当配置了内部本地地地址的残余域计算机要与外部网络通信时,数据包到达NAT路由器后,经过普通的路由到达网关。数据包采用内部本地地址为源地址,外部本地地址为目的地址进行封装。
(2)NAT路由器先检查在路由表中是否有包含数据包目的地址的路由表项。如果没有与目的地址相匹配的路由表顶,则该数据包被丢弃。如果有与目的地址相匹配的路由表项,则路由器检验数据包是否是从内部网络发往外部网络的,并且检验数据包是否与已配置的NAT匹配。然后,路由器检查地址转换表,看是否有包含内部本地地址和内部全局地址的NAT表项。如果找到了,则把数据包的源地址用内部本地全局地址替换;如果仅配置了静态NAT,而没有与数据包匹配的静态NAT表项,则数据包不被转换,而直接被路由转发。
(3)路由器使用内部全局地址,把数据包发往目的地址。
当数据包是从公用网络发往内部网络时,NAT的基本转换原理如下:
(1)公用网络上的计算机发送数据包到私用网络时,采用源地址是外部全局地址,目的地址为内部全局地址进行封装。
(2)当数据包到达内部网络中,NAT路由器查找地址转换表和目的地址,映射到残余域(私有内部网络)中的计算机。
(2)如果存在匹配的NAT表项,则路由器把内部全局地址转换成内部本地地址,然后在发往目的计算机前检查路由表。如果没有发现与之匹配的NAT表项,数据包不被转换而直接检查与目的地址匹配的路由表。如果没有发现与目的地址路由表项,则数据包将被丢弃。
【转帖】NAT类型及转换原理深入剖析的更多相关文章
- NAT地址转换原理全攻略
		
NAT转换方式及原理 在NAT的应用中,可以仅需要转换内部地址(就是“内部本地址”转换成“内部全局地址”),这是最典型的应用,如内部网络用户通过NAT转换共享上网:也可以是仅需要转换外部地址(就是“外 ...
 - Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换
		
JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...
 - nat 类型及打洞原理
		
nat 类型分4种 1.全锥形 full cone A 与 主机B交互,nat转换 A的内部地址及端口为 ip1 port1,ip1和port1为对外地址,任何机器能访问. 2.ip 受限制(对B而 ...
 - NAT类型与穿透 及 STUN TURN 协议
		
STUN : Simple Traversal of User Datagram Protocol [UDP] Through Network Address Translators [NATs] S ...
 - 【转】NAT路由器打洞原理
		
什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“ ...
 - P2P技术详解(一):NAT详解——详细原理、P2P简介
		
1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...
 - NAT路由器打洞原理
		
什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“ ...
 - CCNP路由实验之十五 NAT(网络地址转换)
		
 CCNP路由实验之十五 NAT(网络地址转换) 众所周知,要让自己的电脑连上Internet,必须要到运营商(ISP)申请一个上网账号,依据此账号申请自己的宽频业务(拨号上网.商业固定IP等等) ...
 - NAT( 网络地址转换) 实现
		
NAT基本介绍: 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术.是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 ...
 
随机推荐
- Luogu P4109 [HEOI2015]定价 贪心
			
思路:找规律?$or$贪心. 提交:1次 题解: 发现:若可以构成$X0000$,答案绝对不会再在数字最后把$0$改成其他数: 若可以构成$XX50...0$更优. 所以左端点增加的步长是增加的($i ...
 - webpack给目录起别名
			
1. 配置文件目录: build>webpack.base.config.js: resolve: { alias: { '@': resolve('src'), 'styles': resol ...
 - CF883H
			
CF883H 题意: 给你一个字符串,需要把它以最小的划分次数划分为x个长度相等的回文串,可以重新排列. 解法: 大模拟一个. 分别统计出现一次的字符和出现两次的字符,如果没有出现一次的字符,那么所有 ...
 - PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)
			
在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...
 - MongoDB系列二:MongoDB安装过程
			
一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...
 - canvas实现水印
			
最近遇到一个需求,给所有页面加水印(登录人),不影响其他点击等功能的使用,目的是防止信息外漏,当时就在想:这年头,PS就不说人人都能使用,谁手机还没个涂鸦功能,防不了,但是就是这么个需求,那就实现吧! ...
 - dubbo服务层面上的负载均衡和高可用
			
dubbo上的服务层可以做集群,来达到负载均衡和高可用,很简单,只需要在不同的服务器节点上向同一个zk(内网环境)注册相同的服务 注意就是,消费者不能在同一个zk做这种集群操作的 转载请注明博客出处: ...
 - MAC-下安装php-redis扩展
			
MAC下安装php-redis扩展 下载php-redis,地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 下载完成得到p ...
 - Rocketmq同步发送消息
			
package com.bfxy.rocketmq.quickstart; import org.apache.rocketmq.client.exception.MQBrokerException; ...
 - 1.Json的学习--JSON.stringfy()
			
1.JSON.parse() JSON.parse() JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScr ...