当内部网络也使用公网注册地址(或者是外网合法地址)时,如果仍使用标准的静态或者动态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的更多相关文章

  1. 计算机网络 NAT

    NAT(Network Address Translation,网络地址转换)是1994年提出的.当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因 ...

  2. 【转帖】NAT类型及转换原理深入剖析

    NAT类型及转换原理深入剖析 http://www.m6000.cn/other/459.html  2018年8月4日16:40:14发表评论 297 views 大家都知道.NAT是位于内.外网之 ...

  3. memcpy函数用法

    memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...

  4. Eclipse CDT Linux下内存分析 补记

    常用工具汇总 http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 常用的内存分析工具 http://en.wikipedia.org/wi ...

  5. Linux C/C++ Memory Leak Detection Tool

    目录 . 内存使用情况分析 . 内存泄漏(memory leak) . Valgrind使用 1. 内存使用情况分析 0x1: 系统总内存的分析 可以从proc目录下的meminfo文件了解到当前系统 ...

  6. memcpy与memmove的区别

    在面试中经常会被问道memcpy与memove有什么区别? 整理如下: 其实主要在考C的关键字:restrict C库中有两个函数可以从一个位置把字节复制到另一个位置.在C99标准下,它们的原型如下: ...

  7. memmove 和 memcpy的区别

    memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void * ...

  8. 各个函数消耗的时间profiling和内存泄漏valgrind

    来源:http://06110120wxc.blog.163.com/blog/static/37788161201333112445844/ ARM(hisi)上面的profiling和valgri ...

  9. 不平衡数据下的机器学习方法简介 imbalanced time series classification

    imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...

随机推荐

  1. openwrt修改flash大小

    前言 默认openwrt trunk编译出来的flash大小为8M,但是我们手上的板子可能flash大小更大,本文以MT7620a为例,将其flash大小由8M修改为16M或者32M 增加dts文件 ...

  2. PhpSms 稳定可靠的php短信发送库

    可能是目前最聪明.优雅的PHP短信发送库了.从此不再为各种原因造成的个别短信发送失败而烦忧! phpsms的任务均衡调度功能由toplan/task-balancer提供. GitHub地址:http ...

  3. [转]Oracle 修改或者删除临时表 ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引

    本文转自:http://blog.csdn.net/treasurelifelhf/article/details/7290729 由于存储过程出现问题,导致前台页面无法显示数据.执行存储过程发现临时 ...

  4. MMORPG大型游戏设计与开发(part1 of net)

    网络模块的设计,是大型多人在线游戏中比较重要的一部分.我之所以将网络模块放到最前面,是因为许许多多的开发者面对这一块的时候充满了疑惑,而且也觉得很神秘和深奥.这些我们面对到的困难,其实是由于我们对这方 ...

  5. git 学习使用总结二(远程仓库操作)

    这篇文章仅供自己以后翻阅加深记忆,要系统的学习 git 教程(中文版),请移步到 liaoxuefeng.com 学习 git 教程部分. 我使用的是 windows 系统,所以使用 Git Bash ...

  6. 三星s4宣传片配色有惊喜

    三星s4宣传片配色有惊喜据了解,一周前,三星曾对外发布了新旗舰手机galaxy s4的宣传视频,不过那份视频里所含信息仅仅只有s4发布会的邀请函.而日前,三星官方发布了s4的第二弹宣传片则暗示该机在配 ...

  7. 转载:JavaSE之反射

    该文章转载自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html Java反射详解 本篇文章依旧采用小例子来说明,因为我 ...

  8. 第9章 用内核对象进行线程同步(4)_死锁(DeadLock)及其他

    9.7 线程同步对象速查表 对象 何时处于未触发状态 何时处于触发状态 成功等待的副作用 进程 进程仍在运行的时候 进程终止的时(ExitProcess.TerminateProcess) 没有 线程 ...

  9. C++ ODB 框架(未实践使用)

    http://www.codesynthesis.com/products/odb/doc/manual.xhtml#17.1

  10. TabBarController

    1.两种方式创建系统TabBarController -(id)init{ self = [super init]; if( self ) { //newTask HSNewTaskViewContr ...