网络协议之DNS

327 阅读3分钟
  • 大多数dns查询基于udp,少部分基于tcp,因为dns查询比较注重查询的速度,是否成功,数据量都没有要求

域名服务器可以划分为以下四种不同的类型

  • 根域名服务器:每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同IP地址的根域名服务器。
  • 顶级域名服务器
  • 权限域名服务器
  • 本地域名服务器

顶级域名分为一下三类

  • 国家顶级域名 nTLD:cn、us、uk
  • 通用顶级域名 gTLD:com、net、org、int、edu、gov、mil
  • 反向域名 arpa:用于返乡域名解析,即IP地址反向解析为域名

域名解析的过程

  • 递归查询
  • 迭代查询

image.png

高速缓存

  • 由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项目(例如:每个项目只存放两天)

  • 不但在本地服务器中更需要高速缓存,在用户主机中也很需要,许多用户主机在启动时从本地域名服务器下载域名和ip地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性

DNS解析的具体过程

image.png

当一个用户在地址栏中输入 www.baidu.com 时,DNS解析有大致十个过程

  1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同名域名被缓存的时间也可通过TTL属性来设置。
  2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。
  3. 如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成啦
  4. 如果LDNS仍然没有命中,就直接跳到Root Server域名服务器请求解析
  5. 根域名服务器返回给LDNS一个所查询域的主域名服务器地址
  6. 此时LDNS在发送请求给上一步返回的gTLD
  7. 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
  8. Name Server根据映射关系表找到目标ip,返回给LDNS
  9. LDNS缓存这个域名和对应的ip
  10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束