Net网络

DNS解析

2020-06-26  本文已影响0人  Jeff_9021

关键词:DNS

DNS解析

什么是DNS解析?当用户输入一个网址并按下回车键的时候,浏览器得到了一个域名。而在实际通信过程中,我们需要的是一个IP地址。因此我们需要先把域名转换成相应的IP地址,这个过程称作DNS解析。

1) 浏览器首先搜索浏览器自身缓存的DNS记录。

或许很多人不知道,浏览器自身也带有一层DNS缓存。Chrome 缓存1000条DNS解析结果,缓存时间大概在一分钟左右。(Chrome浏览器通过输入:chrome://net-internals/#dns 打开DNS缓存页面)

2) 如果浏览器缓存中没有找到需要的记录或记录已经过期,则搜索hosts文件和操作系统缓存。

在Windows操作系统中,可以通过 ipconfig /displaydns 命令查看本机当前的缓存。通过hosts文件,你可以手动指定一个域名和其对应的IP解析结果,并且该结果一旦被使用,同样会被缓存到操作系统缓存中。

Windows系统的hosts文件在%systemroot%\system32\drivers\etc下,linux系统的hosts文件在/etc/hosts下。

3) 如果在hosts文件和操作系统缓存中没有找到需要的记录或记录已经过期,则向域名解析服务器发送解析请求。

其实第一台被访问的域名解析服务器就是我们平时在设置中填写的DNS服务器一项,当操作系统缓存中也没有命中的时候,系统会向DNS服务器正式发出解析请求。这里是真正意义上开始解析一个未知的域名。

一般一台域名解析服务器会被地理位置临近的大量用户使用(特别是ISP的DNS),一般常见的网站域名解析都能在这里命中。

4) 如果域名解析服务器也没有该域名的记录,则开始递归+迭代解析。

这里我们举个例子,如果我们要解析的是mail.google.com。

首先我们的域名解析服务器会向根域服务器(全球只有13台)发出请求。显然,仅凭13台服务器不可能把全球所有IP都记录下来。所以根域服务器记录的是com域服务器的IP、cn域服务器的IP、org域服务器的IP……。如果我们要查找.com结尾的域名,那么我们可以到com域服务器去进一步解析。所以其实这部分的域名解析过程是一个树形的搜索过程。

根域服务器告诉我们com域服务器的IP。

接着我们的域名解析服务器会向com域服务器发出请求。根域服务器并没有mail.google.com的IP,但是却有google.com域服务器的IP。

接着我们的域名解析服务器会向google.com域服务器发出请求。...

如此重复,直到获得mail.google.com的IP地址。

为什么是递归:问题由一开始的本机要解析mail.google.com变成域名解析服务器要解析mail.google.com,这是递归。

为什么是迭代:问题由向根域服务器发出请求变成向com域服务器发出请求再变成向google.com域发出请求,这是迭代。

5) 获取域名对应的IP后,一步步向上返回,直到返回给浏览器。


域名解析->域名 ->缓存->根域dns->顶级域dns->本域dns->服务器IP 

1.搜索浏览器自身DNS缓存,如果不存在或者过期(>60s)放弃

2.搜索操作系统自身的dns缓存

3.读取本地的HOST文件

4.浏览器发起一个DNS的系统调用 域名解析

5.客户端通过随机端口使用tcp协议服务器ip的80端口发起连接请求 三次握手

6.tcp/ip连接请求建立后浏览器可以向服务器发起http请求

7.http客户端发起请求,创建端口,解析用户操作,拼接请求头信息

8.http客户端并向服务器的该端口发送request头信息

9.服务器监听端口 如80

10.http监听到发到80端口的请求头信息

11.http服务器解析头信息

12.http服务器 按照请求头信息,返回相应响应头信息response

13.响应头信息发送给http客户端,客户端解析响应头信息,并完成其他操作

14.完成一次http请求

上一篇下一篇

猜你喜欢

热点阅读