DNS 是如何影响你冲浪速度的?

news2024/11/26 5:39:47

本文详细介绍了 DNS 相关知识,包括 DNS 工作原理、如何提升域名解析速度、以及 DNS 记录与报文等内容。

1. 域名与域名服务器

在日常上网过程中,出于好记的原因,人们更喜欢在浏览器中输入网站的域名,而不是 IP 地址。比如想要访问百度,则会输入 www.baidu.com,而不是 202.108.22.5(或者百度网站的其他 IP)。

然而计算机网络通信中所识别的标识并不是域名,而是 IP 地址,因为其可以提供主机在互联网中的位置信息,而且是定长的,路由器等设备更容易处理。

图片

为了折中人类和计算机不同的偏好,就出现了 DNS(Domain Name System,域名系统),其主要任务是根据域名查出对应的 IP 地址。

下面先介绍一下域名和域名服务器,之后再介绍 DNS 的工作原理。

域名由若干个英文字符串组成(不区分大小写),各字符串之间用点号『.』分隔连接,其中越靠右的表示域名级别越高。

举个例子,百度的域名为 www.baidu.com,其中 com 是顶级域名(一级域名),baidu 是二级域名,www 是三级域名。

图片

域名服务器(也称为 DNS 服务器)负责存储域名和 IP 地址的映射关系,当我们需要获取某个域名对应的 IP 地址时,只需要从域名服务器中查询即可。

图片

由于域名非常非常多,如果都存放在一台域名服务器中,那么不仅查询速度慢,服务器压力大,而且难以保证服务的可靠性。因此,DNS 采用了分布式的设计方案,大量的域名服务器之间通过层次方式组织,分布在全世界范围内。

一般而言,域名服务器可以分为以下四类:

  • 根域名服务器:最高层级的域名服务器,因特网上一共有 13 个根域名服务器(以英文字母 A 到 M 依序命名,格式为[a~m].root-servers.net),每个根域名服务器都知道所有顶级域名服务器的 IP 地址,比如知道负责 com 域的顶级域名服务器的 IP 地址。

  • 顶级域名服务器:对于每个顶级域名,如 com、org、edu 等,都有对应的顶级域名服务器。顶级域名服务器知道其所管理的所有权威域名服务器的 IP 地址,比如负责 com 域的顶级域名服务器知道负责 baidu.com 域的权威域名服务器的 IP 地址。

  • 权威域名服务器:一个网站需要将其域名和 IP 地址注册到相应的权威域名服务器中,比如网站 www.baidu.com 的域名和 IP 地址就存储在负责 baidu.com 域的权威域名服务器中。

  • 本地域名服务器:本地域名服务器不属于上述域名服务器的层次结构,但是它对域名系统非常重要。每个 ISP(如一个大学、一个公司)都有一个本地域名服务器(也叫默认域名服务器)。具体在下一节中介绍。

图片

2. 域名解析流程

知道了域名和域名服务器的基础知识后,我们来了解一下域名解析的具体流程,以输入百度域名为例,看看我们的主机是如何得到 www.baidu.com 的 IP 地址的。

图片

  1. 请求主机向本地域名服务器发送 DNS 查询报文,询问 www.baidu.com 的 IP 地址是什么;

  2. 本地域名服务器转发此查询报文到根域名服务器

  3. 根域名服务器发现要查询的顶级域名为 com,于是向本地域名服务器发送响应报文,报文中封装了负责 com 域的顶级域名服务器的 IP 地址列表;

  4. 本地域名服务器收到根域名服务器响应的报文后,选择其中一个顶级域名服务器的 IP 地址,并向其发送查询报文;

  5. 顶级域名服务器发现要查询的二级域名为 baidu,于是向本地域名服务器发送响应报文,报文中封装了负责baidu.com 域的权威域名服务器的 IP 地址列表;

  6. 本地域名服务器收到顶级域名服务器响应的报文后,选择其中一个权威域名服务器的 IP 地址,并向其发送查询报文;

  7. 权威域名服务器通过查询数据库,找到 www.baidau.com 的 IP 地址,并将此信息封装为一个响应报文,发送给本地域名服务器;

  8. 本地域名服务器将响应报文发送给原请求主机。我们的主机就知道了百度的 IP 地址,DNS 查询过程结束。

在此过程中,请求主机与本地域名服务器之间的交互称为递归查询,而本地域名服务器与域名服务器层次结构中相关服务器的交互称为迭代查询

请求主机是如何知道本地域名服务器的 IP 地址的?

当用户插上网线或者连上 WIFI 后,电脑会通过 DHCP 协议分配一个 IP 地址,与此同时,也会获取到本地域名服务器的 IP 地址!

本地域名服务器是如何知道根域名服务器的 IP 地址的?

因特网上一共有 13 个根域名服务器,它们的 IP 地址是固定不变的,因此被集成在了操作系统中,每台电脑都知道!

