前言
发现我计算机网络学的太浅了,打算逐步针对某个地方进行更加深度的学习。第一步就是这个DNS系统,这篇文章不敢保证百分百正确,大部分基于我的认识,如果我发现我认知有问题,会及时修改,如有问题,欢迎联系。
DNS简介
DNS(Domain Name System)也就是域名系统,我们知道网络层是使用 IP 进行作为地址进行通信的,但是 IP 是201.133.12.33这样的,我们人很难记住这么抽象的东西, 这时候就需要用到 DNS 了,DNS说白了就是将我们常见的网址www.baodu.com转化为通信时候的 IP 地址,就像电话簿的作用。
DNS流程
- 当用户输入一个地址
www.baidu.com以后,会先查找浏览器的 DNS 缓存,如果存在和这个浏览器的映射,就直接使用这个 IP 地址映射,否则还会查询本机 DNS 缓存(host文件),如果存在 IP 地址映射,那么就会使用该 IP 地址。 - 如果在本机的 DNS 缓存中查询不到,会向本地 DNS 服务器(LDNS)发起一个查询请求,如果存在 IP 映射,那么就会使用该 IP 地址。
- 如果所有缓存都失效,那么会根据本地DNS服务器的设置进行查询,分为迭代查询和递归查询
- 迭代查询:本地 DNS 服务器会向根 DNS( . )发起请求,根服务器收到请求后会查询
.com是谁来授权管理的,并会返回负责该顶级域名服务器的 IP,本地 DNS 服务器收到 IP 后会向其中一个 IP(可能会收到多个)发起请求,这台负责.com的顶级域名服务器接收到请求后,如果自己无法解析,那么他会查询baidu.com是谁授权管理的,然后返回负责该主域名服务器的 IP,重复这个操作,直到找到www.baidu.com - 递归查询:本地 DNS 服务器会向根 DNS( . )发起请求,根服务器收到请求后,如果自己解析不了,则会向下一级 DNS 服务器发起请求,直到返回结果,而不是让主机自己去查询。
- 迭代查询:本地 DNS 服务器会向根 DNS( . )发起请求,根服务器收到请求后会查询
DNS迭代查询和递归查询
两者的流程图如下

一般来说从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
DNS解析顺序
- 浏览器缓存:当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
- 系统缓存:当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
- 路由器缓存:当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
- ISP(互联网服务提供商)DNS缓存:当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找
- 根域名服务器:当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
- 顶级域名服务器:顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器
- 主域名服务器:主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录
- 保存结果至缓存:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接