面试官:DNS 协议是什么?说说 DNS 完整的查询过程?

网络 通信技术
DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器

[[400343]]

本文转载自微信公众号「JS每日一题」,作者灰灰。转载本文请联系JS每日一题公众号。

一、是什么

DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器

简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址

  • IP 地址:一长串能够唯一地标记网络上的计算机的数字
  • 域名:是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识

二、域名

域名是一个具有层次的结构,从上到下一次为根域名、顶级域名、二级域名、三级域名...

例如www.xxx.com,www为三级域名、xxx为二级域名、com为顶级域名,系统为用户做了兼容,域名末尾的根域名.一般不需要输入

在域名的每一层都会有一个域名服务器,如下图:

除此之外,还有电脑默认的本地域名服务器

三、查询方式

DNS 查询的方式有两种:

  • 递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案

迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求

四、域名缓存

在域名服务器解析的时候,使用缓存保存域名和IP地址的映射

计算机中DNS的记录也分成了两种缓存方式:

  • 浏览器缓存:浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗
  • 操作系统缓存:操作系统的缓存其实是用户自己配置的 hosts 文件

五、查询过程

解析域名的过程如下:

  • 首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
  • 若没有命中,则继续搜索操作系统的 DNS 缓存
  • 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
  • 若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
    • 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
    • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
    • 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
  • 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
  • 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起
  • 至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起

流程如下图所示:

参考文献

https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

https://www.cnblogs.com/jmilkfan-fanguiju/p/12789677.html

https://segmentfault.com/a/1190000039039275

https://vue3js.cn/interview

 

责任编辑:武晓燕 来源: JS每日一题
相关推荐

2021-01-07 07:33:06

Tomcat启动工具

2021-08-03 08:41:18

SQLMysql面试

2023-12-27 18:16:39

MVCC隔离级别幻读

2024-11-19 15:13:02

2024-05-30 08:04:20

Netty核心组件架构

2024-03-05 10:33:39

AOPSpring编程

2024-08-22 10:39:50

@Async注解代理

2021-04-19 18:56:58

大数字符串运算

2021-05-06 14:34:12

Webpack热更新程序

2021-08-09 07:47:40

Git面试版本

2024-03-22 06:56:24

零拷贝技术数据传输数据拷贝

2024-03-11 18:18:58

项目Spring线程池

2020-07-02 07:52:11

RedisHash映射

2024-09-20 08:36:43

零拷贝数据传输DMA

2024-07-31 08:28:37

DMAIOMMap

2024-02-20 08:13:35

类加载引用Class

2024-03-14 14:56:22

反射Java数据库连接

2024-12-06 07:00:00

2021-11-25 10:18:42

RESTfulJava互联网

2021-08-24 08:05:41

泛型类型擦除Class
点赞
收藏

51CTO技术栈公众号