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.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,犹豫拖延将不断滋养恐惧...
淄博性价比高的别墅开发哪家强
淄博这几年改善置业需求越来越旺,不少攒了钱想换带院子的别墅,却普遍犯难:要么主城核心区的别墅单价破两万,一套下来几百万,门槛太高;要么远郊的小开发商别墅,要么产权不清、品质缩水࿰…...
一文掌握【行为克隆 (Behavior Cloning)】的实战应用与局限
1. 行为克隆是什么?从模仿人类到AI决策 想象一下教小朋友骑自行车的情景。你不会先讲解力学原理,而是亲自示范如何保持平衡、如何踩踏板。孩子通过观察和模仿你的动作,逐渐掌握骑行技巧——这就是行为克隆(Behavior Cloning&#…...
STM32 SPI驱动W25Q128 Flash避坑指南:CubeMX配置与轮询读写实战
STM32 SPI驱动W25Q128 Flash避坑指南:CubeMX配置与轮询读写实战 嵌入式开发中,SPI接口的Flash存储器因其高速、稳定和易用性而广受欢迎。W25Q128作为一款128Mbit容量的SPI Flash芯片,在数据存储、固件升级等场景中扮演着重要角色。然而&#…...
Keil C51评估版SRC指令限制解析与解决方案
1. 问题现象与背景解析最近在调试一个基于8051架构的嵌入式项目时,遇到了一个令人困惑的编译错误。当我在Keil C51开发环境中使用SRC指令时,编译器突然报出致命错误(Fatal Error),但检查代码语法看起来完全正确。这个SRC指令是用来控制编译器…...
告别机械音!用‘小蜗语音工具1.9’制作有声小说和视频字幕的保姆级教程
告别机械音!用‘小蜗语音工具1.9’制作有声小说和视频字幕的保姆级教程 在内容创作爆炸的时代,有声小说和视频字幕已成为吸引用户注意力的关键。然而,传统语音合成工具常因生硬的机械音、单调的语调让作品失去灵魂。小蜗语音工具1.9的多角色对…...
2026届学术党必备的十大AI学术方案实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI工具运用越来越广泛,然而随之出现的信息过多无法承受以及决策变得复杂的状况&…...
Linux 新手必会 30 个高频基础命令(零基础可直接上手)
前言对于Linux新手来说,无需死记硬背所有命令,重点掌握这30个高频基础命令,就能完成日常90%的操作(目录切换、文件管理、系统查看等)。本文按“使用场景分类”,每个命令标注【用法示例新手提示】࿰…...
c++11的初见
列表初始化 c11以后支持{ }的列表初始可以使用{ }括住数据来进行初始化,使用{ }初始化时可以省略号{ }中的数据要匹配构造;使用{ }可以统一初始化方式。#include<iostream> #include<vector> using namespace std; int main(){vector<pai…...
从傅里叶到拉普拉斯:给信号处理新手的直观对比指南(附性质对照表)
从傅里叶到拉普拉斯:给信号处理新手的直观对比指南 信号处理领域的数学工具往往让初学者望而生畏。当你刚掌握傅里叶变换的基本概念,迎面而来的拉普拉斯变换又带来新的困惑。这两种变换究竟有何关联?为何工程师需要掌握两种看似相似的分析工具…...
芯片Signoff中的不确定性风险管理:工艺角、蒙特卡洛与签核验证
1. 项目概述:芯片Signoff中的不确定性风险管理在芯片设计的最后阶段,也就是我们常说的Signoff(签核),工程师们面临的最大挑战之一,就是如何与无处不在的“不确定性”共舞。这里的“不确定性”,专…...
