DNS 详细过程 与 ICMP

news2025/3/4 21:36:09

🌈 个人主页: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) 快速了解

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

🦋 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

🌍 通过浏览器解析 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 的解析过程。现在总结一下,整个过程我画成了一个图,

DNS 解析过程

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

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

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

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

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

🦋 安装 dig 工具

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

# 对于基于 Red Hat 的系统(如 CentOS)
sudo yum install bind-utils

# 对于基于 Debian 的系统(如 Ubuntu)
sudo apt-get install dnsutils

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

🦋 dig 命令的基本用法

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

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

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 服务器等。

🦋 高级用法

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

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

dig www.baidu.com CNAME

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

dig baidu.com MX

🎀 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 缓存

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

🎀 1. 系统级 DNS 缓存

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

ipconfig /displaydns

🎀 2. 浏览器级 DNS 缓存

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

三:🔥 ICMP 协议快速了解

🦋 ICMP 协议简介

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

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

🦋 ICMP 的主要功能

ICMP 的主要功能包括:

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

在这里插入图片描述

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

🦋 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/

五:🔥 共勉

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

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

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

相关文章

学到什么记什么(25.3.3)

Upload-labs 今日重新做了一下文件上传漏洞&#xff0c;这里第一题之前采用直接抓包改后缀名.jpg为.php&#xff0c;再写入一句话<?php phpinfo();?>然后放行&#xff0c;得到图片地址&#xff08;可复制&#xff09;&#xff0c;本来直接访问图片地址即可得到敏感信息…

阿里云服务器部署项目笔记 实操 centos7.9

阿里云服务器部署项目笔记 实操 centos7.9 springboot vue elementUImysqlredis 相关的redis,mysql,nginx镜像,jdk 通过网盘分享的文件&#xff1a;docker镜像 链接: https://pan.baidu.com/s/15VwcWBP4Jy07xADuvylgQw?pwdm2g9 提取码: m2g9 配置环境 连接云服务器 安装…

win32汇编环境,窗口程序中使控件子类化的示例一

;运行效果 ;win32汇编环境,窗口程序中使编辑框控件子类化的示例一 ;窗口子类化&#xff0c;就是把某种控件&#xff0c;自已再打造一遍&#xff0c;加入自已的功能。比如弄个特殊形状的按钮&#xff0c;或只能输入特殊字符的编辑框 ;当然&#xff0c;一般来说&#xff0c;这都是…

多镜头视频生成、机器人抓取、扩散模型个性化 | Big Model weekly第58期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 GLM-4-Voice: Towards Intelligent and Human-Like End-to-End Spoken Chatbot 本文介绍了一种名为GLM-4-Voice的智能且类人化的端到端语音聊天机器人。它支持中文和英文&#xff0c;能够进行实时语音对话&a…

第十四届蓝桥杯:(二分算法)字串简写

这道题我们的做法是开两个vector&#xff0c;分别把a和b字符的下标存进去&#xff0c;然后遍历a字符&#xff0c;我们要求长度必须大于等于k&#xff0c;我们可以画个图&#xff0c;也就是说b的下标减a的下标必须大于等于k-1 也就是b的下标必须大于等于a的下标k-1 我们用二分找…

制服小程序的“滑手”:禁用页面左右滑动全攻略

哈哈&#xff0c;看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为&#xff01;&#x1f604; 没错&#xff0c;我们可以通过设置 disableScroll 属性来“管教”它&#xff0c;同时结合 CSS 样式让页面既禁得住横向“乱跑”&#xff0c;又能顺畅地上下滚动。你的方案已…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

02 HarmonyOS Next仪表盘案例详解(一):基础篇

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 1. 项目概述2. 技术架构2.1 文件结构2.2 ArkTS 语言特性装饰器的使用 3. 数据结构设计3.1 接口定义3.2 数据初始化 4. 生命周期与页面路由…

张岳教授:语言模型推理与泛化研究 | ICLR 2025 特邀报告与团队专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; AITIME 01 ICLR 2025预讲会特邀报告 AITIME 02 ICLR 2025预讲会西湖大学张岳老师实验室专场 01 AI生成文本的自动化检测 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

离散傅里叶变换(Discrete Fourier Transform, DFT)及其在图像处理中的应用

离散傅里叶变换&#xff08;DFT&#xff09;及其在图像处理中的应用 什么是离散傅里叶变换&#xff1f; 离散傅里叶变换&#xff08;Discrete Fourier Transform, DFT&#xff09;是一种强大的数学工具&#xff0c;用于将离散信号从时域&#xff08;或空间域&#xff09;转换…

记一次误禁用USB导致键盘鼠标失灵的修复过程

背景说明 在电脑上插入了一个USB hub&#xff0c;然后弹窗提示&#xff1a;“集线器端口上出现电涌”&#xff0c;点开让选择“重置”或者“关闭”&#xff0c;不小心点了关闭&#xff0c;结果这个usb口就被关了&#xff0c;再插任何东西都没反应&#xff0c;找了很多办法都恢…

Apache nifi demo 实验

Apache nifi 是个数据流系统&#xff0c;可以通过配置 自定义的流程来实现数据的转换。 比如可以配置一个流程&#xff0c;读取数据库里的数据&#xff0c;再转换&#xff0c;最后保存到本地文件。 这样可以来实现一些数据转换的操作&#xff0c;而不用特地编写程序来导入导出。…

Leetcode 57-插入区间

给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区间的开始和…

SpringCloud之Eureka、Ribbon、OpenFeign

目录1. SpringCloud Eureka&#xff08;服务注册与发现组件&#xff09;2. SpringCloud Ribbon&#xff08;负载均衡与服务调用组件&#xff09;3. SpringCloud OpenFeign&#xff08;负载均衡与服务调用组件&#xff09;SpringCloud&#xff1a;用于开发高度可扩展、高性能的分…

如何在MacOS 10.15上安装Docker Desktop

前文提到MacOS 10.15上无法通过Homebrew安装最新版本的docker&#xff0c;自然想到了去安装更早版本的docker。在MacOS上安装Docker Desktop比安装Docker Engine要更方便一些&#xff0c;具体原因可以自己搜索。通过Docker Desktop的Release notes得知最后一个支持MacOS 10.15的…

Moticon智能鞋垫传感器OpenGo:经济实用的运动科学研究与临床评估工具

Moticon智能鞋垫传感器OpenGo是运动科学研究领域的一款高性能工具&#xff0c;其无线设计和精准传感器为步态分析、平衡评估以及疾病诊断提供了稳定的数据支持。通过实时捕捉足底压力分布、动态变化及平衡状态&#xff0c;OpenGo 为研究人员和临床医生提供了深入洞察个体运动模…

打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天)

打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线&#xff08;第一天&#xff09; 前言最后 前言 说真的&#xff0c;用Unity工作这几年&#xff0c;经历的项目大大小小&#xff0c;对于场景的渲染算是有一定的经验&#xff0c;但涉及到HDRP高清渲染管线的了解&#xff0…

nlp第十节——LLM相关

一、模型蒸馏技术 本质上是从一个大模型蒸馏出小模型&#xff0c;从小模型训练出来的概率分布&#xff08;如自回归模型预测下一个字的概率分布&#xff09;分别与大模型预测的概率分布和ground label求loss。与大模型预测的概率分布用KL散度求loss&#xff0c;与ground label用…

Flutter管理项目实战

目录&#xff1a; 1、项目的构建和介绍 1、项目的构建和介绍 登录官网下载flutter的zip压缩包&#xff0c;解压到某个文件夹下即可&#xff0c;里面自带sdk的文件&#xff0c;无需再下载&#xff1b;创建项目时选定flutter的sdk的路径即可创建项目完成。 后续待完善&#xff0…

UniApp 中封装 HTTP 请求与 Token 管理(附Demo)

目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习&#xff0c;上述实战代码来源&#xff1a;芋道源码/yudao-mall-uniapp 该代码中&#xff0c;通过自定义 request 函数对 HTTP 请求进行了统一管理&#xff0c;并且结合了 Token 认证机制 请求封装原理&#xff…