深入学习NAT工作原理
我们单位中的电脑很多,组成了一个局域网,网络中只有一个电脑和外网(Internet)相连,当然有一个外网地址,但仅仅一个。我以前一直不明白,我们局域网的电脑均能上网,几台同时上也没有问题,究竟是怎么实现的?
当时我知道,Internet网上的计算机都必须有一个IP地址(公址Public IP),才能和Internet网络上其他设备正确通信。在某个时刻必须是唯一的(这句话某个时刻要解释一下,我以前家用电脑是通过电信上网的,每次登陆上网都会从电信公司ISP得到一个公址Public IP,但每次并不相同,当我得到某个公址Public IP,外网上的其他设备不会为我得到的那个公址Public IP;但是当我下线以后,其他某一台电脑是可以得到我刚才用的那个公址Public IP。其实ISP是把公址Public IP是租给我的,我不租时他们可以租给其他电脑以提高Public IP利用率(Public IP就是一种资源,不是无穷无尽的),但是不可以同时把一个公址Public IP租给两台设备,可以在不同时间把一个公址Public IP租给两台或更多设备,在任一时间一个公址Public IP只对应着Internet网上一个设备,如我的计算机,而不会两个)
 
我们局域网的电脑均能上网,几台同时上也没有问题,究竟又是怎么实现的?这就要说到我们今天学习的NAT。
下面先来一段教科书上的定义:NAT网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
看了上面定义,还是不能理解局域网中电脑几台同时均能上网的问题。
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat 和 端口多路复用OverLoad。
其中端口多路复用OverLoad是目前我们网络中应用最多的一类,我们就拿他说事。(其他两种,你感兴趣又不知道的话,不知百度之吧,呵,不是很难理解的)
搞懂了其中端口多路复用OverLoad,你就能理解理解局域网中电脑几台同时均能上网的问题了。不要怕头疼,接着看,关键的地方要到啦。
我们说我的计算机和外网通信,一定是我的电脑里有一个应用程序在运行,比如说IE浏览器。这个应用程序能够和外界Internet网通信,必须在本计算机上打开一个或几个端口;同样当他浏览某个网站的某个网页时,也必须通过网站服务器中的一个或几个端口才能复制网页内容再按原路传送过来,我们的浏览器将他显示在我们的屏幕上。这就是我们运用浏览器浏览网页的过程。从上面的过程我们可以知道,网络设备间通信不仅要有Public IP(我的计算机和网站服务器的),而且要有各自端口号才能完成相互的通讯。IP+端口号才是完整的通讯地址!
端口是什么?我罗嗦几句。这里的端口是指软端口。有有软就有硬,对!硬端口直观、简单,就是电脑主机箱后面的那些插口:RJ45接口、串口、并口、RS232等等,看得见、数得清的。
软端口是什么东东?电脑里应用程序、服务等打开的端口,看不见的,当然你看不见不要紧,那些应用程序能知道并使用。每个和外部通信的应用程序均会创建属于自己的一个(或几个)软端口以便和外部通信。当然每个端口有自己的端口号以示区分。通常一台计算机最多可以开65535个端口,也就是说端口号可以是1~65535,完全够你(的计算机中的应用程序)用的了。我们说的远程桌面运用,其实就开了一个端口:3389.通过这一个端口就可以完全控制你的电脑了。
有人还是搞不清软端口、硬端口,比如我以前就这样,看见端口就头晕。(我这人挺笨的,我妈可以证明)所以我就再比较一下他们。我们通常上网浏览、发邮件等会同时开几个软端口,他们都是通过RJ45这一个硬端口和外界通信的,也就是说,一个硬端口中可以同时通过几个软端口中的通信数据。体会一下吧。什么,还不懂?!你可以到一边凉快……
顺便说一句,应用程序都必须建立通信端口吗?不一定。比如有些游戏(也是一种应用程序)有单机版和网络版的,单机版就不一定建立通信端口(如果能更新就要建立),网络版一定会建立。以后你就知道单机版和网络版的含义和区别了吧。
 
