工作每天都在用的 DNS 协议,你真的了解么?

news2025/1/24 5:42:55

♥  前  言

我们经常访问一些网址的时候,浏览器里输入类似于 www.baidu.com 这样的地址,那么在浏览器里输入这个地址---> 百度服务器给我们返回这个百度的页面,中间的过程是什么样的呢?

带着这个问题,我们一起来解析一下其中的过程。

1、域名和 IP 的关系

首先,类似于‘www.baidu.com’和‘www.sina.com.cn’这样的地址我们统一叫做域名。那么,使用域名访问后,这个请求直接就能到达对应的服务器么?

不是的!

在这个过程中是需要把这个域名转换为 IP 地址的,只有通过 IP 地址去寻找才可以找到这个服务器的位置,服务器才能收到请求。

为什么要在域名和 IP 之间进行这个转化操作呢?我们来回答两个问题:

  1. 那么我们为什么不直接用 IP 地址通信?

    因为 IP 地址对于用户来说不方便记忆,域名更加方便于用户记忆和使用,例如 www.baidu.com 这是百度的域名;www.sina.com.cn 就是新浪的域名,非常好理解和记忆;

  2. 那为什么不干脆直接用域名来找服务器?

这是因为域名的长度是不固定的,不便于计算机进行处理;而 IP 地址是固定长度的,如果是 IPv4 地址就是 32 位的,IPv6 的地址就是 128 位的,长度固定计算机更方便处理。

所以,总结一点就是 IP 地址是面向主机的,而域名则是面向用户的。所以我们需要将域名和 IP 地址进行相互转化。

2、域名转化为 IP 地址

hosts 文件

在最开始的时候,人们都用电脑的 hosts 文件进行域名和 IP 的转化。

在我们电脑 C:\Windows\System32\drivers\etc 路径下面有一个 host 文件,可以保存域名和 IP 的对应关系,如下图所示:

图中框起来的这行,就是把 120.24.89.47 这个 IP 地址映射为 www.tricy1.com 这个域名。当配置完成之后,就算 www.tricy1.com 这个域名不是一个真实注册的域名,在本台电脑里依然可以访问 www.tricy1.com 这域名就可以访问到这个 IP 地址对应的网站(柠檬班的测试派论坛)。

最初,通过互联网信息中心来管理这个 hosts 文件,如果有一个新的计算机想接入网络,或者某个计算 IP 变更都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期更新,才能上网。但是这样太麻烦了。为了更加简便的操作,就出现了 DNS 协议。

DNS 协议

DNS 协议,全称 Domain Name System,它是一个应用层协议,它建立在 UDP 或 TCP 协议之上,默认使用 53 号端口。

客户端默认通过 UDP 协议进行通讯,但是由于广域网中不适合传输过大的 UDP 数据包,因此规定当报文长度超过了 512 字节时,应转换为使用 TCP 协议进行数据传输。所以,DNS 协议是少有的既可以用 UDP 协议,又可以用 TCP 协议作为底层协议的应用层协议。

该协议的功能就是将人类可读的域名 (如,www.qq.com) 转换为机器可读的 IP 地址 (如,119.147.15.13)。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

图片

域名的层级结构:

如上图可见的域名中间是用点分割开的。这个每个点隔开的代表什么呢?

我们就需要了解一下域名是分层结构,域名服务器也是对应的层级结构,分别为根域名,顶级域名系统,二级域名系统,三级域名系统等如下图所示:

图片

全球共有 13 台根服务器,这 13 台根域名服务器中文名字分别为“A”至“M”,其中 10 台设置在美国,另外三台分别设置在英国、瑞典、日本。1 个主根服务器放置在美国,其余 12 个均为辅根服务器。

比如www.baidu.com这个域名的层级结构就如下:

com: 顶级域名。表示这是一个企业域名。

baidu: 二级域名,指公司名。

www: 网络协议(World Wide Web)

域名一般不能超过 5 级,从左到右域的级别变高,高的级域包含低的级域。域名在整个 Internet 中是唯一的,当高级子域名相同时,低级子域名不允许重复。

有了域名结构,还需要有一个东西去解析域名,那就是域名服务器。

域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

DNS 解析过程

图片

如上如所示,我们来解析一下 DNS 解析的过程:

用户希望通过客户端浏览器访问百度服务器-域名为 www.baidu.com:

  1. 用户在浏览器里输入 www.baidu.com 域名,默认优先查找浏览器缓存,看缓存中是否含有域名对应的 IP 地址

  2. 当浏览器中找不到时,会检测系统中的 Hosts 文件中是否有对应的 IP 地址

  3. 如果 hosts 里没有这个域名的映射,则查找本地 DNS 服务器;

  4. 若没有,通过 DNS 服务器就向根域名服务器中进行查找;根域名服务返回可供查询的顶级域名服务器 IP 地址;

  5. 顶级域名服务器返回 DNS 响应消息;

  6. 主机收到响应消息后,可以正常访问该服务器了;并将结果保存,以备下一次使用


而 DNS 协议的查询方法又分为以下两种:


递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以 DNS 客户机的身份向其它域名服务器查询,直到得到最终的 IP 地址告诉本机

图片

迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

图片

通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。

迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。

 

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

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

相关文章

答题题库模拟考试流量主小程序源码开发

一款专门为练题开发的题库答题考试模拟小程序,适用于多种用户群体,驾照考题、各种职业考试、英语四六级等等。接入流量主功能,运营方可以更灵活的配置收益方式。 小程序核心功能介绍: 1、多题型支持,判断题、单选题…

记一次Nacos线程数飙升排查

近日有个项目用到了Nacos做注册中心。运行一段时间发现Nacos服务的线程数达到了1k。这肯定是不正常的。 环境: Nacos-server 2.2.3docker-compose编排部署 nacos:image: "nacos/nacos-server:latest"environment:- JAVA_OPTS-XX:MetaspaceSize128m -XX:…

PLC-Recorder离线分析软件Ana里为什么不能显示变量的编号?

在PLC-Recorder在线软件里,大家可以在曲线上找到变量的编号(由通道编号、变量类型、同类型序号组成)。这个编号也是各软件识别变量的唯一标识。在变量和PLC很多时,可以方便地找到对应的PLC,如下: 有朋友问&…

【QGIS】Openstreetmap获取路网数据

目录 一、从Openstreetmap获取路网数据 1.1 根据城市名获取对应ID 1.2 根据城市ID获取路网数据 二、下载安装QGIS 2.1 下载QGIS 2.2 安装QGIS 2.3 页面语言设置 三、将获取到的osm文件拖入QGIS 一、从Openstreetmap获取路网数据 在大多数研究中,经常使用到的…

类欧笔记存档

电子版:https://blog.csdn.net/zhangtingxiqwq/article/details/132718582

【JavaScript手撕代码】instanceof

目录 instanceof手写详解 instanceof 手写 /* * param {Object} obj 需要判断的数据 * param {Object} constructor 这里请注意 * return {Boolean} **/ function myInstanceof(obj, constructor){if (![function, object].includes(typeof obj) || obj null) return falsel…

第 362 场 LeetCode 周赛题解

A 与车相交的点 数据范围小直接暴力枚举 class Solution { public:int numberOfPoints(vector <vector<int>> &nums) {unordered_set<int> vis;for (auto &p: nums)for (int i p[0]; i < p[1]; i)vis.insert(i);return vis.size();} };B 判断能否…

操作系统之课后习题——引论

&#xff08;一&#xff09;简答题 1.在计算机系统上配置OS的目标是什么&#xff1f;作用主要表现在哪几个方面&#xff1f; 答&#xff1a; 在计算机系统上配置OS&#xff0c;主要目标是实现&#xff1a;方便性、有效性、可扩充性和开放性&#xff1b; OS的作用主要表现在以下…

腾讯云CVM标准型S4服务器性能测评_CPU_网络收发包PPS详解

腾讯云服务器CVM标准型S4性能测评&#xff0c;包括S4云服务器CPU型号、处理器主频、网络收发包PPS、队列数、出入内网带宽能力性能参数说明&#xff0c;标准型 S4 实例是次新一代的标准型实例&#xff0c;CPU采用2.4GHz主频的Intel Xeon Skylake 6148处理器&#xff0c;腾讯云百…

2024浙大MEM提面结果已出,笔试过线率让人堪忧

众所周知&#xff0c;浙大MEM项目对于申请提前批面试并获得“优秀”资格的考生提供了“联考笔试达到国家线&#xff0c;政治成绩合格即可拟录取”的优惠政策。这一政策也成为近几年每年提面申请人数超过1000名考生参加提前批面试的重要推动力。今天&#xff0c;考生们终于迎来了…

字符编码基本介绍

基础概念 字符 任何一个文字或符号都是一个字符&#xff0c;不同的编码导致一个字符所占的内存不同。字符集 字符的集合就叫字符集。字符编码(charset encoding&#xff0c;简写为 encoding) 1. 定义字符集中的字符如何编码为特定的二进制数。2. 字符集和字符编码一般一一对…

企业架构LNMP学习笔记36

1、MySQL的负载均衡&#xff1a; 1&#xff09;在各个数据库授权远程登录用户&#xff1b; 2&#xff09;在各个数据库创建不同的识别数据库&#xff1b; 3&#xff09;配置转发规则&#xff1b; 4&#xff09;查看测试&#xff1b; 1、在各个数据库授权远程登录用户&#…

Qt6中使用Qt Charts

官方文档&#xff1a;Qt Charts 6.5.2 如果你是使用 CMake 构建的&#xff0c;则应在 CMakeLists.txt 中添加如下两行代码&#xff1a; find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(mytarget PRIVATE Qt6::Charts) 其中 mytarget 为你的项目名称。一共…

管理类联考——数学——汇总篇——知识点突破——浓度

&#x1f44a; 溶液溶质溶剂&#xff1b;浓度 溶质 溶液 \frac{溶质}{溶液} 溶液溶质​100% 溶质 溶质 溶剂 \frac{溶质}{溶质溶剂} 溶质溶剂溶质​100%。重要等量关系 ①浓度不变准则&#xff1a;将溶液分成若干份&#xff0c;每份的浓度相等&#xff0c;都等于原来溶液的浓…

Python教程(13)——Python运算符详解|算术运算符|比较运算符|逻辑运算符|位运算符

Python运算符 算术运算符比较运算符赋值运算符逻辑运算符逻辑运算类型逻辑运算本质 位运算符 Python的运算符是用于执行各种操作的符号或符号组合。它们用于操作数据并进行算术、比较、逻辑和其他类型的运算。我们所熟知的加减乘除也是运算符中的一种。Python提供了多种类型的运…

无涯教程-JavaScript - COUPNCD函数

描述 COUPNCD函数返回一个数字,该数字表示结算日期之后的下一个息票日期。 语法 COUPNCD (settlement, maturity, frequency, [basis])争论 Argument描述Required/OptionalSettlement 证券的结算日期。 证券结算日期是指在发行日期之后将证券交易给买方的日期。 RequiredMa…

spring入门之环境搭建!!!

1.创建一个maven项目。 不会配置maven环境的可以看这里&#xff1a;maven的下载安装与配置环境变量&#xff01;&#xff01;&#xff01;&#xff08;全网最详细&#xff09;_明天更新的博客-CSDN博客 2.引入依赖 <dependencies><dependency><groupId>or…

Python自动化测试框架【生成测试报告】

如何才能让用例自动运行完之后&#xff0c;生成一张直观可看易懂的测试报告呢&#xff1f; 小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前&#xff0c;我们需要下载HTMLTestRunner.py文件 点击HTMLTestRunner后进入的是一个写满代码的网页&#xff0c;小…

MySQL (2) DQL

目录 操作须知 1 单表查询 1.1 范围查询 1.2 模糊查询 1.3 去重查询 1.4 正则查询 1.5 替换查询 1.6 排序查询 1.7 聚合分组查询 1.7.1 聚合查询(只有1行) 1.7.2 分组查询(针对"聚合查询") 1.8 分页查询 1.9 拼接查询 2 多表查询 2.1 内连接 2.2 外连…

DT Paint Effects工具(一)

Paint Effects面板简介 Paint Effects工具 只是显示&#xff0c;和渲染无关 压力比例 物体绘画 模板笔刷设置 恢复默认设置 翻转管方向 平面绘画 共享笔刷 不同笔刷共享 选择笔刷 创建修改器 创建循环动画 笔刷弹簧 简化曲线路径 笔刷控制曲线 笔刷附件到曲线 生产压力曲线 自动…