当前位置: 首页 > news >正文

计算机网络 —— 应用层(DNS域名系统)

计算机网络 —— 应用层(DNS域名系统)

  • 什么是DNS
  • 域名的层次结构
    • 域名分类
  • 域名服务器的分类
  • 域名解析方式
    • 递归查询(Recursive Query)
    • 迭代查询(Iterative Query)
    • 域名的高速缓存

我们今天来看DNS域名系统

什么是DNS

DNS,全称为Domain Name System,即域名系统,它是互联网的核心组件之一,扮演着互联网“电话簿”的角色。DNS的主要职责是将人类易于记忆和使用的域名(比如www.example.com)转换为计算机能够识别和连接的IP地址(如192.168.1.1)。这一过程称为域名解析。

DNS的工作原理大致如下:

  1. 客户端查询:当用户在浏览器中输入一个网址时,计算机首先查询本地DNS缓存(如果之前已经访问过该网站),看是否有该域名对应的IP地址记录。如果没有找到,请求会被转发到本地配置的DNS递归解析器,通常是用户的ISP(互联网服务提供商)提供的DNS服务器。
  1. 递归查询:DNS递归解析器接收到请求后,如果其缓存中也没有相关信息,它会代表客户端开始一个递归查询过程。这个过程涉及与多个DNS服务器的交互,从根域名服务器开始,然后到顶级域名(TLD)服务器,再至权威域名服务器,直到找到存储该域名对应IP地址的服务器。
  1. 解析过程
  • 根域名服务器会指引查询到正确的顶级域名服务器(如.com、.org)。
  • 顶级域名服务器进一步将查询转发到负责该特定域名的权威域名服务器。
  • 权威域名服务器最终提供该域名对应的IP地址给递归解析器,递归解析器再将此信息返回给客户端。
  1. 缓存:为了提高效率,每一级DNS服务器和客户端都会缓存得到的域名到IP地址的映射关系,这样后续相同的查询就可以直接从缓存中获取结果,而不需要重复完整的查询过程。

在这里插入图片描述

DNS不仅用于网站地址的解析,还应用于电子邮件路由、及其他依赖于域名的服务中。它是互联网基础设施的关键部分,确保了用户能通过简单易记的域名访问全球各地的网络资源。

域名的层次结构

DNS域名层次结构是一种倒置的树状结构,从最顶层的根域开始,向下依次是顶级域(TLD)、二级域、三级域等,直至具体的主机名。以下是DNS域名层次结构的组成部分及其说明:

  1. 根域(Root Domain)
    标志为一个点(.),位于树形结构的顶端,是所有域名查询的起点。实际上,它是所有DNS查询的最高层级,但通常在域名书写时不显示。全球共有13组根域名服务器,负责引导查询者前往相应的顶级域名服务器。
  1. 顶级域(Top-Level Domain, TLD)
    位于根域之下,是最靠近根域的一级域名,如.com.org.net.edu.gov.cn(中国)等。还包括国家代码顶级域名(ccTLDs),如.uk(英国)、.de(德国)等。
  1. 二级域(Second-Level Domain, SLD)
    在顶级域之下的域名层,通常代表组织或公司的名称,例如在example.com中,example就是二级域。
  1. 三级域(Third-Level Domain)及其他子域
    可以在二级域下继续细分,形成多级子域名结构。例如,在www.example.com中,www是一个三级域,通常用于指定特定的服务类型(如web服务器)。
  1. 主机名(Hostname)
    树状结构中最底层的部分,直接关联到具体的网络设备或服务,如wwwmailftp等。主机名加上前面各级域名,构成了完整的域名,用于唯一标识互联网上的每一台主机。

在这里插入图片描述举个简单的例子:

假设我们访问的网站是 www.example.com

  • 根域(Root Domain):虽然在实际的网址中不会显示出来,但在DNS查询过程中是起始点,用"."表示。
  • 顶级域(Top-Level Domain, TLD):在这个例子中是.com,表示这是一家商业机构的网站。
  • 二级域(Second-Level Domain, SLD)example 是二级域名,它代表了一个具体的组织或公司的名字。
  • 三级域(Third-Level Domain):在这个例子中是www,它是一个常见的前缀,用来指示该域名指向的是一个网站(World Wide Web)服务器。
    所以,当你在浏览器中输入 www.example.com 并敲击回车时,DNS系统会从根域开始,逐步向下查询到顶级域.com的DNS服务器,再到管理example.com这个二级域名的权威DNS服务器,最终找到与www相对应的IP地址,从而让你的电脑能够连接到存放该网站内容的服务器上。

整个域名系统通过这种层次化的结构,实现了域名到IP地址的有效映射,并且允许分散管理,便于查询和维护。每个级别的域名通常由不同的组织或个人管理,顶级域名由互联网号码分配局(IANA)和相应的注册管理机构负责,而更低级别的域名则由相应的注册人或组织管理。

域名分类

域名分类主要可以根据不同的标准来划分,以下是几种常见的分类方式:

  1. 按后缀分类
  • 通用顶级域名(gTLD):包括最早期的.com(商业)、.net(网络服务)、.org(非营利组织)等,以及后来新增的如.info(信息)、.biz(商业)、.mobi(移动设备)等。
  • 国家及地区顶级域名(ccTLD):根据ISO 3166国家代码分配,如.cn(中国)、.us(美国)、.uk(英国)等。
  • 新通用顶级域名(New gTLD):近年来大量增加的顶级域名,如.app(应用)、.shop(商店)、.xyz(通用)等,旨在提供更多样化的选择。
  1. 按功能或用途分类
  • 教育机构:如.edu(教育机构)。
  • 政府机构:如.gov(政府部门)、.gov.cn(中国政府部门)。
  • 军事组织:如.mil(军事机构)。
  • 网络服务:如.net(网络服务相关)。
  • 非营利组织:如.org(非营利组织)。
  1. 按结构或级别分类
  • 顶级域名(Top-Level Domain, TLD):上述提到的各类顶级域名。
  • 二级域名:在顶级域名之下的域名,例如在example.com中,"example"是二级域名。
  • 三级及以下域名:在二级域名基础上进一步细分,如sub.example.com中的"sub"。

在这里插入图片描述在这里插入图片描述

选择合适的域名时,考虑目标受众、品牌定位、易记性以及SEO优化等因素是很重要的。

域名服务器的分类

按照根域名服务器的标准来划分,DNS服务器可以分为以下几类,这种划分方式主要关注DNS层次结构的顶级元素:

  1. 根域名服务器(Root DNS Servers)

这是DNS层次结构的最高层级,全球共有13组根域名服务器,每组可能包含多个物理服务器和镜像站点,以确保稳定性和冗余。它们的主要职责是响应DNS查询的第一步,即指引查询者到适当的顶级域(TLD)服务器。根服务器并不直接提供域名到IP地址的具体映射,而是告诉查询者下一步应该询问哪个顶级域服务器。

  1. 顶级域(TLD)服务器

接收从根服务器转发来的查询请求,负责管理其下一级(即二级域)的域名解析,例如.com、.org、.net等通用顶级域以及国家和地区顶级域(ccTLD)。

  1. 权威域名服务器(Authoritative DNS Servers)

存储特定域的权威DNS记录,直接负责提供某个域名的最终解析结果。当一个域名的DNS记录发生更改时,这些更改会在权威服务器上进行。

  1. 本地缓存域名服务器(Local Caching DNS Servers)

有时也部署在企业网络或ISP内部,作为客户端的直接查询对象,以缓存之前查询过的域名记录,提高查询速度并减少对外部网络的流量需求。

在这里插入图片描述

综上所述,根域名服务器作为DNS查询路径的起始点,是整个域名解析流程的关键环节,而其他类型的DNS服务器则在其后各司其职,共同完成域名到IP地址的解析任务。

域名解析方式

递归查询(Recursive Query)

当一个客户端(如用户的计算机)向其配置的DNS递归解析器发出域名查询请求时,该解析器承担起查找完整答案的责任,并以最终的IP地址响应客户端。递归解析器会依次查询多个DNS服务器,直到找到最终的权威答案。在整个过程中,客户端只需发送一次查询请求,之后的工作由递归解析器“递归”地完成。

过程简述如下:

  • 客户端向递归解析器发送查询请求。
  • 递归解析器先查询本地缓存,若无结果,则向根域名服务器查询。
  • 根据根域名服务器的指引,递归解析器继续向相应的顶级域服务器查询,然后是二级域名服务器,直至找到权威域名服务器。
  • 权威服务器返回最终的IP地址给递归解析器。
  • 递归解析器将此信息返回给客户端,并可能缓存该结果以供将来使用。
    在这里插入图片描述

迭代查询(Iterative Query)

在迭代查询中,DNS服务器不会直接给出最终答案,而是每次回应客户端时提供下一步应该查询的DNS服务器的信息。因此,客户端需要自己负责后续的查询工作,一步步接近最终答案。

