本文分析一下DHCP和NAT
首先分析一下NAT,即网络地址转换。家中的路由器利用了这种技术,本来一个家庭只是从ISP那里申请到了一个IP,但是为什么能够同时供好几个终端同时上网,IP在家用路由器这里发生了什么?这只是NAT的应用场景之一,还有比如很多公司存在所谓的内部网络,处于内部网络的终端可以访问外部网络,但是外部网络却不能访问这些终端,这里使用的也是NAT技术。
从上面的描述中可以看出NAT至少有两个好处:一是缓解了IP资源不足的问题,或者说多路复用了IP;二是安全,至少保证了内网的安全,因为外网无法访问内网(但是内网却可以访问外网,有点信息不对称的赶脚)。而这两个好处大概就是促使NAT出现的原因。
现在考虑一个机构的情形:机构的网络一般分为两部分,一部分是对外的,称为外网;另一部分就是内网了。外网的终端一般都是一些网页服务器之类的,它们是对外宣传的窗口,所以必然要能被别的网络访问,因而要有独立的、合法的IP地址;内网的终端存放的都是机构的机密信息,不希望被外界访问,所以只需要私有IP(参见这里)就够了,然后提供几个或一个合法IP(以下称为公共IP)供它们访问外部网络。
划分外网和内网的关键是路由器,这样的机构显然需要搭建自己的路由器。假设该机构从上级ISP那里申请到一段IP,那么首先要给那些服务器分配合法的IP;然后要给内部网络留至少一个公共IP,考虑到上网机器很多,多留几个IP分担流量也是必要的。这样一来,其实可以把总的网络分为两个子网,一个作为外网,另一个做内网,相应的,IP也被分为两部分。子网的核心是交换机,于是只要在内网的那台交换机中集成NAT功能就可以了。
下面进入正题,NAT的原理是什么?跟路由器差不多,核心也是类似的NAT转换表,负责私有IP和公共IP的转换。比如内部一台终端的IP是192.1.23.78,当这台终端发送一个数据包到NAT(集成在路由器或交换机中)的时候,NAT将把这个包的源地址IP修改成某个公共IP,然后才发送到外部网络;同样的道理,当外部的数据包按照某个公共IP发送到NAT的时候,NAT要把该数据包的目的IP修改成对应的私有IP,那么问题来了,公共IP就那么几个还好说,但是内部的私有IP却是成千上百个,NAT如何知道这个进来的数据包应该发往哪个私有IP呢?
答案是这样的:内部终端向外发的数据包经过NAT的时候,这个包称为请求包(或者形象的说,是询问包),NAT会同时记录下这个包的目的IP和源IP,然后把源IP修改成公共IP;当一个包从外部进来的时候,这个包就是应答包,它必然对应一个请求包,而且是从对应请求包的目的IP代表的终端发来的,NAT检查这个应答包的源地址,这个地址必然是刚才某个请求包的目的地址,这样就能找到这个请求包的修改前的源地址,也就是私有IP地址。如下图:
那么家用的路由器原理也就很清楚了。
然后是DHCP,即动态主机配置协议。想象以下,有朋友来你家,想通过你家的路由器上网,那你是不是要亲自配置以下路由器中的转发表为你朋友的电脑配置一个IP呢?而且每天都有不同的朋友来,那你每天都要配置一次是不是就要抓狂?而这还不是最要命的,加入你是一家公司的网管,而公司每天都有成千上百个这样的“朋友”造访的话。。。是的,你这时就需要DHCP!!
(今天偷个懒,明天继续)