DNS简介
DNS(英文全称:Domain Name System,域名系统)是互联网的一项服务。它是将域名和ip地址相互映射的一个分布式数据库。
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于ip地址的,因特网上的节点都可以用ip地址惟一标识,并且可以通过ip地址被访问。但即使是将32位的二进制ip地址写成4个0~255的十位数形式,也依然太长、太难记。因此,人们发明了域名(Domain Name),域名可将一个ip地址关联到一组有意义的字符上去。
用户访问一个网站的时候,既可以输入该网站的ip地址,也可以输入其域名,对访问而言,两者是等价的。例如:微软公司的Web服务器的ip地址是207.46.230.229,其对应的域名是www.microsoft.com,不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。
我们访问网站时,在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的ip地址,然后调出ip地址所对应的网页。
域名系统
域名系统在全世界保持唯一性,也就是全球通用一份。
- 每一个域名都是一个标号序列,用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成。
- 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号。
- 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
- 级别最低的域名写在左边,级别最高的域名写在右边。
域名服务主要是基于UDP实现的,服务器的端口号为53。
域名服务器
域名服务器就是装有域名系统的主机。
分类 | 作用 |
---|---|
根域名服务器 | 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助 |
顶级域名服务器 | 负责管理在该顶级域名服务器下注册的二级域名 |
权限域名服务器 | 负责一个区的域名解析工作 |
本地域名服务器 | 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器 |
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区。
- 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器。
- 每一级域名服务器都知道下级域名服务器的IP地址。
- 为了提高可靠性, 每一级至少设置两个或以上的域名服务器。
域名解析过程
当一个用户在地址栏输入www.baidu.com时,DNS解析过程大致如下:
1.浏览器先检查自身缓存中有没有被解析过的这个域名所对应的ip地址,如果有(也就是命中),解析过程结束。
浏览器对缓存域名的大小和缓存时间也是有限制的,通常情况下为几分钟到几小时不等,域名缓存时间可以通过TTL属性设置,如果缓存时间过长,一旦域名所映射的ip地址有变化,会导致客户无法及时解析到变化后的ip地址,导致该域名不能正常解析;反之,如果缓存时间过短,会导致每次用户访问网站时都要重新解析一次域名,所以需要设置合理的缓存时间。
2.如果浏览器缓存中没有,浏览器会检查操作系统缓存(也就是hosts文件)中有没有对应的解析映射。
在Windows中可找到C:WindowsSystem32driversetchosts文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会使用这个域名所映射的ip地址。但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以现在的hosts文件都被设置为只读,防止这个文件被轻易修改。
3.如果至此还没有命中域名,本机才会真正的请求本地域名服务器(LDNS)来解析这个域名。
本地域名服务器一般由网络供应商所提供,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。本地域名服务器(LDNS)会检查缓存中有没有该域名所对应的ip地址,如果有会返回给本机,解析结束。
4.如果本地域名服务器(LDNS)仍然没有命中, 本地域名服务器(LDNS)会请求根域名服务器来解析。
5.根域名服务器返回给本地域名服务器(LDNS)一个该域名应该查询的顶尖域名服务器的地址。
6.此时本地域名服务器(LDNS)再根据上一步返回的顶尖域名服务器的地址,请求顶尖域名服务器来解析。
7.接受请求的顶尖域名服务器查找并返回这个域名对应的权限域名服务器的地址,这个权限域名服务器就是要请求的网站所注册的域名服务器。
8.然后本地域名服务器(LDNS)再根据上一步返回的权限域名服务器的地址,请求权限域名服务器来解析。权限域名服务器根据映射关系表找到该域名所对应的目标ip地址,返回给本地域名服务器(LDNS)。
9.本地域名服务器(LDNS)缓存该域名和对应的ip地址,然后根据缓存来解析该域名。
10.本地域名服务器(LDNS)把解析的结果返回给用户,用户根据TTL值缓存到本地浏览器缓存中,域名解析过程至此结束。