DNS 解析过程
文章目录
- 简介
- 特点
- 查询方式⚡️
- 1. 浏览器缓存
- 2. 系统缓存(hosts文件)
- 3. 路由器缓存
- 4. 本地域名服务器
- 5. 根域名服务器
- 6. 顶级域名服务器
- 7. 权限域名服务器
- 8. 本地域名服务器缓存并返回
- 9. 操作系统缓存并返回
- 10. 浏览器缓存并访问
- 流程图
 
- 总结
简介
DNS(Domain Names System),域名系统,是互联网一项服务,是将域名转换为IP地址。简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址。
-  IP 地址:一长串能够唯一地标记网络上的计算机的数字。 
-  域名:是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。 
-
域名
域名是一个具有层次的结构,从上到下一次为根域名、顶级域名、二级域名、三级域名…
 
例如 www.baidu.com:
- www为三级域名
- baidu为二级域名
- com为顶级域名
系统为用户做了兼容,域名末尾的根域名.一般不需要输入
在域名的每一层都会有一个域名服务器
除此之外,还有电脑默认的本地域名服务器
特点
-  分布式: DNS信息存储在全球各地的DNS服务器上,没有中央控制点。 这种分布式架构提高了系统的可靠性和容错性。 
-  层次化: DNS系统采用层次化的结构,将域名划分为多个级别(如根域、顶级域、二级域等)。 这种结构使得DNS系统易于管理和扩展。 
-  可扩展性: DNS系统支持添加新的域名和服务,而无需对整个系统进行大规模的修改。 此外,它还支持各种新的技术和协议(如IPv6和DNSSEC)。 
查询方式⚡️
1. 浏览器缓存
当用户请求一个域名时,浏览器首先会在其缓存中查找对应的IP地址
如果有,就直接返回结果;如果没有,则继续下一步
2. 系统缓存(hosts文件)
操作系统中的hosts文件也包含了一些域名到IP地址的映射。浏览器会检查这个文件,看是否有对应的IP地址
如果有,就直接返回结果;如果没有,则继续下一步
3. 路由器缓存
有些路由器也会缓存DNS解析的结果。当数据包经过路由器时,路由器会检查其缓存,看是否有对应的IP地址
如果有,就直接返回结果;如果没有,则继续下一步
4. 本地域名服务器
本地域名服务器(通常是ISP运营商提供的DNS服务器,也可以是用户自己设置的DNS服务器)是DNS解析过程中的重要环节
当其他缓存都没有找到对应的IP地址时,浏览器会向本地域名服务器发送查询请求
本地域名服务器会采用递归查询的方式,依次向根域名服务器、顶级域名服务器和权限域名服务器查询,直到找到对应的IP地址
5. 根域名服务器
根域名服务器是DNS系统的最顶层,负责管理顶级域名服务器的信息
当本地域名服务器向根域名服务器查询时,根域名服务器不会直接返回IP地址,而是返回相应的顶级域名服务器的地址
本地域名服务器 => 根域名服务器
6. 顶级域名服务器
当本地域名服务器向顶级域名服务器查询时,顶级域名服务器会返回相应的权限域名服务器的地址
本地域名服务器 => 顶级域名服务器
7. 权限域名服务器
当本地域名服务器向权限域名服务器查询时,权限域名服务器会返回目标域名的IP地址
本地域名服务器 => 权限域名服务器 => 获得IP
8. 本地域名服务器缓存并返回
本地域名服务器将查询到的IP地址缓存并返回给操作系统。
本地域名服务器缓存IP => 操作系统
9. 操作系统缓存并返回
操作系统会将IP地址缓存在本地并将IP地址返回给浏览器
操作系统缓存IP => 浏览器
10. 浏览器缓存并访问
浏览器拿到这个IP地址后,会缓存并用这个IP地址访问目标网站。
浏览器缓存IP => 访问IP
流程图

总结
- 向浏览器缓存中查找,如果没有则进行下一步;
- 向系统缓存(本地的hosts文件)中查找,如果没有则进行下一步;
- 向路由器缓存中查找,如果没有则进行下一步;
- 向本地域名服务器中递归查找,如果没有则进行下一步;
- 向根域名服务器中查找,返回顶级域名服务器的地址;
- 向顶级域名服务器中查找,返回权限域名服务器的地址;
- 向权限域名服务器中查找,返回目标IP地址;
- 本地域名服务器缓存IP并返回给操作系统;
- 操作系统缓存IP并返回给浏览器;
- 浏览器缓存IP并访问IP;
相关文章:
 
DNS 解析过程
文章目录 简介特点查询方式⚡️1. 浏览器缓存2. 系统缓存(hosts文件)3. 路由器缓存4. 本地域名服务器5. 根域名服务器6. 顶级域名服务器7. 权限域名服务器8. 本地域名服务器缓存并返回9. 操作系统缓存并返回10. 浏览器缓存并访问流程图 总结 简介 DNS&a…...
 
Golang | Leetcode Golang题解之第118题杨辉三角
题目: 题解: func generate(numRows int) [][]int {ans : make([][]int, numRows)for i : range ans {ans[i] make([]int, i1)ans[i][0] 1ans[i][i] 1for j : 1; j < i; j {ans[i][j] ans[i-1][j] ans[i-1][j-1]}}return ans }...
操作系统实验——线程与进程
如果代码或文章中,有什么错误或疑惑,欢迎交流沟通哦~ ## 进程与线程的区别 1. **各自定义**: 进程是操作系统进行资源分配和调度的一个独立单位,具有一定独立功能的程序关于某个数据集合的依次运行活动。 线程被称为轻量级的进程…...
 
