【转帖】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地址的转换技术,它被广泛应用于各种类型 ...
随机推荐
- PHP mysqli_get_connection_stats() 函数
定义和用法 mysqli_get_connection_stats() 函数返回有关客户端连接的统计. 语法 mysqli_get_connection_stats(connection); 返回有关 ...
- 字符串匹配问题x
qwq这个是栈的w 不是树w qwq我承认我发题很杂啦 字符串匹配问题x [问题描述] 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配 ...
- MFC消息反射机制
消息反射机制要解决什么问题呢? 消息反射机制主要是为了控件而实现的.每当控件需要某些资讯(比如,绘制自身背景的画刷,显示字体的颜色等等)时,都会频繁地向其父窗口发送通告消息(notification ...
- mybatis 语句中where 后边要跟必要条件和多个选择条件处理方法
<select id="serchRelation" resultType="Relation">SELECTr.node_one as nodeO ...
- 关于使用express作为spa应用服务的问题
前端工程师应该知道,spa是基于前端路由的单页面应用,如果服务端不做相应的配置,会经常出现404的问题. 一般的做法是默认返回应用的首页. express // 安装相关依赖 npm install ...
- mysql delete别名
有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:ELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 ...
- flask静态html
flask使用静态html 在flask并不是所有的html都需要做成动态html,并且做成动态html在使用静态资源时要改变它的路径.所以我们有些可以使用静态html. 静态html不需要后台渲染, ...
- mysql数据库索引和引擎
1. 数据库索引 1.1 索引作用 当我们在数据库表中查询数据时,若没有索引,会逐个遍历表格中的所有记录,表格中数据记录量大时很耗时.建立索引就像创建目录一样,直接通过索引找到数据存储位置,加快查找. ...
- JVM | 分代垃圾回收策略的基本概念以及过程
一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...
- 2.1 Go语言基础之运算符
运算符用于在程序运行时执行数学或逻辑运算. 一.运算符 Go 语言内置的运算符有: 1. 算术运算符 2. 关系运算符 3. 逻辑运算符 4. 位运算符 5. 赋值运算符 1.1 算数运算符 运算符 ...