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

本文详细介绍了 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 查询报文和回答报文:

查询报文:

图片

回答报文:

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CV常用注意力机制总结

本文总结了近几年CV领域常用的注意力机制,包括:SE(Squeeze and Excitation)、ECA(Efficient Channel Attention)、CBAM(Convolutional Block Attention Module)、CA(Coor…

切换.net Framework 版本后,出现NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

问题现象: 由于添加新的dll文件,依赖的.NET Framework版本与当前的不一致,在vs 中切换了目标框架版本后,运行程序,出现以下的warnning信息: 一些 NuGet 包是使用不同于当前目标框架的目标框架安装的&#…

MacOS系统(M1/M2)安装AI绘画StableDiffusion保姆级教程

TOC 安装完成后,推荐阅读这篇教程:AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通 实操环境: macOS 13 Arm64(建议12以上的系统使用) Apple M1 先来看几个样例: AI绘画S…

SDN系统方法 | 1. 概述

随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…

MongoDB负载均衡集群监控

对负载均衡的集群监控,不仅仅集中在对集群所有的资源、服务等进行监控,还要兼顾整体逻辑。以MongoDB高可用负载均衡集群为例,对逻辑层面的监控,就是模拟用户行为,访问集群数据,判断运行状态是否正常。 Mong…

数据库用户管理

数据库用户管理 一、创建: 1.新建用户: CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码];‘用户名’:指定将创建的用户名. ‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机…

手撕自定义类型:结构体,枚举,联合——【C语言】

在开始学习之前我们先来欣赏一下五岳之一华山的风景,来营造一个好心情,只有一个好心情我们才能更好的学习 目录 结构体 1 结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 …

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错(1)command-l…

无法找到docker.sock

os环境:麒麟v10(申威) 问题描述: systemctl start docker 然后无法使用docker [rootnode2 ~]# systemctl restart docker [rootnode2 ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon r…

PLEX如何搭建个人局域网的视频网站

Plex是一款功能非常强大的影音媒体管理系统,最大的优势是多平台支持和界面优美,几乎可以在所有的平台上安装plex服务器和客户端,让你可以随时随地享受存储在家中的电影、照片、音乐,并且可以实现观看记录无缝衔接,手机…

PROFINET转TCP/IP网关TCP/IP协议的含义是

大家好,今天要和大家分享一款自主研发的通讯网关,远创智控YC-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧&…

iPad远控Windows解决方案

最近入手了一台iPad,但我不想让它沦为爱奇艺的工具,遂考虑如何在iPad上获得桌面级Windows的生产力。主要还是之前背着电脑出远门太累了,这也是促成我买iPad的重要因素。 一种方案就是通过远程控制,在iPad上远程操作自己的电脑&am…

C# PaddleInference OCR 表格识别

效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleInferenceSdcb.PaddleOCR 测试图片 代码 using OpenCvSharp.Extensions; using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.PaddleOCR.Models; using Sdcb.PaddleOCR.Models.Details; using…

一次零基础靶机渗透细节全程记录

一、打靶总流程 1.确定目标: 在本靶场中,确定目标就是使用nmap进行ip扫描,确定ip即为目标,只是针对此靶场而言。其他实战中确定目标的方式包括nmap进行扫描,但不局限于这个nmap。 2.信息收集: 比如平常挖…

数据结构(2.1)——时间复杂度和空间复杂度计算

前言 (1)因为上一篇博客:数据结构(2)—算法对于时间复杂度和空间复杂度计算的讲解太少。所以我在次增加多个案例讲解。 (2)上一篇已经详细介绍了,为什么我们的算法要使用复杂度这一个…

Stable Diffusion (持续更新)

引言 本文的目的为记录stable diffusion的风格迁移,采用diffusers example中的text_to_image和textual_inversion目录 2023.7.11 收集了6张水墨画风格的图片,采用textual_inversion进行训练,以"The street of Paris, in the style of …

uniApp之同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示、adb、shell、package、uninstall

文章目录 背景解决思路执行查找第三方应用的指令执行卸载指令 背景 一开始正常编译运行,由于应用页面有些许奇怪的错误,便想着卸载,重新运行安装调试基座。卸载后,运行还是会出现,明明已经把应用卸载了,还是…

基于深度学习的高精度Caltech行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度Caltech数据集行人检测识别系统可用于日常生活中或野外来检测与定位行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv…

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

什么是人工智能大模型?

目录 1. 人工智能大模型的概述:2. 典型的人工智能大模型:3. 人工智能大模型的应用领域:4. 人工智能大模型的挑战与未来:5. 人工智能大模型的开发和应用:6. 人工智能大模型的学习资源: 人工智能大模型是指具…