DNS

前言

DNS(Domain Name System) 等级性的分布式域名系统,用于转换域名空间到IP地址空间,核心是分布式数据库,协议默认使用53端口的UDP协议传输。

DNS在云服务及CDN中处于核心地位。

DNS反映了互联网中的行政责任结构,由多个子域组成树。

介绍

DNS的好处:
  1. 对用户友好,用户无需记录IP地址,同一域名,不同用户可能同时接收到不同的IP地址,CDN加速。
  2. 更换IP等只需更新DNS记录而不影响用户,动态域名解析DDNS
DNS结构

是根据client-server结构搭建的一种树状分布式数据库系统。每个节点都是一个name server, 每个域名都至少有一个权威DNS服务器发布与其有关的信息。


Namespace.png

查询通过right-most domain label, recursive and caching name server, DNS resolver, record caching, circular dependencies and glue records 和reverse / client lookup组成

DNS报文

查询和回复都是同样格式,包含header, question, answer, authority, additional space.

Resource records:

RP.png

Name保存域名,TYPE记录类型,如Start of Authority (SOA), IP addresses (A and AAAA), SMTP mail exchangers (MX), name servers (NS), pointers for reverse DNS lookups (PTR), and domain name aliases (CNAME)等。

A记录:地址记录,用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP地址,就需要添加A记录。
CNAME: 如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。
TXT:在这里可以填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF记录(反垃圾邮件)。
NS:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
AAAA:用来指定主机名(或域名)对应的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)记录。
MX:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
URL:从一个地址301重定向到另一个地址的时候,就需要添加URL记录(注:DNSPod目前只支持显性301重定向)。
SRV:记录了哪台计算机提供了哪个服务。格式为:服务的名字、点、协议的类型,例如:_xmpp-server._tcp。

全部类型可及含义参考维基

DNS访问过程
  1. 浏览器将会检查缓存中有没有这个域名对应的解析过的IP地址,如果有该解析过程将会结束。浏览器缓存域名也是有限制的,包括缓存的时间、大小,可以通过TTL属性来设置。
  2. 如果用户的浏览器中缓存中没有,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  3. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  4. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  5. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  6. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找域名域服务器,重复上面的动作,进行查询,直至找到域名对应的主机。
  7. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS缓存
  1. 浏览器DNS缓存TTL与返回DNS的TTL不同,Chrome可通过chrome://net-internals/#dns查看浏览器缓存,TTL为1分钟
  2. 系统DNS缓存会参考DNS服务器响应的TTL,但不完成等于TTL。
  3. ISP有时会设置较长TTL,导致更新不及时。
  4. Android 10分钟,IOS 24小时刷新。

在从Root DNS请求域名解析的过程中,有太多的层次影响DNS的获取,缓存是双刃剑,提高了获取DNS的速度,也会影响DNS在IP变更时不能及时更新到最新。导致IP切换或内外网访问切换将可能导致访问失败

常用命令
  1. 清除DNS缓存记录可以使用ipconfig /flushdns
  2. 查询DNS记录可以用
    ipconfig /displaydns
  3. 查询某个DNS对应的IP可用
    nslookup www.163.com
    nslookup.png

    加入-d,可获取TTL时间
    Answer.png
A记录与CNAME详解

A记录是将域名指向一个IP地址,而CNAME则是将一个域名指向另一个域名,同时继承另一个域名的完整resolution chain.

#A record
blog.dnsimple.com.     A        185.31.17.133

#CNAME record
blog.dnsimple.com.      CNAME   aetrion.github.io.
aetrion.github.io.      CNAME   github.map.fastly.net.
github.map.fastly.net.  A       185.31.17.133
  1. 使用CNAME时,被指向的域名不能有其他的record,如用于email的MX record.
  2. IP地址固定的情况下适合使用A记录。
  3. 此外可通过URL record, HTTP 301实现重定向。
  4. CNAME永远不要用于根域名。

你可能感兴趣的:(DNS)