过程简述如下:

  • 客户端首先向本地DNS服务器(可能是递归解析器或迭代服务器)发起查询。
  • 如果本地服务器没有答案,它不会继续查询,而是直接告诉客户端应该去询问的下一个DNS服务器的地址(可能是根域名服务器)。
  • 客户端再向这个新的DNS服务器发送查询。
  • 该服务器如果也不能直接回答,会再次返回一个提示,告诉客户端接下来应该查询哪个服务器。
  • 这个过程重复,直到客户端联系到一个能提供权威答案的服务器。
    在这里插入图片描述

总结来说,递归查询中客户端只需要提出请求,剩余工作由DNS服务器完成;而在迭代查询中,客户端需要自己根据收到的提示一步步执行查询操作,直至找到最终答案。

域名的高速缓存

域名的高速缓存是DNS(域名系统)中一个重要的性能优化机制。它的工作原理如下:

当你的设备(比如电脑或手机)需要访问一个网站时,它会向DNS服务器发起请求,要求将网站的域名(如 example.com)转换为对应的IP地址。这个过程分为以下几个步骤:

  1. 查询本地缓存:首先,设备会检查自己的本地缓存中是否有该域名的解析记录。如果之前不久访问过该网站,解析记录可能还存储在本地,这样就可以直接使用而无需向外查询。
  1. 查询递归解析器:如果本地没有缓存,请求会转到递归解析器(通常是ISP提供的DNS服务器)。递归解析器同样会先查看自己的缓存。如果有,直接返回结果;如果没有,递归解析器会继续查询过程。
  1. 迭代查询至权威服务器:递归解析器随后会依次查询根域名服务器、顶级域名服务器(如.com)、二级域名服务器(如.example.com),直至找到负责该域名的权威DNS服务器。权威服务器会提供域名到IP的映射记录。
  1. 结果返回与缓存:一旦权威服务器提供了IP地址,递归解析器会将这个结果返回给初始请求者,并且通常会把这个解析结果在递归解析器上缓存一段时间,以便后续相同的查询可以更快响应。同时,发起查询的设备也会将结果缓存起来,以减少未来相同请求的解析时间。
  1. 缓存过期与刷新:缓存中的记录都有一个生存时间(Time to Live, TTL),过了这个时间,缓存记录就会被视为过期并被删除。下次再有相同的查询请求时,就需要重新进行DNS解析流程。

高速缓存的存在大大减少了对DNS系统根服务器和顶级域名服务器的压力,降低了网络延迟,提升了用户的上网体验。
在这里插入图片描述

相关文章:

计算机网络 —— 应用层(DNS域名系统)

计算机网络 —— 应用层(DNS域名系统) 什么是DNS域名的层次结构域名分类 域名服务器的分类域名解析方式递归查询(Recursive Query)迭代查询(Iterative Query)域名的高速缓存 我们今天来看DNS域名系统 什么…...

Linux--MQTT简介

一、简介 MQTT ( Message Queuing Telemetry Transport,消息队列遥测传输), 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样, MQTT 协议也是应用层协议,工作在 TCP/IP 四…...

VMware Workerstation开启虚拟机后,产生乱码名称日志文件

问题情况 如下图所示,我的虚拟机版本是16.1.2版本,每次在启动虚拟机之后,D盘目录下都会产生一个如图下所示的乱码名称文件。同时,虚拟机文件目录也是杂乱不堪,没有按照一台虚拟机对应一个文件夹的形式存在。 问题处理…...

Unity射击游戏开发教程:(27)创建带有百分比的状态栏

创建带有弹药数和推进器百分比的状态栏 在本文中,我将介绍如何创建带有分数和百分比文本的常规状态栏。 由于 Ammo Bar 将成为 UI 的一部分,因此我们需要向 Canvas 添加一个空的 GameObject 并将其重命名为 AmmoBar。我们需要一个文本和两个图像对象,它们是 AmmoBar 的父级。…...

Linux内存从0到1学习笔记(8.16 SMMU详解)---更新中

写在前面 前面博客已经了解过。SMMU是IOMMU在ARM架构上的实现。主要为了解决虚拟化环境中,GuestOS无法直接将连续的物理地址分配给硬件的问题。对于Hypervisor/GuestOS的虚拟化系统来说,所有的VM都运行在Hypervisor上,每一个VM独立运行一个O…...

标准盒模型和怪异盒模型的区别

CSS盒模型: 内容区(content)内边距(padding)边框(border)外边距(margin) 分为标准盒模型和IE盒模型/怪异盒模型 为了正确设置元素在所有浏览器中的宽度和高度&#xf…...