为了解析出百度域名的 IP 地址,一共发送了 8 份 DNS 报文。用户本来只是想和百度的服务器进行交互,却耗费了大量的时间进行域名解析,如果每次都这样搞,岂不是得慢死?因此就需要有一些提升域名解析速度的方式。

3.  提升域名解析速度

(1)TCP or UDP

我们都知道,TCP 相较于 UDP 更可靠,但是速度更慢

图片

DNS 应该采用哪个传输层协议呢?

  • 如果采用 TCP 协议,不仅需要三次握手建立连接,而且需要进行拥塞控制等,那么域名解析速度将慢成龟速,不利于用户体验。

  • 如果采用 UDP 协议,万一丢包了怎么办?如果解析不出来 IP,怎么访问目标网站?不利于用户体验。

实际上,DNS 主要使用 UDP,在特殊情况下,也会使用 TCP,端口号都是 53

一般情况下,DNS 报文都比较小,只需要一个包就能承载所有信息。既然只有一个包,就无需考虑哪个包未送达,直接重发一个包即可,因此无需使用 TCP 那样复杂的协议,直接使用 UDP 协议,DNS 协议自己处理超时和重传问题,以提供可靠性服务。

当然有的时候 DNS 报文比较大,比如响应报文中可能一个域名包含有很多 IP 记录。当服务器响应时,会将报文中的 TC 标志位设置为 1,表示响应长度超过了 512 字节,此报文仅仅返回前 512 字节。当我们的主机收到响应后,就会使用 TCP 协议重发原来的查询请求,以获取完整报文。

此外,为了防止本地域名服务器(主域名服务器)宕机而导致无法对域名进行解析,本机还需要设置一个辅助域名服务器。当主域名服务器宕机后,由辅助域名服务器继续提供域名解析的服务。辅助域名服务器会定时(通常是每隔 3小时)向主服务器发送查询请求以实现同步,此时传输数据较多,因而使用 TCP 协议。

(2)DNS 缓存

即使采用 UDP 协议,但是如果每次都需要从根服务器开始一层一层的查询,仍然很慢,且处于层级结构中的域名服务器将会接收到大量的请求,处理速度进一步降低!

为了提升域名解析速度并减轻域名服务器的压力,DNS 广泛使用了缓存技术。

当用户访问了某个网站后,本地域名服务器会将解析出的域名和 IP 地址的映射关系缓存一定时间。在缓存过期前,用户再访问相同网站时,本地域名服务器就可以直接返回查询结果,而无需再去询问根域名服务器、顶级域名服务器等,这样就能大大减少传输的 DNS 报文数量!

实际上,不仅在本地域名服务器中设置了高度缓存,用户主机也有缓存。对于 Windows 电脑,可以通过命令ipconfig/displaydns查询当前 DNS 缓存,比如当我访问了百度后,本机就会缓存以下信息:

图片

缓存虽然提升了 DNS 解析速度,但并不能保证一致性,因为一个网站的域名和 IP 地址的映射关系并不是永久不变的,可能缓存的解析结果已失效,因而 DNS 缓存时间不能设置太大!

Windows 电脑也可以通过命令ipconfig/flushdns清空本机缓存。

(3)切换本地域名服务器

前面提到,在进行域名解析时,主机会向本地域名服务器发起递归查询,如果本地域名服务器的性能较差,或者未正确配置缓存,那么我们上网的速度将会变得非常慢,因此选择一个好的本地域名服务器将有助于提升冲浪速度

默认情况下,本机在联网时会通过 DHCP 协议自动获得一个 DNS 服务器地址,那么如果此服务器性能不好,该如何更换呢?

以 Windows 为例,可以通过控制面板—>网络和 Internet—>网络连接—>Internet 协议版本4(TCP/IPv4)修改本地域名服务器的 IP 地址。

图片

互联网上常见的公共 DNS 服务器的 IP 地址如下:

首选 DNS 服务器地址备用 DNS 服务器地址
阿里223.5.5.5223.6.6.6
腾讯119.29.29.29182.254.116.116
百度180.76.76.76114.114.114.114
谷歌8.8.8.88.8.4.4
114DNS114.114.114.114114.114.115.115

一般情况下,自动获取的本地域名服务器与主机位于同一个子网中,速度都挺快的。但是如果在上网过程中,发现打开网页的速度很慢,也可以尝试使用上面的公共 DNS 服务器,说不定速度会有所改善。

4. DNS 记录和报文

实际上,域名服务器中保存并不仅仅是域名和 IP 地址,而是保存了一个资源记录(Resource Record,RR)。

一个资源记录包含四部分内容,分别是 NameValueTypeTTL

TTL 指的是记录的生存时间,以秒为单位,它决定了缓存此记录的过期时间。

Name 和 Value 的含义随着 Type 的不同而不同,举几个常见例子:

  • 当 Type = A 时(A 是 Address 缩写,也可用编号 1 表示),Name 表示域名,Value 表示对应的 IP 地址,如(www.example.com,93.184.216.34,A,86400)。

  • 当 Type = NS 时(NS 是 Name Server 缩写,也可用编号 2 表示),Name 表示一个域,Value 为负责该域解析的域名服务器的域名,如(baidu.com,ns1.baidu.com,NS,172800),此记录用于沿着层级结构查询链来路由 DNS 查询。

如果一台域名服务器是用于某特定域名的权威域名服务器,那么其将会有一条包含该域名的 A 记录。

如果一台域名服务器不是用于某特定域名的权威域名服务器,那么其将包含一条 NS 记录,该记录用来指定该域名由哪个域名服务器来进行解析;除此之外,它还将包含一条 A 记录,该记录提供了在 NS 记录中 Value 字段中的域名服务器的 IP 地址。

图片

接下来介绍一下 DNS 报文的具体内容。DNS 报文分为两类:查询报文回答报文,二者有着相同的格式,如下图所示:

图片

  • 事务 ID:用于标识 DNS 查询的标识符。查询报文和其对应的回答报文有着相同的事务 ID,因此通过它可以区分 DNS 回答报文是对哪个请求进行响应的。

  • 标志:此字段中含有若干标志,比如有一个『QR』标志位用于指出此报文是查询报文(0)还是回答报文(1),再比如有一个『TC』标志位用于指出此报文长度是否大于 512 字节。

  • 问题数:对应于下面查询问题的数量(支持同时查询多个域名,通常为一个)。

  • 回答资源记录数:对应于下面回答问题相关资源记录的数量(一个域名可能有多个 IP 对应,那么将会有多个回答记录)。

  • 权威资源记录数:对应于下面权威域名服务器相关资源记录的数量。

  • 附加资源记录数:对应于下面附加信息相关资源记录的数量。

  • 查询问题:此区域为查询内容,包含查询域名和查询类型(如  www.example.com,A)。

  • 回答问题:此区域为查询结果,包含一到多条资源记录(如 www.example.com,93.184.216.34, A,300)。

  • 权威域名服务器:此区域为其他权威域名服务器的记录,即含有指向权威域名服务器的资源记录,用以继续解析过程。(如 baidu.com,ns1.baidu.com,NS,172800)。

  • 附加信息:此区域为其他有帮助的信息,比如提供权威域名服务器所对应的 IP 地址。

最后,使用 Wireshark 抓一个 DNS 查询报文和回答报文:

查询报文:

图片

回答报文:

图片

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

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

相关文章

小红书如何运营 策略方法总结

大家好,我是权知星球,今天跟大家分享一下小红书如何运营和策略方法总结。 小红书是一个生活方式和消费决策平台,并为用户提供入口,作为一个生活方式社区,小红书的独特之处在于其用户发布的内容都来自于真实生活&#…

MySQL-DDL-数据库操作

开发项目流程 数据库设计-DDL DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表) 数据库 常见操作 查询 查询所有数据库:show databases; 查询当前数据库&#xf…

A Simple Framework for Contrastive Learning of Visual Representations(论文翻译)

A Simple Framework for Contrastive Learning of Visual Representations 摘要1介绍2 方法2.1 对比学习框架2.2 训练大批量数据2.3 评估协议 3.用于对比表示学习的数据增强3.1.数据增强操作的组合对于学习良好的表示至关重要3.2 对比学习需要更强的数据增强比有监督学习 4. 编…

STM32单片机WIFI阿里云老人智能家居语音识别定时吃药

