DNS解析过程
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:Windowssystem32driversetc
目录下,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
- winform 、WPF传值方式详解
- 你一定要知道!数据科学家提高工作效率的基本工具
- MySQL 大数据操作注意事项
- Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
- LINQ分页和排序,skip和Take 用法
- 这或许是对小白最友好的python入门了吧——21,导入模块
- opoa介绍
- 数据库记录安全解决方案
- 基于计算机视觉和OpenCV:创建一个能够计算道路交通流量的应用
- 这或许是对小白最友好的python入门了吧——20,定义函数简单应用
- 数据库结构版本控制
- Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
- 【干货】什么?Python3.X不能输出中文?原来是编辑器geany的锅?!
- Shell 历史记录异地留痕审计与监控
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- @RequestParam,@RequestBody,@PathVariable注解区别
- linux centos 查看cpu是否开启超线程虚拟化和配置信息
- DDD领域驱动设计实战(三)- 理解实体
- 如何理解 Go 中的反射
- Kubernetes 1.19.0——网络
- 如何用VSCode实现一个vue.js项目?
- 网页轮播图案例
- leetcode栈之用队列实现栈
- 3分钟短文:无私分享!Laravel模型使用2个小技巧
- 抖音小程序基础之 如何绑定点击事件(教程含源码)
- 抖音小程序基础之 如何使用内联样式 style和class(教程含源码)
- 抖音小程序基础之 如何使用选择器class id element (教程含源码)
- 3分钟短文:Laravel模型作用域,为你“节省”更多代码
- Pytorch 0.4.0版本保存的模型在高版本调用问题的解决方式
- Qt音视频开发27-Onvif设备搜索