一文彻底了解DNS协议工作原理,恐怕没有比这更通俗易懂的了吧?

news2024/9/25 11:16:42

了解DNS工作原理有助于深入理解互联网通信的基础机制,对于网络运维、开发以及优化网站访问速度至关重要。它能帮助解决域名解析问题,提升用户体验,同时对于网络安全和防护也具有重要意义。本文博主反反复复、前前后后斟酌了三天,就为了让大家更容易看懂。

1. DNS产生背景

TCP/IP协议要求互联网中的计算机具有唯一的IP地址,并基于IP地址进行通信。然而,直接使用IP地址有很多不便。

  • 记忆困难:IP地址由数字组成,对于人类来说记忆起来较为困难。例如,百度的IP地址"36.155.132.3",腾讯QQ网站的IP地址"183.194.238.19"。
  • 动态性问题:随着互联网的发展,许多设备(如移动设备)需要频繁地更换IP地址,这给网络管理带来了不便。

为了克服上述问题,1983年,美国国家科学基金会(NSF)引入了域名系统(DNS)作为IP地址的替代方案。

2. 因特网的域名结构

因特网采用了层次树状结构的命名方法。任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。域名中的『域』是名字空间中一个可被管理的划分,域可以划分为子域(进一步划分为子域的子域),这就形成了顶级域、二级域、三级域等。

域名的结构由标号序列组成,各标号之间用点隔开,格式如下:

… .三级域名.二级域名.顶级域名

举例

域名空间划分

3. DNS定义介绍

DNS系统(域名系统)使用易于记忆的字符来表示网络和主机,通过一系列的服务器进行解析,将这些字符转换为对应的IP地址。DNS的引入极大地提高了互联网的可访问性和可管理性,使得互联网能够以更高效、更便捷的方式服务于全球用户。

4. DNS分类介绍

域名服务器的层次结构

DNS(域名系统)服务器根据其在域名解析过程中的作用和位置,可以分为以下四种类型:

  • 根域名服务器
  • 顶级域名服务器(简称TLD服务器)
  • 权限域名服务器
  • 本地域名服务器

本地域名服务器并不属于上图中的层次结构,但它对域名系统同样重要。因为当一个主机发出域名查询请求时,这个查询请求首先会发送给本地域名服务器。

4.1. 根域名服务器(Root Name Server)

负责解析顶级域名(如.com、.org、.net等)的请求。全球共有13个根域名服务器(A~M,其中 A 根是主根,由美国公司 Verisign 管理。B 到 M 根称为辅根,负责同步 A 根的内容。),分别由不同的组织运营。因为历史原因,13个根域名服务器没有一个落在中国。具体的分布信息如下表:

全球13个根域名服务器
不过我国有几十个根镜像域名服务器,均从根服务器同步过来,由我国自行管理。

图片来源:https://root-servers.org/
随着网络攻击方式的多样化,针对根域名服务器的安全威胁也日益增加。DDoS攻击、缓存投毒、数据篡改等均可能对DNS系统的正常运转造成影响。因此,根域名服务器的运营机构采取了多种措施来增强其安全性。

由于根域名服务器在DNS中的地位特殊,因此对根域名服务器会有许多具体要求,具体可以参阅 RFC 2870。

4.2. 顶级域名服务器(Top-Level Domain Name Server)

顶级域名服务器常简称为TLD服务器,它负责解析特定顶级域名的请求,如.com、.cn、.org等。

每个顶级域名都有一组顶级域名服务器,用于管理在该顶级域名服务器注册的所有二级域名。常用的顶级域名主要有以下两大类:

  • 通用顶级域名(gTLD):gTLD用于表示组织的职能或用途,例如:
    • .com:商业公司
    • .org:非营利性组织
    • .net:网络服务机构
    • .edu:教育机构
    • .gov:政府部门
    • .mil:军事部门
  • 国家顶级域名(ccTLD):ccTLD用于表示特定国家或地区,cc是country code的简写,例如:
    • .cn:中国
    • .us:美国
    • .uk:英国