端口问题说了半天,也许你已经……,我要说的,正是这些端口构成NAT的基础,使内网的多台电脑能够共享一个公址Public IP同时上网。理解上面的内容,下面就说明NAT工作原理——本篇重点!
            
              NAT工作原理图
 
                  图  1
我们现在以一个IE浏览器浏览新浪首页实例来说明NAT工作原理(阅读下文是请多参见图1):
1、假设我们局域网中的一台电脑A(192.168.1.100),打开了IE浏览器,IE浏览器程序运行后,打开本机的1111端口(这个端口是随机的,系统动态产生),我想浏览新浪首页,就在地址栏输入http://www.sina.com.cn/,即我要访问http://www.sina.com.cn/,http://www.sina.com.cn就是12.130.132.30:80(这里面涉及到DNS,不是本篇重点,说明省略),此时我的电脑A就向内网(局域网)发一个数据包,这个数据包不仅有数据(即我想干什么——浏览网页),还包括一类重要的信息——源地址和目标地址。源地址就是表明数据包时由谁发出的,源地址由IP和端口两部分组成,我们这就是192.168.1.100:1111;目标地址表明此数据包要送到什么地方去,或者理解为要与谁通信,他也是由IP和端口两部分组成,我们这就是12.130.132.30:80,数据包大概以广播的形式发出,局域网上的其他电脑均能收到,但他们不会有响应,但是作为NAT服务器的计算机(本例为192.168.1.1)收到此数据包会有响应。
(NAT服务器的计算机有两个网卡:一个和内网相连,此网卡IP是私址(PRIVITE IP)类型,我们这为(192.168.1.1);另外一个和外网(Internet)相连,此网卡IP是公址(PUBLIC IP)类型,我们这为(122.195.93.74)。他把局域网和外网联系起来,并完成内外网地址(IP+端口)的映射工作)
2、3、NAT服务器会根据数据包中的目标地址,把这个数据包送到目标地址12.130.132.30:80——新浪网站(WEB服务器),但在送出此数据包之前,他对此数据包进行了修改:把此数据包的源地址由192.168.1.100:1111改为122.195.93.74:2222,这个过程就是NAT。数据包的目标地址不变。同时,他会在自己计算机中建立如图2的对照表(NAT TABLE),以后还用的上此表,后面会说到。
                   图 2
此时两者建立的关系是映射,即一一对应,在不中断IE浏览器程序运行,这种关系一直保持。此时如果你又打开搜狐网页,就又会增加建立一个映射,如192.168.1.100:1112——122.195.93.74:2223。
从上我们可以看到,无论是IE浏览器程序开的端口,如本例中1111,还是NAT服务器的映射端口本例中2222,都是随机的,但一旦建立,他们必须是一一对应的映射关系,而且不会被其他程序再使用!
4、接着说,新浪网站(WEB服务器)——12.130.132.30:80口运行的程序收到此数据包以后,处理分析得知,要把本站某网页内容复制后再发到122.195.93.74:2222(注意这是我们的NAT计算机),就打包数据发送。这个数据包也有源地址和目标地址,源地址12.130.132.30:80(新浪),目标地址122.195.93.74:2222(我们的NAT计算机)。
5、很快我们的NAT计算机就收到到此包了,NAT计算机根据图2的对照表,把此数据包的目标地址从122.195.93.74:2222改为192.168.1.100:1111,这个过程也是NAT,源地址不变,为新浪网址12.130.132.30:80。
6、修改后将数据包向内网发出,我的这台局域网中的电脑A,更确切的说我的电脑运行着的IE浏览器程序就能收到他要的外网数据,处理以后就在我的显示器上将新浪网页显示出来。
至此完成我们内网电脑通过NAT服务器和外网设备一次完整的通讯,这个过程中地址改过两次,也就是说NAT两次:在我内网计算机上传的过程中,数据包的源地址改过一次,目标地址一直保持不变;下传过程中相反。

