深入学习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)技术,是一种将私有(保留)地址转化为合法的转换技术,它被广泛应用于各种类型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浏览器,端口(这个端口是随机的,系统动态产生),我想浏览新浪首页,就在地址栏输入http://www.sina.com.cn/,即我要访问http://www.sina.com.cn/http://www.sina.com.cn就是12.130.132.3080(这里面涉及到DNS,不是本篇重点,说明省略),此时我的电脑A就向内网(局域网)发一个数据包,这个数据包不仅有数据(即我想干什么——浏览网页),还包括一类重要的信息——源地址和目标地址。源地址就是表明数据包时由谁发出的,源地址由IP和端口两部分组成,我们这就是192.168.1.1001111;目标地址表明此数据包要送到什么地方去,或者理解为要与谁通信,他也是由IP和端口两部分组成,我们这就是12.130.132.3080,数据包大概以广播的形式发出,局域网上的其他电脑均能收到,但他们不会有响应,但是作为NAT服务器的计算机(本例为192.168.1.1)收到此数据包会有响应。
NAT
服务器的计算机有两个网卡:一个和内网相连,此网卡
IP
是私址(
PRIVITE IP
)类型,我们这为
(192.168.1.1)
;另外一个
和外网(
Internet
)相连,此网卡
IP
是公址(
PUBLIC IP
)类型,我们这为
(122.195.93.74)
。他把局域网和外网联系起来,并完成内外网地址(IP+端口)的映射工作)
2
3NAT服务器会根据数据包中的目标地址,把这个数据包送到目标地址12.130.132.3080——新浪网站(WEB服务器),但在送出此数据包之前,他对此数据包进行了修改:把此数据包的源地址由192.168.1.100:1111改为122.195.93.74:2222,这个过程就是NAT。数据包的目标地址不变。同时,他会在自己计算机中建立如图2的对照表(NAT TABLE),以后还用的上此表,后面会说到。
                   图 2
此时两者建立的关系是映射,即一一对应,在不中断IE浏览器程序运行,这种关系一直保持。此时如果你又打开搜狐网页,就又会增加建立一个映射,如192.168.1.1001112——122.195.93.742223
从上我们可以看到,无论是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
服务器可提供上万个端口),就可以让内网计算机和外网通讯(俗称上网),并且能让数台内网计算机互不影响地同时上网。