4.3. 权威域名服务器(Authoritative Name Server)

负责存储和提供某个域名(如baidu.com)的完整信息,即该域名的资源记录(如A记录、MX记录等)。当DNS客户端请求解析某个域名时,会首先查询该域名的权威域名服务器。

4.4. 本地域名服务器(Local Name Server)

在本地网络中运行的DNS服务器,用于解析本地网络内的域名请求。本地域名服务器是电脑解析时的默认域名服务器,即电脑中设置的首选 DNS 服务器和备选 DNS 服务器。常见的有电信、联通、谷歌、阿里等的本地 DNS 服务。

本地DNS服务器

5. 域名解析流程

在不考虑本地DNS缓存(浏览器缓存、操作系统缓存)的情况下,完整的一次域名解析会经过下图中8个步骤。

域名解析流图图解举例:www.baidu.com

解析说明

  1. 客户端主机将域名发送至本地域名服务器,本地域名服务器查询自己的 DNS 缓存,查找成功则返回结果。

  2. 若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向根域名服务器进行查询。

  3. 根域名服务器是最高层次的,它并不会直接指明这个域名对应的 IP 地址,而是返回顶级域名服务器的地址。

  4. 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求;

  5. 本地域名服务器获取到顶级域名服务器获返回的限威域名服务器的地址;

  6. 本地域名服务器向权威域名服务器发起请求;

  7. 本地域名服务器最终得到该域名对应的 IP 地址

  8. 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来。

以上域名解析过程有两种查询方式

1) 递归查询

递归查询是由客户端发起的,客户端(通常是用户或应用程序)向本地DNS服务器发送一个查询请求,要求本地DNS服务器完成整个查询过程,并将查询结果返回给客户端。

以下是递归查询的基本流程:

  • 客户端发起查询请求:客户端向本地DNS服务器发送查询请求。
  • 本地DNS服务器响应:如果本地DNS服务器缓存中有查询结果,则直接返回给客户端;如果没有,则开始递归查询。
  • 递归查询:本地DNS服务器代替客户端向其他DNS服务器查询,包括根DNS服务器、顶级域名(TLD)服务器和权威DNS服务器。
  • 结果返回:一旦找到结果,本地DNS服务器将结果返回给客户端。

递归查询的特点是客户端不需要参与查询过程(只发出请求即可),所有查询工作都由本地DNS服务器完成

2)迭代查询

迭代查询通常发生在DNS服务器之间。当本地DNS服务器无法直接解析域名时,它会向其他DNS服务器发送迭代查询请求。

迭代查询

以下是迭代查询的基本流程:

  • 本地DNS服务器请求:本地DNS服务器向根DNS服务器发送查询请求。
  • 根DNS服务器响应:根DNS服务器不会直接返回查询结果,而是返回一个指向下一个可能解析该域名的DNS服务器的IP地址。
  • 迭代查询:本地DNS服务器根据根DNS服务器的响应,向下一个DNS服务器发送查询请求。
  • 重复迭代:这个过程会重复进行,每次都会向下一个DNS服务器发送请求,直到找到权威DNS服务器。
  • 结果返回:一旦找到权威DNS服务器,并获取到查询结果,本地DNS服务器将结果返回给客户端。

迭代查询的特点是本地DNS服务器会逐步引导客户端向其他DNS服务器查询,直到找到最终结果。

6. 扩展:DNS的本地缓存方式及查询顺序介绍

计算机中 DNS 记录在本地有三种缓存方式,即浏览器缓存、操作系统缓存和本地hosts文件,浏览器与非浏览器的查询顺序有略微差异,具体如下:

  • 浏览器查询顺序:浏览器缓存 > 操作系统缓存 > 本地hosts文件 > DNS服务器查询
  • 非浏览器查询顺序:比如在CMD命令行中执行ping命令,查询顺序为本地Hosts文件 > 操作系统缓存 > DNS服务器查询

注:浏览器缓存DNS记录是为了提高网页加载速度,因为浏览器需要频繁解析大量的域名;命令行工具(如ping)更依赖于操作系统的DNS解析顺序,以确保结果的一致性和可控性。

6.1. 浏览器缓存

浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的 DNS 缓存时间,如 Chrome 的过期时间是 1 分钟,在这个期限内不会重新请求 DNS。

chrome浏览器DNS缓存

6.2. 操作系统缓存

操作系统维护一个DNS缓存,以减少对DNS服务器的查询次数。可以使用以下命令查看和清除操作系统的DNS缓存:

  • Windows:
    • 查看DNS缓存:ipconfig /displaydns
    • 清除DNS缓存:ipconfig /flushdns
  • Linux:
    • 查看DNS缓存:sudo systemd-resolve --statistics
    • 清除DNS缓存:sudo systemd-resolve --flush-caches

举例:Windows环境下使用命令ipconfig /displaydns查询本机的DNS缓存。执行上述命令后,你会看到以下信息:

  • 记录名称:查询的 DNS 名称及其相关记录,比如地址;
  • 记录类型:表示记录类型的数字,每种 DNS 协议都有一个对应的数字;
  • 生存时间:缓存条目的有效期(TTL 秒数);
  • 数据长度:数据的字节长度,例如 IPv4 地址是 4 个字节,IPv6 地址是 16 个字节;
  • 部分:查询的答案;
  • XXX 记录:记录类型的规范名称。

6.3. 本地hosts文件

用户自己本机配置的 hosts 文件:

  • Windows: C:\Windows\System32\drivers\etc\hosts
  • Linux: /etc/hosts

hosts文件举例

7. 参考链接

  • https://root-servers.org/
  • https://zhuanlan.zhihu.com/p/351059293

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】手写Tomcat 二

目录 响应静态资源 HTTP协议请求格式 1. 解析请求信息 创建解析请求类 HttpRequest 2. 创建静态资源目录 webs 3. 封装响应信息 创建静态资源处理器 StaticResourceHandler 创建响应类 HttpResponse 作业 1. 绘制 请求解析类 HttpRequest 和响应类 HttpResponse 的封…

动手学深度学习(pytorch土堆)-03常见的Transforms

Compose transforms.Compose 是 PyTorch 中的一个函数,用于将多个图像变换操作组合在一起,形成一个变换流水线。这样可以将一系列的图像处理操作整合为一个步骤,便于对图像进行批量预处理或增强。 基本用法 transforms.Compose 接受一个列表…

vue + Lodop 制作可视化设计页面 实现打印设计功能(四)

历史: vue2 Lodop 制作可视化设计页面 实现打印设计功能(一) vue Lodop 制作可视化设计页面 实现打印设计功能(二) vue Lodop 制作可视化设计页面 实现打印设计功能(三) 前言&#xff1a…

必看!实网环境下,合宙Cat.1模组低功耗详细数据

一、背景说明 合宙4G Cat.1模组以低功耗为显著特点,提供了三种功耗模式以适应不同需求。 分别是:常规模式,低功耗模式,PSM模式。 在实际应用中,用户可以根据不同的应用场景和需求,灵活选择合宙4G Cat.1模…

数据结构与算法图论 并查集

前言 写一道并查集的题 判断是否为亲戚 原题目:现在有若干家族图谱关系,给出了一些亲戚关系,如Marrv和Tom是亲戚,Tom和Ben是亲戚等等。从这些信息中,你可以推导出Marry和Ben是亲戚。请写一个程序,对于我…

一文读懂在线学习凸优化技术

一文读懂在线学习凸优化技术 在当今的数据驱动时代,机器学习算法已成为解决复杂问题的关键工具。在线学习凸优化作为机器学习中的一项核心技术,不仅在理论研究上具有重要意义,还在实际应用中展现出巨大的潜力。本文将深入浅出地介绍在线学习…

C++(三)----内存管理

1.C/C内存分布 看下面这个问题(考考你们之前学的咋样): int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pCh…

【leetcode C++】 动态规划

4. 91 解码方法 题目: 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : "1" -> A "2" -> B ... "25" -> Y "26" -> Z 然而,在 解码 已编码的消息时,你意识到有许多不同的…

数据湖-方案对比

数据湖架构结合了数据湖和数据仓库。虽然它不仅仅是两者之间的简单集成,但其理念是充分发挥两种架构的优势:数据仓库的可靠交易以及数据湖的可扩展性和低成本。 Lakehouse 架构支持管理各种数据类型,例如结构化、半结构化和非结构化数据&…

巧用工具,Vue 集成 medium-zoom 实现图片缩放

文章目录 巧用工具,Vue 集成 medium-zoom 实现图片缩放介绍medium-zoomVue3集成 medium-zoom 示例Vue2集成 medium-zoom 示例进阶 - 可选参数 巧用工具,Vue 集成 medium-zoom 实现图片缩放 在现代网页开发中,为用户提供良好的视觉体验至关重…

爬虫逆向学习(六):补环境过某数四代

声明:本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 引用博客: https://blog.csdn.net/shayuchaor/article/details/103629294 https://blog.csdn.net/qq_36291294/article/details/127699273 https://blog.csdn.net/weixin_…

vivo手机已删除的短信还能恢复吗?

虽然现在我们很少使用vivo手机的短信功能,但是我们偶尔还会通过vivo手机短信功能接收一些重要的信息。如果我们在清理垃圾短信的时候误删了vivo手机重要短信,该怎么恢复呢? 方法一:通过vivo云服务恢复 1、确保您已开启vivo云服务…

Go常用正则函数整理

前言 在Go语言中,标准库regexp提供了丰富的API来处理正则表达式,支持编译、匹配、查找、替换等操作。以下是一个Go标准库正则函数的常用大全教程及部分使用示例。 Go标准库常用正则函数 Compile:编译正则表达式,返回一个可用于…

Qt 构建报错 undefined reference to xxx

初次学习使用Qt,在构建时报错。这是个典型报错,熟练vs与c的朋友一眼就可以看出要么是库出问题了,要么是库链接出问题了。那么就可以按照相对明确的方向找问题。 1、确认库与项目配置是否一致。32位还是64位,debug还是release一定…

如何逆转Instagram账号流量减少?4个实用技巧分享

Instagram作为全球十大社媒之一,不仅是个人分享生活的平台,还是跨境卖家进行宣传推广和客户开发的关键工具。在运营Instagram的过程中,稍有不慎就容易出现账号被限流的情况,对于账号状态和运营工作的进行都十分不利。 一、如何判断…

new String(),toString()和Arrays.toString()的区别

下面写了一段代码来展示结果 import javax.sound.midi.Soundbank; import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {String str "abc";System.out.println("str:"str);char[] chars st…

若楠带你初识OpenCV(7) -- 轮廓检测之银行卡号识别

文章目录 银行卡号识别详细流程一、设置参数二、函数准备三、具体步骤1. 得到每个数字的信息2. 银行卡处理3. 找到数字边框4. 模板匹配 总结 银行卡号识别 经过了几篇关于轮廓检测的学习,本篇我们来尝试完成对银行卡号的检测识别: 目标,识别…

获取时间,并将时间按一定的格式输出

一、时间函数 1.获取秒数 CTS 北京时间 2.转换为需要个格式 系统时间的获取: 1.time 获得秒数 time_t time(time_t *t); time_t 类型变量 第一种 准备一个变量 time_t tm; time(&tm) 第二种 tm time(NULL); 功能: 获得1970年到现在的秒数 第一步,先获得秒…

OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

鸿蒙开发往期必看: 一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发! “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

JavaScript基础语法(超详细!)

为什么学JS&#xff1f; 1.页面动态效果 2.表单验证 可以包含在文档中的任何地方&#xff0c;只要保证这些代码在被使用前已读取并加载到内存即可 <script>… </script>网页中引用JavaScript的方式&#xff1a; 1.使用<script>标签外部JS文件 <scrip…