Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DNS解析 #25

Open
Genluo opened this issue Aug 31, 2019 · 0 comments
Open

DNS解析 #25

Genluo opened this issue Aug 31, 2019 · 0 comments

Comments

@Genluo
Copy link
Owner

Genluo commented Aug 31, 2019

什么是DNS

DNS全程是Domain Name System ,是用来将域名转化为Ip地址的一套系统,当一个主机需要将域名转化为IP,该应用进程将调用一个解析进程,这个解析进程将会成为第一个DNS用户,把待解析的域名放在DNS请求报文中,并且以UDP用户数据方式发送给本地域名解析服务器(使用UDP是为了减少性能损耗),本地域名服务器在查找域名之后,把对应的IP地址放在回答报文中返回,应用进程获得目的主机的IP之后即可进行通信,如果本地域名服务器不能提供相应的域名解析,则此域名服务器将会成为DNS另一个客户,并向其他域名服务器发出查询请求,这种过程将会一直持续直到找到能够回答该请求的域名服务器为止。

DNS查询类型

  • DNS查询有两种查询形式,一种是左边采用迭代方式进行查询,另一种四使用递归的方式进行查询,

  • 所有的域名后面都带着顶级域名,但是一般都省略掉了,域名形式为.

  • 实际通常采用的方式是:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询

DNS查询的具体过程

  • 浏览器缓存

  当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在,并且chrome缓存的时间只有一分钟,查看chrome的缓存可打开:chrome://net-internals/#dns )

  • 系统缓存

  当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;

  • 路由器缓存

  当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;(操作系统的缓存:window系统是一天,mac系统严格根据DNS协议中的TTL)

  • ISP(互联网服务提供商)DNS缓存

  当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;(这个是根据自己电脑设置的本地DNS服务器地址进行请求)

  • 根域名服务器

  当以上均未完成,则进入根服务器进行查询,那么这就说明ISP一定存在所有根域名服务器的IP。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

  • 顶级域名服务器

  顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;

  • 主域名服务器

  主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;

  • 保存结果至缓存

  本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant