DNS解析

DNS概述

域名系统:互联网上主机/路由器的识别问题:

  1. IP地址
  2. 域名: www.baidu.com
  3. 多层命名服务器构成的分布式数据库

DNS服务:

  1. 域名向IP地址的翻译
  2. 主机别名
  3. 邮件服务器别名
  4. 负载均衡:Web服务器

    DNS域名解析过程

当一个用户在浏览器中输入www.baidu.com时,DNS解析主要有以下几个步骤:

  1. 浏览器检查缓存中有没有这个域名对应的解析过的IP,如果缓存命中,解析结束;未命中,进入下个阶段。(浏览器的缓存大小和缓存时间都是有限制的)

  2. 查找操作系统缓存中是否有这个域名对应的DNS解析结果。缓存命中,解析结束。未命中,进入下个阶段(在Windows中可以通过C:Windows\System32\drivers\etc\hosts查看);

  3. 如果本地缓存无法完成,那么就会把这个域名发送到LDNS(本地域名服务器),如果在学校接入互联网,那么LNDS就在学校;如果在小区接入互联网,那么这个LDNS就是接入互联网的应用提供商,即电信或联通。

    这个域名服务器的性能很好,缓存时间受域名的失效时间限制,不受缓存空间的限制。大约80%的域名解析都到这里就完成了。故LDNS承担了主要的域名解析工作;

  4. 如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析;

  5. 根域名服务器返回给本地域名服务器一个所查询的顶级域名服务器。顶级域名服务器包括.com, .cn, .org等。全球有十三台根域名服务器。

  6. 本地域名服务器再向上一步返回的顶级域名服务器发送请求;

  7. 接受请求的顶级域名服务器查找并返回此域名对应的权威域名服务器的地址。

  8. 权威域名服务服务器会查询存储的域名和IP的映射关系表,在正常情况下根据域名得到IP地址,连同一个TTL值返回给LDNS域名服务器。

  9. LDNS缓存这个域名和IP,缓存的时间由TTL控制。

  10. 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析结束。

Note:

本地域名服务器也能够缓存顶级域名服务器的地址,因而允许本地DNS绕过查询链中的根域名服务器。

主机向LDNS查询是递归查询,LDNS向根域名服务器查询是迭代查询。

互联网的域名结构:

image-20190912214442698

DNS缓存:

只要域名解析服务器获得域名-IP映射,即缓存这一映射。一段时间过后,缓存条目失效。本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常别访问。有效时间(两天)

DNS可以使用UDP或者TCP进行传输,使用的端口号都为53.大多数情况下DNS使用UDP进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用TCP进行传输:

  • 返回的响应超过512字节(UDP)最大支持512字节;
  • 区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)

DNS记录和消息格式

实现DNS分布式服务器的所有DNS服务器共同存储了资源记录,RR提供了主机名到IP地址的映射。

资源记录(RR)包含了四个字段:name,value,type,ttl

TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。Name和Value的值取决于Type:

  • 如果Type=A,则Name是主机域名,Value是该主机域名对应的IP地址。例如(relay.bar.foo.com, 145.37.93.126, A)就是一条类型A的记录。
  • 如果Type=NS,则Name是个域(如foo.com),而Value是知道如何获得该域中主机地址的权威DNS服务器的主机域名。简单来说就是由哪个DNS服务器对该域名进行解析,如(foo.com, dns.foo.com, NS)是一条类型NS的记录。
  • 如果Type=CNAME,Name是某一真实域名的别名,Value是真实域名。简称别名解析,例如(foo.com, relay.bar.foo.com, CNAME)就是一条CNAME类型的记录。
  • 如果Type=MX,Value是与name相对应的邮件服务器的域名。(foo.com, mail.bar.foo.com, MX)就是一条MX记录。

概要如下表所示:

类型 功能
A 将域名指向一个 IPv4 地址
NS 将子域名指向其它 DNS 服务器解析
CNAME 将域名指向另一个域名
MX 将域名指向邮件服务器地址