DNS原理

阮一峰写的很详细,我这篇文章是对他学习笔记学习的笔记。

DNS(Domain Name System),他的作用是根据网站域名查出IP地址。IP地址是建立通信所必须的,所以DNS非常重要。它就像一本巨大的电话本,记载了所有网站的IP地址。

DNS服务器如何查询

DNS的IP地址

在DNS查询之前,我们的电脑得知道DNS服务器的IP地址吧,DNS服务器的IP地址,有可能是动态的,每次上网时由网关分配,这叫做DHCP机制。大部分设备默认都是这样的。以下是我的DNS地址:

这是一个电信运营商的DNS地址,当然你也可以自己改,有很多公网DNS可以使用,其中最有名的就是Google的8.8.8.8和Level 3的4.2.2.2,这些DNS服务器称为本地DNS服务器。

域名分级

这么多的域名,DNS是怎么准确地查到每个域名的IP地址的呢?想知道这个,那么我们先来把域名分一下层

我们以math.stackexchange.com为例来分析一下域名的层级结构

主机名. 次级域名. 顶级域名. 根域名
host. sld. tld. root
math. stackexchange. com. root

所有域名的最后其实都有一个.root,省略了而已。所以一般的域名分为四层,最后面是根域名,往前推是顶级域名,次级域名,最后是主机名。

DNS服务器就是根据域名的分层从后往前一级级地查询IP地址的。这叫做递归查询

DNS查询IP地址

  1. 知道了本地DNS服务器的IP地址后,浏览器将待解析的域名放在DNS报文中,以UDP数据报的方式发给本地DNS服务器(使用UDP是为了减少开销)。本地DNS服务器在查找域名后,将对应的IP地址放在回答的报文中返回。浏览器获得目的主机的IP地址后即可进行通信。如果本地DNS服务器不能回答该请求,就会向其他DNS服务器发请求,进行递归查询。

  2. 本地DNS服务器先查“根域名服务器”的IP地址,全球只有13台根域名服务器,从A.ROOT-SERVERS.NET一直到M.ROOT-SERVERS.NET。一般其IP地址存储在本地DNS服务器中。本地DNS服务器向“根域名服务器”发请求,询问“tld服务器”的NS记录。

  3. “根域名服务器”返回“tld服务器”的NS记录和IP地址(返回最快的根域名服务器被缓存,下一次只查向它查就可以了)。DNS服务器向“tld服务器”发请求,向其询问“sld服务器”的IP地址。

  4. “tld服务器”返回“sld服务器”的NS记录和IP地址(已经很少了)。向其查询主机名。

  5. 返回若干条A记录,每个IP地址都可以访问网站,同时还返回返回结果最快的服务器是哪台。

  6. 查询完毕,愉快上网。

DNS的记录类型

  • A: 地址记录,返回域名指向的IP地址。
  • NS: 域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
  • MX: 邮件记录
  • CNAME: 规范名称记录(canonical Name)
  • PTR: 逆向查询记录
Comments
Write a Comment