重叠(Overlapping) NAT
当内部网络也使用公网注册地址(或者是外网合法地址)时,如果仍使用标准的静态或者动态NAT转换,则可能使得转换的内网地址与外网中合法地址冲突,使数据包又返回到了本地网络,这肯定是不行的。这时我们就要使用重叠网络(Overlapping Network)的NAT转换方案了,把数据包中的目的地址转换成与外网不在同一网段的全局地址。
使用重叠(Overlapping)NAT可以实现内、外部网络都使用注册IP地址情况下的地址转换。这里的"重叠"其实就是指内、外部网络使用的IP地址段重叠(因为都是公网注册IP地址)。本节也包括两个方面的配置:一是静态方式的重叠NAT配置,二是动态方式的重叠NAT配置。下面先来了解重叠NAT的工作原理。
图5-18显示了如何处理重叠网络间的NAT转换。示例中内部网络和外部网络都使用了1.0.0.0/8这个注册IP地址段。下面是重叠网络NAT地址转换的演示示例。步骤序号是与图中的序号对应的。

(1)内部网络中IP地址为1.1.1.1的主机通过计算机名向外部网络中的主机C发起连接。连接请求首先会向DNS服务器发出一个由名称到IP地 址的查询请求,请求包在到达路由器之前的源地址为1.1.1.1主机的内部本地地址1.1.1.1,目的地址为DNS服务器地址。在到达路由器后,请求包 的源地址被替换成1.1.1.1主机的内部全局地址2.2.2.2,目的地址不变。
(2)当DNS服务器发出的查询请求应答包(其中源地址为DNS服务器地址,目的地址为1.1.1.1主机的内部全局地址2.2.2.2,并包括了解析出的C主机的IP地址1.1.1.3)到达NAT路由器后,如果返回地址有重叠(也就是返回的地址在内部网络中已使用),将转换这个返回的地址。转换的方法是创建一个简单的NAT条目,把解析得到的C主机IP地址1.1.1.3映射到一个从独立配置的外部本地地址池中分配到的外部本地地址3.3.3.3,参见图中下面的NAT表项。
DNS服务器会检查每一个DNS应答,确保解析得到的IP地址不是在内部网络中已使用的IP地址,否则路由器将转换这个解析得到的IP地址。
(3)当解析到C主机的IP地址后,内部网络1.1.1.1主机会以映射后的3.3.3.3地址作为目的地址向外部网络C主机发起连接。
(4)路由器利用原来已获得的信息建立一个内部本地址、内部全局地址、外部本地地址和外部全局地址的NAT映射表,参见图中的NAT映射表项。
(5)路由器继续发送连接请求数据包,数据包的源地址用内部全局地址替换,数据包中的目的地址用外部全局地址替换,然后继续发送连接请求数据包。
(6)当外部网络主机C接收到这个数据包时,以一个应答数据包进行响应。应答数据名的源地址为C主机IP地址1.1.1.3,目的地址为内部网络全局地址2.2.2.2。
(7)当路由器接收到这个应答包时,把应答包中的目的地址用内部本地地址1.1.1.1进行替换,而源地址用外部本地地址1.1.1.3进行替换,转发给内部网络1.1.1.1主机
重叠(Overlapping) NAT的更多相关文章
- 计算机网络 NAT
NAT(Network Address Translation,网络地址转换)是1994年提出的.当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因 ...
- 【转帖】NAT类型及转换原理深入剖析
NAT类型及转换原理深入剖析 http://www.m6000.cn/other/459.html 2018年8月4日16:40:14发表评论 297 views 大家都知道.NAT是位于内.外网之 ...
- memcpy函数用法
memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...
- Eclipse CDT Linux下内存分析 补记
常用工具汇总 http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 常用的内存分析工具 http://en.wikipedia.org/wi ...
- Linux C/C++ Memory Leak Detection Tool
目录 . 内存使用情况分析 . 内存泄漏(memory leak) . Valgrind使用 1. 内存使用情况分析 0x1: 系统总内存的分析 可以从proc目录下的meminfo文件了解到当前系统 ...
- memcpy与memmove的区别
在面试中经常会被问道memcpy与memove有什么区别? 整理如下: 其实主要在考C的关键字:restrict C库中有两个函数可以从一个位置把字节复制到另一个位置.在C99标准下,它们的原型如下: ...
- memmove 和 memcpy的区别
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void * ...
- 各个函数消耗的时间profiling和内存泄漏valgrind
来源:http://06110120wxc.blog.163.com/blog/static/37788161201333112445844/ ARM(hisi)上面的profiling和valgri ...
- 不平衡数据下的机器学习方法简介 imbalanced time series classification
imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...
随机推荐
- x01.Game.LitSkull: 梯次防御
1.人要有点精神 人要有点精神,否则,不是沦落为毫无意义的看客,就是退化成食色性也的动物,有被开除球籍的危险,如晚清. 2.框架 引号头文件在当前目录下搜寻,三角头文件在配置目录下搜寻,这是一个简单的 ...
- android中BuildConfig.DEBUG的使用
ADT(r17)中添加了一个新功能可以允许开发者只在Debug模式下允许某些代码.Build系统生成一个名称为BuildConfig的类,该类包含一个DEBUG 常量,该常量会根据您的Build类型自 ...
- 洛谷⑨月月赛Round2 P3392涂国旗[DP]
题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上方若干行(>=1)的格子全部是白色的. 接下来若干行(>=1)的格子全部是 ...
- 【Unity3d】Ray射线初探-射线的原理及用法
http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...
- NODE.JS开发指南学习笔记2
1.核心模块 核心模块是Node.js的心脏,由一些精简高效的库组成,为其提供了基本的API.2.全局对象 global.所有的的全局变量都是其属性.其根本的作用是作为全局变量的宿主.3.全局变量 1 ...
- C# Interlocked 笔记
无锁代码下,在读写字段时使用内存屏障往往是不够的.在 64 位字段上进行加.减操作需要使用Interlocked工具类这样更加重型的方式.Interlocked也提供了Exchange和Compare ...
- [No00001F]阅读速度如何快一点、再快一点?-不知道读啥?试试这些电影剧本!
少侠萌好,还记得包大人给大家推荐过的语感培养大法——“电影剧本阅读法”吗?最近,包大人陆陆续续收到了好几位少侠的实践报告,他们中不少人抱怨:“大人,你明明说过电影剧本篇幅短.用词简单的,可为什么我还是 ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- 64位win7硬盘安装64位ubuntu 13.04
最近本来是准备通过升级的方式把ubuntu从12.04升级到12.10再升级到13.04的,但是升级到12.10之后,可能是因为某一步的操作不当,出现无法进入系统的情况.不过还好的是升级之前保存了主要 ...
- 关于maya动力学系统的一些总结
maya动力学有以下几套系统: 1.刚体.柔体系统 刚体系统的典型节点连接方法如下: 物体的变换节点.形状节点连接rigidBody节点,刚体节点输出力到解算器节点,解算器输出新的变换到变换节点 值得 ...