IT技术博客大学习 共学习 共进步

DNS解析过程及DNS TTL值

小小子 2013-05-01 18:41:08 浏览 5,902 次

   经常说DNS劫持,也常常说域名解析不正确。那么DNS解析的过程究竟如何?在阅读《HTTP权威指南》缓存一章时,提到缓存文档过期采用“生存时间技术”与DNS类似。所以抽空学习了解了一下DNS的解析过程,以及DNS TTL值的概念!

DNS相关知识

  • 根域名服务器(root-servers.org)是互联网域名解析系统(DNS)中最高级别的域名服务器,全球仅有13台根服务器。

  • 部分根域名服务器在全球设有多个镜像服务器

  • 任何域名解析都要经过这13台根服务器获得顶级索引,并不是说您访问 .com 会经过这些服务器,访问 .cn 就不经过这些服务器

  • 每一个顶级域,不管是gTLD(通用顶级域),还是ccTLD(国别顶级域),它们都有自己的域名服务器(即该顶级域的NS记录)

  •    根域名服务器全球分布图——Google Maps

    域名解析的步骤

       在输入网址后,域名解析通常所需步骤如下:

  • 第一步:客户机提出域名解析请求,查找本地HOST文件后将该请求发送给本地的域名服务器。

  • 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。

  • 第三步:如果本地DNS缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址(例如请求域名为.com域,则返回负责.com域解析的主域名服务器——辅助服务器)。

  • 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。

  • 第五步:重复第四步,直到找到正确的纪录。

  • 第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

  •    文字可能很难理解,网民们是伟大的,看到这张图应该很形象的演示了上述过程:

       dns_resolving_2409

       本地DNS向其他DNS服务器发送的查询请求可能有:递归查询和迭代查询两种,示例如下:

       递归查询

       dns_resolving_2409

       迭代查询

       dns_resolving_2409

    DNS TTL值

       通过前文的说明,DNS会将最终域名解析的结果缓存至本地。那么当域名对应的解析IP变化时,如何保证用户的缓存快速过期?

       这就涉及到一个问题,域名在解析时设置的DNS缓存过期时间是多少——TTL(Time-To-Live)。

       TTL(Time-To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

       所以一般更新域名解析的步骤如下:

  • 先查看域名当前的TTL值。

  • 修改TTL值为可设定的最小值,建议为60秒。

  • 等待一天,保证各地的DNS服务器缓存都过期并更新了记录。

  • 设置修改DNS解析到新的记录,这个时候各地的DNS就能以最快的速度更新到新的记录。

  • 确认各地的DNS已经更新完成后,再TTL值设置成常用的值(如: TTL=86400)。

  •    不过为毛公司切换域名解析时速度飞快?这个明天得咨询一下孔总!

       看一下我这个xiaoxiaozi.com域名,在dnspod后台设置的ttl值示意图:

       dns_resolving_2409

    参考资料:

       维基百科——根域名服务器

       百度百科——域名解析词条

       百度知道——dns域名解析过程

       SOSO百科——根域名解析服务器

       DNS域名解析过程

       TTL值的含义以及与域名DNS TTL值的区别

建议继续学习

  1. 自建DNS以防止GFW干扰 (阅读 12,942)
  2. 强制刷新本地 DNS 缓存记录 (阅读 10,640)
  3. 2014年1月21日中国互联网DNS瘫痪事件原因分析 (阅读 8,221)
  4. 关于 SOCKS 代理的远端 DNS 解析 (阅读 7,743)
  5. DNS 隧道 (阅读 7,021)
  6. 什么是DNS劫持和DNS污染? (阅读 6,101)
  7. CentOS下通过Webmin管理BIND实现DNS轮询 (阅读 5,761)
  8. dig挖出DNS的秘密 (阅读 5,620)
  9. nslookup通往DNS的桥梁 (阅读 5,621)
  10. public DNS servers (阅读 5,240)