DNS 详细过程 与 ICMP

ops/2025/3/4 8:42:38/

🌈 个人主页:Zfox_
🔥 系列专栏:Linux

目录

  • 一:🔥 DNS (Domain Name System) 快速了解
    • 🦋 DNS 背景
    • 🦋 域名简介
    • 🦋 真实地址查询 —— DNS
      • 🎀 域名的层级关系
      • 🎀 域名解析的工作流程:
  • 二:🔥 使用 `dig` 工具分析 DNS 过程
    • 🦋 安装 `dig` 工具
    • 🦋 `dig` 命令的基本用法
      • 🎀 1. 查询单个域名的 DNS 信息
      • 🎀 2. 查询结果的结构
      • 🎀 3. 解释查询结果
    • 🦋 高级用法
      • 🎀 1. 查询特定类型的 DNS 记录
      • 🎀 2. 指定 DNS 服务器
      • 🎀 3. 反向查询(IP 到域名)
      • 🎀 4. 控制输出结果
      • 🎀 5. 查看 TTL(生存时间)
      • 🎀 6. 跟踪查询过程
    • 🦋 DNS 缓存
      • 🎀 1. 系统级 DNS 缓存
      • 🎀 2. 浏览器级 DNS 缓存
  • 三:🔥 ICMP 协议快速了解
    • 🦋 ICMP 协议简介
    • 🦋 ICMP 的主要功能
    • 🦋 ICMP 的报文格式(选学)
    • 🦋 ping 命令
    • 🦋 一个值得注意的坑
    • 🦋 traceroute 命令
  • 四:🔥 浏览器上输入网址域名后点击回车,到底发生了什么?
  • 五:🔥 共勉

DNS_Domain_Name_System_font_10">一:🔥 DNS (Domain Name System) 快速了解

💬 DNS 是一整套从域名映射到 IP 的系统

DNS__13">🦋 DNS 背景

🦈 在 TCP/IP 协议中,通过 IP 地址端口号 来确定网络上的一台主机的一个程序。然而,IP 地址不方便记忆,因此人们发明了主机名(hostname),这是一种字符串形式的名称。为了描述主机名和 IP 地址之间的关系,最初使用了 hosts 文件。

Hosts 文件示例

最初,互联网信息中心(SRI-NIC)负责管理这个 hosts 文件:

  • 如果一台新计算机要接入网络,或者某台计算机的 IP 地址变更,都需要向信息中心申请更新 hosts 文件。
  • 其他计算机也需要定期下载更新版本的 hosts 文件,才能正确访问网络资源。

🫙 这种管理方式非常繁琐,因此 DNS 系统应运而生:

  • 一个组织的系统管理机构负责维护系统内每个主机的 IP 地址 和 主机名 的对应关系。
  • 当有新计算机接入网络时,将这些信息注册到数据库中。
  • 当用户输入域名时,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,返回对应的 IP 地址。

至今,我们的计算机上仍然保留了 hosts 文件。在域名解析过程中,系统会优先查找 hosts 文件的内容。

cat /etc/hosts

🦋 域名简介

🕸️ 主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。例如:

  • www.baidu.com
    • com:一级域名,表示这是一个企业域名。同级的还有 net网络提供商)、org(非盈利组织)等。
    • baidu:二级域名,公司名。
    • www:只是一种习惯用法。之前人们在使用域名时,往往命名成类似于 ftp.xxx.xxxwww.xxx.xxx 的格式,来表示主机支持的协议。

DNS_43">🦋 真实地址查询 —— DNS

🌍 通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。

比如我们打电话的时候,必须要知道对方的电话号码,但由于电话号码难以记忆,所以通常我们会将对方电话号 + 姓名保存在通讯录里。

所以,有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器。

🎀 域名的层级关系

DNS 中的域名都是用句点来分隔的,比如 www.server.com,这里的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越高。

毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),而中国则喜欢从大到小的顺序(如 XX 省 XX 市 XX 区 XX 街道)。

实际上域名最后还有一个点,比如 www.server.com.,这个最后的一个点代表根域名。

也就是,. 根域是在最顶层,它的下一层就是 .com 顶级域,再下面是 server.com

所以域名的层级关系类似一个树状结构:

  • 🫧 根 DNS 服务器(.)
  • 🫧 顶级域 DNS 服务器(.com)
  • 🫧 权威 DNS 服务器(server.com)

在这里插入图片描述

根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。

这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。

因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。

🎀 域名解析的工作流程:

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大,能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
  3. DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。"
  4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问:“老二,你能告诉我 www.server.com 的 IP 地址吗?”
  5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
  6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com 对应的 IP 是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 x.x.X.x 告诉本地 DNS
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

至此,我们完成了 DNS 的解析过程。现在总结一下,整个过程我画成了一个图,

<a class=DNS 解析过程" />

DNS 域名解析的过程蛮有意思的,整个过程就和我们日常生活中找人问路的过程类似,只指路不带路。

那是不是每次解析域名都要经过那么多的步骤呢?

当然不是了,还有缓存这个东西的嘛。

🛸 浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

DNS_font_101">二:🔥 使用 dig 工具分析 DNS 过程

🦋 安装 dig 工具

在 Linux 系统中,dig 是一个强大的 DNS 查询工具,通常需要手动安装。使用以下命令安装 dig

# 对于基于 Red Hat 的系统(如 CentOS)
sudo yum install bind-utils# 对于基于 Debian 的系统(如 Ubuntu)
sudo apt-get install dnsutils

安装完成后,就可以使用 dig 命令查看域名解析过程了。

🦋 dig 命令的基本用法

DNS__120">🎀 1. 查询单个域名的 DNS 信息

最简单的用法是直接查询一个域名的 DNS 信息。例如,查询 www.baidu.comDNS 记录:

dig www.baidu.com

🎀 2. 查询结果的结构

dig 命令的输出分为多个部分:

  1. 版本信息:显示 dig 的版本和命令参数。
  2. 查询状态:显示查询的状态(如 NOERROR 表示查询成功)。
  3. QUESTION SECTION:显示要查询的域名和记录类型。
  4. ANSWER SECTION:显示查询结果。
  5. 统计信息:显示查询时间、DNS 服务器地址等。

例如:

root@hcss-ecs-a9ee:~# dig www.baidu.com; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62911
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1;; QUESTION SECTION:
;www.baidu.com.			IN	A;; ANSWER SECTION:
www.baidu.com.		52	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	50	IN	A	183.2.172.177
www.a.shifen.com.	50	IN	A	183.2.172.17;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Mar 03 19:46:51 CST 2025
;; MSG SIZE  rcvd: 101

🎀 3. 解释查询结果

  • QUESTION SECTIONwww.baidu.com 的查询类型为 A(IPv4 地址)。
  • ANSWER SECTION
    • www.baidu.com 被解析为 www.a.shifen.com(CNAME 记录)。
    • www.a.shifen.com 被解析为两个 IP 地址:183.2.172.177183.2.172.17
  • 统计信息:查询时间、使用的 DNS 服务器等。

🦋 高级用法

DNS__175">🎀 1. 查询特定类型的 DNS 记录

dig 支持查询多种 DNS 记录类型。例如,查询 CNAME 记录:

dig www.baidu.com CNAME

查询 MX 记录(邮件交换记录):

dig baidu.com MX

DNS__189">🎀 2. 指定 DNS 服务器

默认情况下,dig 会使用系统配置的 DNS 服务器(如 /etc/resolv.conf 中的服务器)。如果需要指定一个特定的 DNS 服务器,可以使用 @ 符号:

dig @8.8.8.8 www.baidu.com

🎀 3. 反向查询(IP 到域名)

使用 -x 选项可以进行反向查询,将 IP 地址解析为域名:

dig -x 8.8.8.8 +short

🎀 4. 控制输出结果

dig 提供了多种选项来控制输出内容:

  • 精简输出+short,只显示查询结果。
  • 完整输出:默认显示所有信息。
  • 自定义输出:例如,只显示 ANSWER SECTION
dig www.baidu.com +noall +answer

🎀 5. 查看 TTL(生存时间)

TTL 表示 DNS 记录在缓存中的有效时间(单位:秒)。可以通过以下命令查看:

dig www.baidu.com +ttlid

🎀 6. 跟踪查询过程

使用 +trace 选项可以跟踪 DNS 查询的完整过程,从根域到最终结果:

dig www.baidu.com +trace

DNS__233">🦋 DNS 缓存

DNS 缓存可以提高查询效率,减少对外部 DNS 服务器的请求。以下是查看 DNS 缓存的方法:

DNS__237">🎀 1. 系统级 DNS 缓存

在 Windows 系统中,可以使用以下命令查看系统级 DNS 缓存:

ipconfig /displaydns

DNS__245">🎀 2. 浏览器级 DNS 缓存

浏览器也会缓存 DNS 记录。清除浏览器缓存的方法因浏览器而异,可以自行搜索相关操作。

ICMP_font_252">三:🔥 ICMP 协议快速了解

ICMP__254">🦋 ICMP 协议简介

✍️ ICMP(Internet Control Message Protocol ,互联网控制消息协议)是一个网络层协议,主要用于在网络中发送 控制消息 和 错误报告。它为 IP 协议提供了必要的补充功能,尤其是在网络调试和故障排查方面。

一个新搭建好的网络,往往需要先进行一个简单的测试来验证网络是否畅通。然而,IP 协议本身并不提供可靠传输机制。如果数据包在传输过程中丢失,IP 协议无法通知传输层丢包的原因。ICMP 正是为了解决这一问题而设计的。

ICMP__259">🦋 ICMP 的主要功能

ICMP 的主要功能包括:

  • 确认 IP 包是否成功到达目标地址:通过发送 ICMP Echo Request 和接收 ICMP Echo Reply,可以验证网络连通性。
  • 通知 IP 包在发送过程中被丢弃的原因:例如,目标不可达、超时、数据包过大等。
  • 辅助网络诊断ICMP 提供了多种报文类型,用于诊断网络问题。

在这里插入图片描述

ICMP 是基于 IP 协议工作的,但它并不是传输层的功能,因此仍然被归结为网络层协议。需要注意的是,ICMP 只能搭配 IPv4 使用。如果是 Pv6 的情况,则需要使用 ICMPv6

ICMP__271">🦋 ICMP 的报文格式(选学)

📰 关于报文格式, 我们并不打算重点关注, 大家稍微有个了解即可
在这里插入图片描述

ICMP 报文分为两类:

  1. 错误消息:用于通知发送方在传输过程中发生的错误,例如目标不可达、超时等。
  2. 查询消息:用于诊断和查询网络状态,例如 ICMP Echo RequestEcho Reply
    在这里插入图片描述

🦋 ping 命令

ping 是一个基于 ICMP 协议的常用网络工具,用于测试网络连通性。

ping www.example.com
  • ping 命令的作用

    • 验证网络连通性:通过发送 ICMP Echo Request 和接收 ICMP Echo Reply 来确认目标主机是否可达。
    • 统计响应时间:测量从发送请求到接收回复的时间,单位为毫秒。
    • 显示 TTL(Time To Live):IP 数据包的生存周期,表示数据包在网络中可以经过的最大跳数。
  • 工作原理

    • ping 命令会先发送一个 ICMP Echo Request 给目标主机。
    • 目标主机接收到请求后,会返回一个 ICMP Echo Reply
    • 如果目标主机不可达,中间的路由器可能会返回一个 ICMP 错误消息,例如“目标不可达”。
      在这里插入图片描述

🦋 一个值得注意的坑

  • 在面试中,面试官可能会问:“telnet 是 23 端口,ssh 是 22 端口,那么 ping 是什么端口?”

请注意,这是一个常见的陷阱问题 !

ping 命令基于 ICMP 协议,工作在网络层,而端口号是传输层的概念。ICMP 并不使用端口号,因此 ping 不涉及端口号。

🦋 traceroute 命令

traceroute 是另一个基于 ICMP 协议的工具,用于显示数据包从源主机到目标主机所经过的路径。

traceroute www.example.com

在这里插入图片描述

  • 工作原理
    • traceroute 通过发送一系列带有递增 TTL 的 ICMP Echo Request 或 UDP 数据包,记录每个跳数的路由器地址。
    • 每个中间路由器在 TTL 超时时会返回一个 ICMP Time Exceeded 消息,从而揭示路径上的路由器。
    • 最终目标主机返回一个 ICMP Echo Reply 或其他响应,表示路径追踪完成。

四:🔥 浏览器上输入网址域名后点击回车,到底发生了什么?

  • https://xiaolincoding.com/network/1_base/what_happen_url.html#%E5%AD%A4%E5%8D%95%E5%B0%8F%E5%BC%9F-http

  • https://blog.csdn.net/wuhenliushui/article/details/20038819/

五:🔥 共勉

😋 以上就是我对 DNSICMP 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述


http://www.ppmy.cn/ops/162999.html

相关文章

蓝耘元生代|调用Deepseek API提升数据集多样性:数据增强实践

文章目录 一、什么是Deepseek&#xff1f;二、数据增强的必要性三、 注册并登录蓝耘智算平台准备数据集调用Deepseek API 四、数据增强实战五、总结 在机器学习和深度学习领域&#xff0c;数据增强是一项非常重要的技术&#xff0c;尤其是在数据集较小的情况下。通过数据增强&a…

利用DeepSeek-Kimi打通Excel与PPT的链条,自动生成数据分析报告

通过DeepSeek在Excel生成结构化的数据分析报告&#xff0c;再借助Kimi的PPT助手将报告自动转换为专业的PPT演示文稿&#xff0c;从而实现从数据到展示的一站式解决方案。 案例数据 1.一键生成数据分析报告 在下载并安装“Excel矩阵”后&#xff0c;我们启用DeepSeek的右侧对话…

《论云原生架构及其应用》审题技巧 - 系统架构设计师

论云原生架构及其应用论文写作框架 一、考点概述 “论云原生架构及其应用”这一论题&#xff0c;主要考察了考生对云原生技术及其架构原则的深入理解与实践应用。论题的核心在于云原生架构的概念、设计原则及其在软件开发项目中的具体应用。首先&#xff0c;考生需对云原生架…

从零搭建微服务项目Pro(第1-2章——Quartz实现定时任务模块优化)

前言&#xff1a; 在企业项目中&#xff0c;往往有定时任务发布的需求&#xff0c;比如每天晚9点将今日数据备份一次&#xff0c;或每月一号将上月的销售数据邮件发送给对应的工作人员。显然这些操作不可能是人工到时间点调用一次接口&#xff0c;需要编写专门的模块完成任务的…

使用 Java 更新 Word 文档中的图表数据-超详细

使用 Java 更新 Word 文档中的图表数据 在日常的工作中&#xff0c;尤其是在数据分析和报告自动化的场景中&#xff0c;可能会遇到需要定期更新 Word 文档中的图表数据的需求。比如&#xff0c;生成数据报告时&#xff0c;我们需要在图表中更新一些动态的数据值。今天&#xf…

PHP函数与类:面向对象编程实践指南

PHP函数与类&#xff1a;面向对象编程实践指南 PHP的面向对象编程&#xff08;OOP&#xff09;能力使其成为构建可维护、可扩展Web应用的重要工具。本文从函数封装到类设计&#xff0c;系统讲解PHP面向对象编程的核心概念与实践技巧。 一、函数&#xff1a;代码复用的基本单元…

Unity小功能实现:鼠标点击移动物体

1、功能描述 当玩家点击鼠标时&#xff0c;场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。 2、实现步骤 创建Unity项目&#xff1a;首先&#xff0c;打开Unity并创建一个新的3D项目。 添加3D物体&#xff1a;在场景中创建一个3D物体&am…

生成一个日期时间序列,从‘2024-12-03‘开始,每小时递增 oracle 转为达梦

-------------------------------生成一个日期时间序列&#xff0c;从2024-12-03开始&#xff0c;每小时递增---------------------------- ---原oracle : SELECT to_date(2024-12-03, yyyy-mm-dd) (ROWNUM - 1) / 24 data_time FROM dual CO…