当内部网络也使用公网注册地址(或者是外网合法地址)时,如果仍使用标准的静态或者动态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. MFC MDI 主框架和标签页数据互操作

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. OpenStack 企业私有云的若干需求(7):电信行业解决方案 NFV

    自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持.云快速交付 ...

  3. RCC BUCK变压器设计

    RCC电路工作于临界模式,不是固定工作频率,其设计遵从BUCK原理.Buck电路在最高输入电压时为电感最恶劣工作条件: 以下图为例: 1.首先设定如下参数:输入电压Vin,输出电压Iout,工作频率f ...

  4. 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码

    不能更新的原因: 1.在xml文件中代码错误或者格式错误 2.eclipse 编译器是老版本 3.布局文件的文件名有大写字母 4.含有相同文件名.格式的xml文件 解决方法: 1.找到出错的xml文件 ...

  5. 深入理解FTP协议

    文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议.FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有 ...

  6. python读取excel并制表输出

    源码如下: #!/usr/bin/python #coding=UTF-8 import xlrd import sys from texttable import Texttable def she ...

  7. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  8. Codeforces 549B. Looksery Party[构造]

    B. Looksery Party time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. KSFramework:Unity3D开发框架快速入门

    KSFramework知识 https://github.com/mr-kelly/KSFramework KSFramework是一个整合KEngine.SLua和一些开发组件组成的全功能Unity ...

  10. 紫书例题-Ancient Cipher

    Ancient Roman empire had a strong government system with various departments, including a secret ser ...