一.简单介绍

NAT(Network Address Translation):网络地址转换,是将IP数据包头中的IP地址转换为另一个IP地址的过程。在实际的应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私有IP地址的方式,将有助于减缓可用IP地址空间的枯竭。

简单来说,NAT就是在内部专有网络使用内部地址(不可路由),而当内部节点要与外界网络发生联系时,就在边缘路由器或者防火墙处,将内部的地址替换成全局地址(合法地址,可路由),从而在外部公共网上正常使用。

这里说明一下,内部地址是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由。虽然内部地址可以随机挑选,但是通常使用的是RFC 1918中定义的专用地址:10.0.0.010.255.255.255、172.16.0.0172.16.255.255,192.168.0.0~192.168.255.255。全局地址,是指合法的IP地址,它是由NIC或者网络服务提供商分配的地址,对外代表一个或多个内部局部地址,是全局统一的可寻址的地址。

NAT的作用:NAT的主要作用是节省地址空间,在任一时刻,如果内部网络中只有少数节点与外界建立连接,那么就只有少数的内部地址需要被转换成全局地址,可以减少对合法地址的需求。同时,还可以使用多个内部地址共享一个外部地址,使用端口进行区分。这样就能更有效的节约合法地址。除了节约地址,NAT还能简化配置,增加网络规划的灵活性,使用NAT,可以在规划地址时有更大的灵活性,从而简化内部网的涉及。另外,当两个有地址重叠的私有网要连接在一起时,可以使用NAT来防止地址冲突,而避免逐个改变节点的地址这个繁杂的工作。

网络地址转换主要有两种:SNAT和DNAT,下面对这两种地址转换进行详细说明。

二.SNAT

SNAT(Source Network Address Translation):源网络地址转换,内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换为公网IP。有关这个地址转换称为SNAT。

具体示例说明:

公司内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在的主机B,B收到后将数据包源地址改为本机公网网卡的ip(源:ipB,目标:ipC),然后经互联网发送给C,C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转给B,B收到回应包后修改其目的地址,将回应包(源:ipC,目标:ipA)然后将数据包转发给A。

比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP。PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip。当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip。

三.DNAT

DNAT(Destination Network Address Translation):目标地址转换,内部需要对外提供服务时,外部主动发起连接,路由器或者防火墙的网络接收到这个连接,然后将连接转换到内部,此过程是由带公网ip的网关代替内部服务来接收外部的连接,然后在内部做地址转换。此转换成为DNAT,主要用于内部服务对外发布。

互联网主机C想访问企业内部的web服务器A,但A的地址是私有地址,无法直接访问。此时,C可以访问防火墙的公网地址,C的请求数据包(源:ipC,目标:ipB)到达防火墙B后,在B的PREROUTING上将请求数据包的目标地址进行修改,并将数据包(源:ipC,目标:ipA)发送给A。A收到后进行回复发送响应包(源:ipA,目的ipC)到防火墙,防火墙收到后对数据包源地址进行修改,并将响应包(源:ipB,目标:ipC)给C。利用这种机制可以将企业内部的服务发布到互联网。

典型的应用

有个web服务器放在内网,配置内网ip,前端有个防火墙,配置公网ip,互联网上的访问者使用公网ip来访问这个网站。当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip。防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换 。

NAT的两种模式SNAT和DNAT介绍的更多相关文章

  1. 网络地址转换NAT的两种模式(概念浅析)& IP溯源

    由于全球IPv4地址越来越少.越来越贵,因此大到一个组织,小到一个家庭一个人都很难获得公网IP地址,所以只能使用内网地址,从而和别人共享一个公网IP地址.在这种情况下,NAT技术诞生. 翻译 NAT( ...

  2. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  3. 【转】Reactor与Proactor两种模式区别

    转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...

  4. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  5. JSP中两种模式的总结

    运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...

  6. Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...

  7. Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...

  8. vue-router的两种模式的区别

    众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. ### hash模式 hash模式背后的原理是`onhashchange`事件,可以在`window ...

  9. Doctype的作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义?

    Doctype作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义? 1.1 Doctype作用 <!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该 ...

  10. 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式

    一.前述 SparkStreamin是流式问题的解决的代表,一般结合kafka使用,所以本文着重讲解sparkStreaming+kafka两种模式. 二.具体 1.Receiver模式    原理图 ...

随机推荐

  1. 变速精灵+百D网盘

    首先找一下相对低一点版本的客户端,比如7.26.10 https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.26 ...

  2. C# - 获取枚举描述 - 使用增量源生成器

    前言 C# 获取枚举描述的方法有很多, 常用的有通过 DescriptionAttribute 反射获取, 进阶的可以加上缓存机制, 减少反射的开销.今天我们还提供一种更加高效的方法,通过增量源生成器 ...

  3. 利用标准IO函数接口实现计算一个本地磁盘某个文件的大小,文件名通过命令行进行传递

    利用标准IO函数接口实现计算一个本地磁盘某个文件的大小,文件名通过命令行进行传递 方法一:使用ftell函数直接获取光标偏移量 相关标准库函数 SYNOPSIS #include <stdio. ...

  4. MySQL 创建数据库并指定字符集编码

    备忘 CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON mydb.* TO "use ...

  5. sql server2008出现set 选项的设置不正确:"ARITHABORT”

    ( SELECT STUFF(( SELECT '','' + CODE FROM INVNEWSAL11 WHERE (MASTERI=BILRCV.SRCERI) OR (LINKERI IN ( ...

  6. S7.Net与西门子PLC通讯——纯新手必看

     前言 本文档适合从未接触过PLC的.NET开发程序员入门查看.(其实看完了之后,PLC开发也就那样) PLC通讯入门比较难,需要关注的细节比较多.一边学习一边举一反三多思考,一定要自己创建Demo跟 ...

  7. public void add(int index, E element)的方法源码分析

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  8. 格林威治时间(Tue Jan 01 00:00:00 CST 2019)转Date

    Excel导入时后台接受日期格式数据为[格林威治时间](例:Tue Jan 01 00:00:00 CST 2019) 格林威治时间转Date package com.cn; import java. ...

  9. jmeter操作数据库增删改查的注意事项

    一,场景 1.在jmeter造数据后,可通过数据库查询数据库是否新增数据,判断脚本执行是否成功. 2.有些数据新增不可重复,因此脚本执行后需要将新增的数据删除,才能再次执行脚本. 二.连接数据库 在通 ...

  10. 题解:AT_abc369_d [ABC369D] Bonus EXP

    题目大意: 有 nnn 个怪物,每个怪物有一个战力值 aia_iai​ ,你可以选择击败他或放走他,放走他没有经验值,击败他可以获得 aia_iai​ 的经验值,如果击败的数量是偶数,则还可以获得 a ...