DNS原理及解析过程

什么是DNS?

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。

DNS的获取流程:

DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。具体过程如下:

  1. 用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了

  2. 浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如 www.lab.glasscom.com , 并将这个主机名传送给DNS应用的客户端

  3. DNS客户机端向DNS服务器端发送查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作),具体查询流程如图(图片来自《网络是怎样连接的》):

  4. 该DNS客户机会收到一份回答报文,其中包含有该主机名对应的IP地址

  5. 一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接,即可进行网站访问

DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。

另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。

总之,如果要访问的 Web 服务器已经在 DNS 服务器上注册,那么这条记录就能够被找到,然后其 IP 地址会被写入响应消息并返回给客户端。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器,然后解析器读取出消息取出 IP 地址,并将 IP 地址传递给应用程序。

顺带一提

向 DNS 服务器发送消息时,我们当然也需要知道 DNS 服务器的 IP 地址。只不过这个 IP 地址是作为 TCP/IP 的一个设置项目事先设置好的,不需要再去查询了。

参考文献