【第8章】如何利用ControlNet生成“可控画面”?(配置要求/一键安装/快速上手/生成第一张图)ComfyUI基础入门教程

这节我们来讲AI绘画领域中一个很重要的概念:ControlNet,看下如何让生成的画面更可控。 🎅什么是ControlNet? Stable Diffusion中的ControlNet是一种神经网络结构,它允许将额外的条件输入添加到预训练的图像扩散模型中,通过这种方式,ControlNet可以控制图像生成过程,…...

[qt] qt程序打包以及docker镜像打包

目录 一 环境准备: 1.1 qt环境 1.2 linuxdeplouqt打包工具 二 qt包发布: 2.1 搜索链接库 2.2 应用程序APP打包 2.3 发布 三 docker镜像包发布 3.1 环境准备 3.2 镜像生产脚本 3.3 加载镜像并运行docker容器 四 补充 4.1 时间不同步问题解决 一 环境准备: qt环境l…...

电脑屏幕监控软件有哪些?2025年监控软件排行榜

电脑屏幕监控软件有哪些?2025年监控软件排行榜 虽然现在还是2024年,但是有一些被广泛讨论和推荐的电脑屏幕监控软件,它们将在2025年异军突起,成为行业的引领者。 1.安企神软件: 功能全面的电脑屏幕监控软件&#xf…...

音视频主要概念

文章目录 常用的一些概念主要概念1主要概念2I帧P帧B帧 常用视频压缩算法 小结 常用的一些概念 主要概念1 视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数…...

AIGC全面介绍

AIGC(Artificial Intelligence and General Competitions)是一个专注于人工智能和综合能力竞赛的组织。AIGC的目标是促进人工智能和综合能力的发展,并为相关领域的学术研究和应用创新提供支持和平台。 AIGC主要致力于人工智能竞赛的组织、举…...

vscode中模糊搜索和替换

文章目录 调出搜索(快捷键)使用正则(快捷键)替换(快捷键)案例假设给定文本如下目标1:查找所有函数名目标2:替换所有函数名为hello目标3:给url增加查询字符串参数 调出搜索…...

人工智能入门学习教程分享

目录 1.首先安装python,官网地址:Download Python | Python.org,进入网址,点击Windows链接 2.下载完成之后,进行傻瓜式安装,如果不选安装路径,默认会安装到C:\Users\Administrator\AppData\Local\Programs\Python\Python38目录下。 3.配置python环境变量,即把python的…...

Django序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…...

Commons-io工具包与Hutool工具包

Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包 作用:提高I0流的开发效率。 FileUtils类(文件/文件夹相关) static void copyFile(File srcFile,File destFile) 复制文件 static void copyDirectory(File srcDir,File destDir) 复…...

ROS中Twist消息类型

Twist消息类型在Robot Operating System (ROS)中是一个常见的数据结构,主要用于描述物体的线性速度和角速度。这种消息类型在ROS的geometry_msgs包中定义,常用于机器人运动控制,尤其是当需要向机器人发布速度指令时。 Twist消息由两个Vector…...

Pixi.js学习 (四)鼠标跟随、元素组合与图片位控

目录 一、鼠标移动跟随 1.1 获取鼠标坐标 1.2 鼠标跟随 二、锚点、元素组合 2.1 锚点 2.2 元素组合 三、图片图层 四、实战 例题一:完成合金弹头人物交互 例题二:反恐重击瞄准和弹痕 例题一代码: 例题二代码: 总结 前言 为了提高作…...

Golang | Leetcode Golang题解之第139题单词拆分

题目&#xff1a; 题解&#xff1a; func wordBreak(s string, wordDict []string) bool {wordDictSet : make(map[string]bool)for _, w : range wordDict {wordDictSet[w] true}dp : make([]bool, len(s) 1)dp[0] truefor i : 1; i < len(s); i {for j : 0; j < i;…...

简单聊一下Oracle,MySQL,postgresql三种锁表的机制,行锁和表锁

MySQL&#xff1a; MySQL使用行级锁定和表级锁定。行级锁定允许多个会话同时写入表&#xff0c;适用于多用户、高并发和OLTP应用。表级锁定只允许一个会话一次更新表&#xff0c;适用于只读、主要读取或单用户应用。 比如mysql开启一个窗口执行 begin; update xc_county_a…...

Python的网络请求

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在上一节中多次提到了URL地址与下载网页&#xff0c;这两项是网络爬虫必备而又关键的功能&#xff0c;说到这两个功能必然会提到HTTP。本节将介绍在P…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...