最强端侧多模态模型MiniCPM-V 2.5,8B 参数,性能超越 GPT-4V 和 Gemini Pro
前言 近年来,人工智能领域掀起了一股大模型热潮,然而大模型的巨大参数量级和高昂的算力需求,限制了其在端侧设备上的应用。为了打破这一局限,面壁智能推出了 MiniCPM 模型家族,致力于打造高性能、低参数量的端侧模型。…...
 
Spring Boot中如何查询PGSQL分表后的数据
数据库用的pgsql,在表数据超过100w条的时候执行定时任务进行了分表,分表后表名命名为原的表名后面拼接时间,如原表名是card_device_trajectory_info,分表后拼接时间后得到card_device_trajectory_info_20240503,然后分…...
如何学习一个新技能
1. 提出想法 2.找到学习方法,学习路径 3.开始学 参考视频:如何成为超速学习者?快速学会任何新技能!_哔哩哔哩_bilibili...
sklearn之logistic回归
文章目录 logistic回归logit logistic回归 logistic regression被称之为logistic回归,对于logistic这个单词来说,他本身的翻译其实不太容易,比较有名的译法是对数几率回归,我也认为这种译法是比较合适的,虽然并非logi…...
 
Warning: Each child in a list should have a unique “key“ prop.
问题描述: 使用ProTable的时候,报错如下 原因分析: 根据报错内容可以分析出,表格数据缺少唯一key, <PaginationTablecolumns{columns}pagination{{pageSize: 10,current: 1,showSizeChanger: true,showQuickJum…...
 
JavaSE:StringBuilder和StringBuffer类
1、引言 在上一篇文章中,我们理解了字符串的常用方法,细心的同学大概已经发现,不管是将字符串中的字符转变为大写或小写,或是完成字符串的替换,又或是去除空白字符等等,只要涉及到字符串的修改,…...
C语言在线编程网站:探索编程的奥秘与深度
C语言在线编程网站:探索编程的奥秘与深度 在数字世界的浩瀚海洋中,编程已成为连接现实与虚拟的桥梁。而C语言,作为编程领域的经典之作,其深度与广度令无数探索者着迷。为了满足广大编程爱好者的需求,C语言在线编程网站…...
Android 之广播监听网络变化
网络状态变化监听帮助类 NetBroadcastReceiverHelper public class NetBroadcastReceiverHelper {private static final String TAG "NetBroadcastReceiverHelper";private static final String NET_CHANGE_ACTION "android.net.conn.CONNECTIVITY_CHANGE&qu…...
 
Hono 框架使用经验谈
Hono🔥是一个小型、快速并开源的 Serverless Web 框架,用 TypeScript 写就。它适用于任何JavaScript运行时:Cloudflare Workers,Fastly ComputeEdge,Deno,Bun,Vercel,Netlify&#x…...
mac 下配置mysql的全局环境变量
前言 如果你还没有安装mysql,请参考这篇文章手把手教你MAC本地数据库的安装与使用:mysql python (pymysql)【一】 - 知乎 正文 1.打开终端,输入命令”echo $SHELL“,显示当前的shell ⚠️本人使用的终端shell是zsh,如果你使用…...
 
小红书云原生 Kafka 技术剖析:分层存储与弹性伸缩
面对 Kafka 规模快速增长带来的成本、效率和稳定性挑战时,小红书大数据存储团队采取云原生架构实践:通过引入冷热数据分层存储、容器化技术以及自研的负载均衡服务「Balance Control」,成功实现了集群存储成本的显著降低、分钟级的集群弹性迁…...
Python实现解码二进制数据以匹配给定的C++结构体
要在Python中实现解码二进制数据以匹配给定的C结构体Ytest,你需要了解每个字段在结构体中的偏移量(由于结构体内存对齐,这些偏移量可能与字段的顺序和大小不完全对应)。不过,在没有指定内存对齐的情况下,我…...
 
实施阶段(2024年5月)
【项目活动1】斐波拉契数列第n项的值? 数学思想:第一项和第二项的值都为1,从第三项开始值为前两项的和。 方法一:迭代 迭代变量:f1和f2 迭代表达式:f1,f2f2,f1f2 计数器:i 迭代表达式运算…...
(delphi11最新学习资料) Object Pascal 学习笔记---第13章第3节 (弱引用是系统托管的 )
13.4.2 弱引用是系统托管的  弱引用的托管是一个非常重要的内容。换句话说,系统会在内存中保存一个弱引用列表,当对象被销毁时,系统会检查是否有任何弱引用指向该对象,如果有,系统会将实际引用赋值为 nil࿰…...
安装WordPress
第 1 步:下载并解压 wget https://wordpress.org/latest.tar.gz 然后使用以下命令提取包: tar -xzvf latest.tar.gz 第 2 步:创建数据库 比如数据库名称为wordpress,编码格式为 utf8mb4_general_ci 第 3 步:设置wp-con…...
 
【STL库源码剖析】list 简单实现
从此音尘各悄然 春山如黛草如烟 目录 list 的结点设计 list 的迭代器 list 的部分框架 迭代器的实现 容量相关相关函数 实现 insert 在指定位置插入 val 实现 push_back 在尾部进行插入 实现 erase 在指定位置删除 实现 pop_back 在尾部进行删除 实现 list 的头插、头删 实现…...
 
web前端框架设计第十一课-常用插件
web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,犹豫拖延将不断滋养恐惧...
 
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
 
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
 
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
 
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
