1.DNS是什么

  DNS是英文“Domain Name System”的缩写,直译过来就是“域名系统”。其作用简单来说就是将域名翻译为IP地址。这个翻译的过程术语叫“域名解析/DNS解析”。

2.域名解析/DNS解析

  举个简单的例子,比如我们要上百度,打开浏览器,在地址栏输入www.baidu.com回车就可以跳到百度的页面。这里的www.baidu.com就是域名。浏览器会向本地DNS服务器发出查询请求,本地DNS服务器会把网址对应的IP返回给浏览器。(注意:更确切来说,不是本地DNS服务器,而是Windows网络连接里面所配置的DNS服务器)我们可以通过nslookup命令或者ping命令查询一下百度域名对应的IP是多少。打开cmd,输入nslookup www.baidu.com,返回结果如下:

可以看到Addresses栏显示有两个IP,分别为:119.75.217.109和119.75.218.70。我么在浏览器地址栏分别输入这两个IP地址,都可以跳转到百度首页。


使用ping命令也可以得到同样的IP地址。

  我们还可以查询一下,我们所用的DNS服务器IP地址是多少,在cmd中输入nslookup -qt=ns,返回以下结果:

可以看到我们使用的默认的DNS服务器是dns.hust.edu.cn,IP 地址是202.114.0.131。

3.域名解析的实现

如果曾经配置过电脑的网卡,应该记得上面除了有IP地址、子网掩码、默认网关等设置,还有一项设置是“DNS服务器/域名服务器”。这项设置就是用来帮助你的电脑进行域名解析的。你可以把这个“DNS服务器”想象成114查号台。每当电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的IP地址是啥。

  下面简单说一下,电脑进行域名解析的过程。
  当你在浏览器的地址栏中输入 http://www.hust.edu.cn/,然后敲回车,这时候浏览器会进行如下一系列事情。
1. 首先根据输入的网址,提取出域名(在本例中,也就是 www.hust.edu.cn)
2. 如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件,看这个www.hust.edu.cn是否已经在 Hosts 里面有了对应的记录。如果有,直接就可以拿到该记录中的 IP地址,过程就结束了。
我们来看一下Hosts文件内容,在window下hosts文件目录为:
C:\Windows\System32\drivers\etc
我们打开这个文件来看一下

可以看到这个文件目前实际上是空的(以#号开头的行都是注释)。我们在文件中添加一行。

  1. 如果 Hosts 里面没有这个别名,那么电脑会看你有没有设置域名服务器(DNS 服务器)。如果你的系统没有设置域名服务器,那电脑就没辙了,浏览器直接会报错,说网站的域名无法解析。过程就结束了。
  2. 如果你设置过“域名服务器”,那么电脑会向这个域名服务器发送一个域名查询(DNS query)的请求,然后等候域名服务器的回应。
  3. 如果域名服务器始终没有回应(比如域名服务器挂了,或域名服务器的IP填错了,或请求被 GFW 拦截了),那么电脑还是没辙(浏览器会报错)。
  4. 如果域名服务器回应了,那么你的电脑就可以根据域名服务器的应答信息,得到该域名的 IP地址。之后浏览器就会向这个 IP地址 对应的 Web 端口发送 HTTP 请求。

      通常情况下,电脑拿到的(DNS服务器)应答信息是正确的——也就是说,应答中的 IP地址 确实对应那个域名——这种情况下,你的网络软件就可以正常工作了。

参考资料:
1. http://program-think.blogspot.com/