本文出自 “老马不识图” 博客,转载请与作者联系!

类似的,我们局域网中的计算机B要访问外网,过程和上相似,NAT服务器会提供另外一个未用的端口给局域网中的计算机B。只要NAT服务器能提供不同的端口(NAT服务器可提供上万个端口),就可以让内网计算机和外网通讯(俗称上网),并且能让数台内网计算机互不影响地同时上网。
 

深入学习NAT工作原理的更多相关文章

  1. servlet入门学习之工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  2. 学习iis工作原理

    文章:IIs工作原理 文章:Asp.Net 构架(Http Handler 介绍) - Part.2

  3. Webpack学习-工作原理(上)

    对于webpack的认识始终停留在对脚手架的使用,不得不说脚手架既方便又好用,修改起来也方便,只需要知道webpack中各个配置项的功能,于是对于我们来说,webpack始终就是一个黑盒子,我们完全不 ...

  4. Appium学习——Appium工作原理

    appium的工具原理 Appium-client>>>>Appium-server>>>>移动设备 ========================= ...

  5. NAT 工作原理

    网络地址转换,就是替换IP报文头部的地址信息.NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力 规定了三个保留地址段落:10.0.0 ...

  6. Webpack学习-工作原理(下)

    继上篇文章介绍了Webpack的基本概念,完整流程,以及打包过程中广播的一些事件的作用,这篇文章主要讲生成的chunk文件如何输出成具体的文件.分同步和异步两种情况来分析输出的文件使用的webpack ...

  7. NAT、NAPT(PAT)的基本概念和工作原理及区别

    转自:http://blog.sina.com.cn/s/blog_5d302bd20100gprv.html 近年来,随着 Internet 的迅猛发展,连入 Internet 的主机数量成倍增长. ...

  8. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

  9. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

随机推荐

  1. Web API中的返回值类型

    WebApi中的返回值类型大致可分为四种: Void/ IHttpActionResult/ HttpResponseMessage /自定义类型 一.Void void申明方法没有返回值,执行成功后 ...

  2. SQL Server 备份到网络盘网络映射盘

    declare @DBName nvarchar(max) declare @BakName nvarchar(max) --在这里修改数据库名称 select @DBName='[LFBMP.PO] ...

  3. MY服务器架设

    研究了一天,终于弄出来了,进游戏耍了会,感觉不错,下面分享架设步骤给大家 分享端的大大也出了个虚拟机运行需要注意的视频,大家看看吧,我就这样弄架设成功了 链接:链接: http://pan.baidu ...

  4. Hadoop完全分布式安装

    一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...

  5. Github 开源项目(二)gorun (go语言工具)

    gorun是一个工具,可以在Go程序的源代码中放置“爆炸线”来运行它,或者明确运行这样的源代码文件. 它的创建旨在试图让Go更加吸引那些习惯于Python和类似语言的人们,他们使用源代码进行最明显的操 ...

  6. solrj管理索引库

    solrj管理索引库 1.1. 什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, ...

  7. git 提交解决冲突(转载)

    转载 git 提交解决冲突 http://www.cnblogs.com/qinbb/p/5972308.html   一:git命令在提交代码前,没有pull拉最新的代码,因此再次提交出现了冲突. ...

  8. UTF8 UTF16 之间的互相转换

    首先需要知道 Unicode 编码范围 [U+00, U+10FFFF], 其中 [U+00, U+FFFF] 称为基础平面(BMP), 这其中的字符最为常用. 当然, 这 65536 个字符是远远不 ...

  9. 《Python数据可视化编程实战》

    第一章:准备工作环境 WinPython-32bit-3.5.2.2Qt5.exe 1.1 设置matplotlib参数 配置模板以方便各项目共享 D:\Bin\WinPython-32bit-3.5 ...

  10. 前端下载excel打不开求助+解法

    解法: //axios   return request({ url: "/saleUnit/exportSaleUnit", headers: { "biz-sourc ...