接下来要优化的,还是和IP有关!

IP也很无奈,怎么受伤的总是我!

谁让IP地址那么难记呢?你想想,你是怎么打开这个网页的?在地址栏敲IP地址?你看到这篇文章时,确定是在地址栏敲的IP地址?

谁信呐!

其实你并不知道这个网站的IP地址对不对,但你也不用记,因为可以用很容易记的名称符号来访问网络中的每一个站点。

等等,咱不是说IP地址用来表示网络中的设备、服务器或者电脑吗?怎么又是名称符号?

没错,IP地址的确是唯一的标识,相信我,我们访问网络中的任何一个站点,最终都是根据IP地址来访问的。但IP太难记了,如果我们用个有意义的、好记的名称符号来对应这些站点的IP地址,我们就能够使用名称符号而不是IP来访问了。就像身份证上姓名和号码对应一样,我们就可以用姓名来交流而不是身份证号码。

这就需要一个协议,来把复杂难记的IP地址去映射一个简单好记的名字,这个协议,就是DNS(Domain Name System,域名系统服务协议)。

DNS的主要工作,就是把我们敲入的名字符号换成IP地址去访问,这个过程叫"域名解析"。

我们先看一个有趣的东西。

打开CMD命令提示符,随便去Ping一个不存在的域名,比如xyz.com:

3天学完个人ip设计(网络工程师13)(1)

我们可以看到,域名xyz.com不存在,无法解析它的IP地址。

现在,让打开我们电脑上的一个神奇文件hosts,它在C:\windows\system32\drivers\etc目录里面,我们用记事本打开它,并在最后添加一行:

127.1.1.1 xyz.com

IP地址127.1.1.1和域名xyz.com之间敲个空格。意思是用地址127.1.1.1映射域名xyz.com。还记得127开头的IP地址只代表自己吧。

现在,再Ping一次:

3天学完个人ip设计(网络工程师13)(2)

成功把域名xyz.com解析成地址127.1.1.1了!

不过,全世界提供服务的IP地址太多了,总不能全靠自己写入hosts文件吧。

所以,域名解析还得靠DNS去完成,hosts文件只用于一些特殊用途,即使电脑上没有也没关系。

既然DNS的工作是"域名解析",那什么是域名呢?你想想,全世界上网的人那么多,提供网络服务的服务器也多如牛毛,且分散在每一个可能的地方,如果大家随便给自己的IP地址起名字,不仅名字可能会重复,而且格式也会五花八门。

所以域名系统需要解决三个问题,一是规范起名字,不能乱起名;二是名字需要注册登记,避免重复;三是怎么在大范围网络中快速解析。

第一个问题,怎么起域名。我们中国人的名字一般有两级,姓和名,姓在前,名在后。而域名有很多级,级别高低从右向左排列,每级之间用"."隔开。

最右边第一级的称为"根域",用"."表示,是域名系统中所有域名的"鼻祖",不管是哪个域名,根域都是"."。

第二级称为"顶级域",有多种分类:有表示组织性质的,如商业公司com、教育机构edu、政府机关gov,等等,还有表示国家或地区代码的,如中国cn、美国us、法国fr等等。顶级域名可以根据自己的性质来选择使用。

第三级称为"二级域",这里是你想用的名字,可以随便,就像人名中,姓不能随便,但名字可以随便起一样,但是不能和别人重名。

第四级称为"三级域",一般表示你所提供的服务类型,由自己管理。如www表示web服务、mail表示电子邮件服务,等等。

比如xyz公司,可以起名为"xyz.com.",如果提供web服务,可以是"www.xyz.com.",如果提供电子邮件服务,可以是"mail.xyz.com.",等等。三级域一般由公司自己管理。

不过,因为所有域名的根域都是".",所以一般都省略不写了。

第二个问题,怎么避免重复。名字起好了,还不能直接用,必须到"域名注册管理机构"申请注册登记,注册时即可检查出你起好的域名是否已被注册过,如果没有,那么"域名注册管理机构"会把你的域名和你的IP地址等信息记录在案,并提交到DNS服务器。

最后一个问题,怎么快速解析。

DNS也分为服务端和客户端,提交域名解析申请的都是客户端。为了加快域名解析速度,服务端采用了发布式部署,网络中有很多DNS服务器,每台DNS服务器都注册了很多域名,其中根域服务器注册了所有顶级域服务器,顶级域服务器数量更多,每台都注册了很多二级或三级域名。可见,DNS服务器是按层次排列的、分布式的系统。

DNS也是一个应用层协议,采用TCP和UDP的53端口号。域名解析使用UDP,主备DNS服务器之间同步信息使用TCP(主备DNS服务器是指在一个区域内承担域名解析的DNS系统,由区域电信运营商提供)。

我们以域名"xyz.com"为例,讨论一下域名解析全过程。首先在客户端提交了xyz.com域名解析申请(比如ping xyz.com):

第一步,电脑先查找本机里的hosts文件,如果有就返回对应的IP地址,否则第二步;

第二步,电脑查看本机的DNS缓存中是否有记录,没有继续第三步;

第三步,根据电脑的首选DNS服务器配置(一般由DHCP服务器自动给电脑配置,也有手工配置),封装UDP查询报文去查询本地DNS服务器A。

服务器A在自己的区域配置中如果查到,返回权威性结果(任何一台DNS服务器只有在自己的区域配置中查询到的才是权威性结果,其他都是非权威性结果);如果没有查到,就在缓存中查询,查到返回非权威性结果,否则继续第四步;

第四步,本地DNS服务器A如果设置了转发器,则根据转发器设置中的地址去另一个DNS服务器B查询,服务器B如果查到,则返回结果给服务器A,再由服务器A把结果返回客户端。如果服务器B也没有查到,就根据服务器B配置的转发器去查询服务器C,服务器C如果也没有查到可以再根据转发器去查询服务器D,依此类推,查到后再依次返回结果。这叫"递归查询"。

其中不论任何一台服务器如果没有配置转发器,则进入第五步;

第五步,不论是第四步中的哪台服务器(我们记为服务器X),如果没有配置转发器,则去查询根域服务器,根域服务器返回com域名服务器的IP地址,继续第六步;

第六步,服务器X根据返回结果,去查询com顶级域名服务器,由于xyz注册为com顶级域,除非没有注册过,否则一定能查到,返回结果给服务器X,服务器X依次返回给服务器A,再由服务器A将结果返回客户端。第五步和第六步,叫"迭代查询"。

域名查询成功后,途中每台DNS服务器和客户端都会在本地缓存中保存查询结果,下次再收到相同域名的解析请求时可以直接返回结果,使查询速度加快。

我们在电脑上查一下:打开CMD命令提示符,敲入命令nslookup,然后敲入域名,即可解析得到对应的IP地址:

3天学完个人ip设计(网络工程师13)(3)

小Q:DNS除了主备服务器间同步信息使用TCP外,还有什么情况会使用TCP?

欢迎留言讨论。

,