实践制作DIY- GC00158-WIFI阿里云老人智能家居语音识别定时吃药 一、功能说明: 基于STM32单片机设计------WIFI阿里云老人智能家居语音识别定时吃药 二、功能说明: 电路组成:STM32F103CXT6最小系统LD3322语音识别模块LCD1602显示按键1个ULN2…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏(1) 菜单栏 Burp(2) 菜单栏 project(3) 菜单栏 Intruder(4) 菜单栏 Repeater(5&#x…

微信小程序开发:必须掌握的 HTML、CSS 和 JavaScript 技术

引言 小程序是一种轻量级的应用程序,通过HTML、CSS和JavaScript等前端技术开发,可在移动设备上直接访问和使用,无需下载和安装。 文章目录 引言一、小程序开发的背景和重要性二、HTML、CSS和JavaScript在小程序开发中的作用三、HTML基础知识1…

一篇文章搞定《JVM的完美图解》

一篇文章搞定《JVM的完美图解》 前言常见的问题1、双亲委托机制2、类加载过程加载链接初始化 3、JVM内存结构图方法区堆栈本地方法栈程序计数器 4、对象的组成对象头示例数据对齐字节 5、JVM中怎么确定一个对象是否可以GC引用计数法(早期策略)可达性分析…

Java设计模式之行为型-中介者模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 中介者模式的核心思想是引入一个中介者对象,来封装和管理对象之间的交互关系。 对象之间不再直接交互,而是通过中介者间接交互。这样可以减少对象之间的依赖&…

浏览器调试技巧

浏览器调试技巧 文章将介绍几个 devtools 技巧。 缩放devtool ui 可能对于某些开发来说devtools 中的文本和按钮太小,使用起来不舒服。而浏览器也提供了可以缩放 devtools UI的方法。 devtools 的用户界面是使用 HTML、CSS 和 JavaScript 构建的,这意…

中国地图数据可视化制作,python的pyecharts模块读取excel中国着色地图可视化

数据格式如下: import pandas as pd from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.globals import ChartType# 读取Excel数据 data pd.read_excel(C:\\Users\\Administrator\\Desktop\\国内数据.xlsx)# 创建地图实例 m…

大学英语四六级考点听力案例-内蒙古民族大学外国语学院四六级考试听力电台

大学英语四六级考点听力案例-内蒙古民族大学外国语学院四六级考试听力电台 北京海特伟业科技有限公司发布于2023年7月13日 文/任洪卓 一、大学英语四六级考点听力广播系统用户需求 内蒙古民族大学位于内蒙古东部通辽市,是一所综合型民族大学,为内蒙古自…

电子水尺——实时监测、高精度测量

法国作家雨果说过:一个城市的良心是下水道。当洪水四溢时,城市的下水道让滔滔之水悄然排淌,城市回归安详。 往期,水位监测总是“被动”执行,这样的做法不仅效率低下,还难以做到及时调度和合理应对。 山东…

2023.7.13-输入一个整数n,输出从1开始累加到n的求和

从1累加到n的计算公式为S(1n)n/2。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a1;int i 0;int sum 0;printf("整数n的值:");scanf("%d",&a);for (i 0; i < a; i){sum i;}printf("从…

opencv 05 彩色RGB像素值操作

opencv 05 彩色RGB像素值操作 RGB 模式的彩色图像在读入 OpenCV 内进行处理时&#xff0c;会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点&#xff0c;并将像素点以行为单位存储在 ndarray 的列中。例如&#xff0c; 有一幅大小为 R 行C 列的原始 RGB 图像…

用户案例 | Apache DolphinScheduler 离线调度在自如多业务场景下的应用与实践

用户案例 | 自如 随着自如业务的快速发展&#xff0c;不断增长的调度任务和历史逾万的存量任务对平台稳定性提出了更高的要求。同时&#xff0c;众多非专业开发人员也需要一种更为“亲民”的调度平台使用体验。 如何满足这些日渐凸显的需求对自如大数据平台的开发团队来说&am…

重复值--Pandas

1. 删除重复行&#xff1a;drop_duplicate() 1.1 函数功能 返回去除重复行的DataFrame&#xff0c;不考虑索引。 1.2 函数语法 DataFrame.drop_duplicates(subsetNone, *, keepfirst, inplaceFalse, ignore_indexFalse)1.3 函数参数 参数含义subset列标签或列标签组成的列…

操作系统第四篇

C语言 第四章 C语言4.1 gcc简介4.2 C语言基础4.3 GNU Binutils 简介4.4 8086 汇编与 C 语言混合编程4.4.1 混合编程的几个问题4.4.2 混合编程的一个实例 第四章 C语言 前面章节用 x86 汇编语言写了引导记录 mbr.bin&#xff0c;并让 BIOS 引导到内存 0x07c00 处执行成功。然后用…

Git 工具出现克隆库失败详解

Git 工具出现克隆库失败详解 现象 错误字符串&#xff1a;git unable to access xxx: Encountered end of 原因 总体来说出现这个原因通常是因为网络连接的问题。具体的有以下几个方面 远程仓库不存在&#xff1a;检查所指定的远程仓库是否存在&#xff0c;确保仓库名称、U…

嵌套虚拟机-监控嵌套虚拟机-libvmi-volatility

接上回&#xff1a; libvmi监控-使用examples cd ~ git clone https://github.com/libvmi/libvmi.git cd libvmi mkdir build cd build # 注意&#xff0c;由于我们是vmi的虚拟机&#xff0c;所以cmake编译时需要加上该编译选项&#xff08;参考libvmi github上的readme&…

积分图像、图像分割、Harris角点检测

目录 1、积分图像 2、图像分割--漫水填充 3、图像分割--分水岭法 4、Harris角点检测 1、积分图像 //积分图像 int test1() {//创建一个1616全为1的矩阵,因为2561616Mat img Mat::ones(16, 16, CV_32FC1);//在图像中加入随机噪声RNG rng(10086);for (int y 0; y < img.r…