-
Notifications
You must be signed in to change notification settings - Fork 253
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1a33776
commit 44b7d2a
Showing
3 changed files
with
67 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# DNS解析过程 | ||
域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过`IP`地址来实现,域名解析就是将域名重新转换为`IP`地址的过程。一个域名对应一个`IP`地址,一个`IP`地址可以对应多个域名,所以多个域名可以同时被解析到一个`IP`地址,域名解析需要由专门的域名解析服务器`DNS`服务器来完成。 | ||
|
||
## 解析方式 | ||
`DNS`解析查询的方式有两种:递归解析查询和迭代解析查询,通常来说,客户端和本地域名服务器是递归查询,而本地域名服务器和其他域名服务器之间是迭代查询。 | ||
|
||
### 递归解析 | ||
假如我们本地客户端是`A`,有三个域名解析服务器`B`、`C`、`D`,首先在本地客户端`A`发起一次`DNS`解析请求,对`B`服务器请求解析`DNS`,`B`服务器查询后并无解析记录,则`B`服务器对`C`服务器请求解析`DNS`,,`C`服务器查询后并无解析记录,则`C`服务器对`D`服务器请求解析`DNS`,,`D`服务器查询到解析记录,将解析记录返回到`C`服务器,`C`服务器将解析记录返回到`B`服务器,`B`服务器将解析记录返回到`A`服务器,完成一次递归解析查询。 | ||
|
||
``` | ||
A → B → C → D | ||
A ← B ← C ← D | ||
``` | ||
|
||
|
||
### 迭代解析 | ||
假如我们本地客户端是`A`,有三个域名解析服务器`B`、`C`、`D`,首先在本地客户端`A`发起一次`DNS`解析请求,对`B`服务器请求解析`DNS`,`B`服务器查询后并无解析记录,返回到`A`未查询成功并携带`C`服务器的地址,客户端`A`对`C`服务器请求解析`DNS`,`C`服务器查询后并无解析记录,返回到`A`未查询成功并携带`D`服务器的地址,客户端`A`对`D`服务器请求解析`DNS`,查询到解析记录,并将解析记录返回到`A`,完成一次迭代解析查询。 | ||
|
||
``` | ||
A → B | ||
A → C | ||
A → D | ||
``` | ||
|
||
## 解析过程 | ||
|
||
### 浏览器缓存 | ||
在输入`URL`后浏览器首先检查自身的`DNS`缓存是否对于此域名有`IP`地址,通常浏览器对于自身`DNS`解析缓存保留时间比较短,且数量也有限制,`chrome`对于域名解析的缓存时间为`60s`,可以通过地址栏输`入chrome://net-internals/#dns`清除`DNS`缓存。 | ||
|
||
### HOSTS | ||
`HOSTS`文件是一个系统文件,其作用就是将域名与其对应的`IP`地址建立一个对应关系,当进行`DNS`解析时系统会首先自动从`HOSTS`文件中寻找对应的`IP`地址,如果没有找到,则系统会再将域名提交`DNS`域名解析服务器进行`IP`地址的解析。`Windows`操作系统的此文件通常在`C:\Windows\system32\drivers\etc\`目录下,`Linux`操作系统的此文件通常在`/etc/`目录下。 | ||
|
||
### 本地域名解析服务器 | ||
客户端向本地域名服务器请求解析,本地域名服务器一般是运营商`ISP`提供的,一般是通过`53`端口发送`UDP`报文请求服务器解析`DNS`,从客户端到本地域名服务器的解析是递归查询的。假如请求的解析域名为`example.expamle.com`,本地域名解析服务器未命中,则本地域名解析服务器开始迭代查询。 | ||
|
||
### 根域名解析服务器 | ||
本地域名解析服务器向根域名服务器`a.rootserver.net`进行请求,根域名服务器查询到`.com`顶级域名所对应的服务器,然后向本地域名服务器返回`.com`顶级域名所对应的服务器解析地址。 | ||
|
||
### 顶级域名解析服务器 | ||
本地域名解析服务器向顶级域名解析服务器进行请求,顶级域名解析服务器查询到`example.com`二级域名所对应的服务器,然后向本地域名服务器返回`example.com`二级域名所对应的服务器解析地址。 | ||
|
||
### 二级域名解析服务器 | ||
本地域名解析服务器向二级域名解析服务器进行请求,二级域名解析服务器如果未命中,则会向本地域名解析服务器返回`example.example.com`所对应的权限域名解析服务器的地址,通常来说二级域名解析服务器及以后都可以称为权限域名解析服务器。 | ||
|
||
### 权限域名解析服务器 | ||
本地域名解析服务器向权限域名解析服务器进行请求,权限域名解析服务器查询到解析记录后,便返回本地域名解析服务器,本地域名解析服务器将查询到的`IP`地址返回到客户端,并将域名与`IP`的对应关系进行缓存,假如在权限域名解析服务器还未查询到域名对应的`IP`地址,则返回解析失败,此外如果客户端还配置了多个`DNS`服务器的地址,则在查询失败后还会继续向其他所配置的`DNS`解析服务器进行查询。 | ||
|
||
|
||
## 每日一题 | ||
|
||
``` | ||
https://github.com/WindrunnerMax/EveryDay | ||
``` | ||
|
||
## 参考 | ||
|
||
``` | ||
https://www.jianshu.com/p/6b502d0f2ede | ||
https://www.zhihu.com/question/53882349 | ||
https://blog.csdn.net/qq_40378034/article/details/100998367 | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters