DNS | ICMP

DNS(Domain Name System,域名系统)

1. 核心定位与价值

DNS 是 TCP/IP 协议栈中应用层的分布式域名解析系统 ,核心作用是将人类易记的域名(如www.baidu.com)映射为计算机可识别的 IP 地址(如 115.239.210.27)

TCP/IP 通信依赖 IP 地址定位主机,但 IP 地址(如 203.0.113.10)无意义、难记忆,而域名(如www.google.com)具备语义化、易传播的特点。DNS 本质是 "互联网的地址簿",解决了 "IP 难记、域名难解析" 的矛盾。

2. 发展背景:从 hosts 文件到 DNS 系统

在 DNS 出现前,网络依赖hosts文件管理域名与 IP 的映射:

  • 原理:每台主机本地存储一个文本文件,记录 "主机名 - IP" 对应关系(如host-a 172.20.2.1);
  • 弊端:
    1. 扩展性差:新主机接入或 IP 变更需手动更新所有主机的 hosts 文件;
    2. 维护成本高:依赖中心机构(SRI-NIC)统一管理,更新不及时。

为解决这些问题,DNS 系统应运而生:

  • 分布式管理:每个组织自行维护内部 "域名 - IP" 映射,注册到 DNS 数据库;
  • 自动查询:用户输入域名时,主机自动向 DNS 服务器查询,无需手动更新本地文件;
  • 兼容性保留:至今主机仍保留 hosts 文件,域名解析时优先查询 hosts 文件,再查询 DNS 服务器。

3. 域名的结构

域名采用分层结构 (树状结构),用.分隔各级域名,从右到左层级递增:

(1)结构拆解(以www.baidu.com为例)

域名部分 层级 含义
. 根域 域名系统的最顶层,全球共 13 组根服务器(由 ICANN 管理),默认省略不写
.com 顶级域(TLD) 最高级域名,分为两类:- 通用顶级域(.com 企业、.net 网络服务、.org 非盈利组织);- 国家 / 地区顶级域(.cn 中国、.uk 英国、.jp 日本)
baidu 二级域 企业 / 组织的唯一标识,需向域名注册商(如阿里云、万网)申请注册
www 三级域(主机名) 习惯用法,用于标识主机功能(如 www 代表 web 服务器、ftp 代表文件服务器),可自定义

(2)核心特点

  • 唯一性:同一顶级域下的二级域唯一(如.com 下只有一个 baidu);
  • 灵活性:三级及以下域名可由企业自行管理(如mail.baidu.commap.baidu.com)。

4. 域名解析过程:从域名到 IP 的查询链路

DNS 解析是 "递归查询 + 迭代查询" 结合的过程,核心是通过分层服务器逐级定位目标 IP,以下是详细步骤(以查询www.baidu.com为例):

(1)关键角色

客户端:发起域名查询的主机(如你的电脑、手机);

本地 DNS 服务器:用户设备(电脑、手机等)优先查询域名的 "就近 DNS 节点",相当于 "家门口的互联网地址簿管理员"------ 你查域名时,会先把请求发给它,它要么用自己的缓存直接返回结果,要么帮你去根服务器、顶级域服务器等逐级查询,最后把 IP 地址给你,一般运营商会提供、企业 / 学校内部也有自己维护的本地 DNS

根服务器:全球 13 组,存储所有顶级域服务器的 IP 地址;

顶级域服务器如.com 服务器):存储该顶级域下所有二级域服务器的 IP 地址;

权威服务器 (如baidu.com服务器):存储目标域名的最终 "域名 - IP" 映射(或 CNAME 映射)。

(2)解析步骤

客户端本地查询:客户端先查自身缓存(浏览器缓存、系统缓存),再查 hosts 文件,若有对应 IP 直接返回,无需后续步骤;

递归查询本地 DNS :若本地无缓存,客户端向本地 DNS 服务器发送 "递归查询请求"("帮我找到www.baidu.com的 IP");

本地 DNS 查询根服务器 :本地 DNS 向根服务器发送 "迭代查询请求"("www.baidu.com的 IP 是什么?"),根服务器返回.com顶级域服务器的 IP;

本地 DNS 查询顶级域服务器 :本地 DNS 向.com服务器发送请求,.com服务器返回baidu.com权威服务器的 IP;

本地 DNS 查询权威服务器 :本地 DNS 向baidu.com权威服务器发送请求,权威服务器返回解析结果(可能是 CNAME 记录或 IP);

例:文档中 dig 结果显示,www.baidu.com先解析为www.a.shifen.com(CNAME 记录,域名别名),再解析为 115.239.210.27 和 115.239.211.112(A 记录,IPv4 地址);

结果返回与缓存:本地 DNS 将最终 IP 返回给客户端,同时缓存该解析结果(过期时间由 TTL 控制),后续同类查询可直接复用缓存。

(3)核心概念补充

  • 递归查询:客户端→本地 DNS,"你帮我查到底",本地 DNS 需返回最终结果;
  • 迭代查询:本地 DNS→根服务器→顶级域服务器→权威服务器,"你告诉我下一个该查谁",每一步只返回下一级服务器地址;
  • TTL(Time To Live):解析结果的缓存有效期(如文档中为 40 秒、1057 秒),过期后需重新查询。

5. DNS 工具:dig

dig 是 Linux/Unix 下的 DNS 查询工具,可直观查看解析过程和结果,文档中给出了使用示例,以下是关键说明:

(1)安装与基础使用
  • 安装:yum install bind-utils(CentOS/RHEL)或apt install dnsutils(Ubuntu);
  • 基础命令:dig www.baidu.com(查询指定域名的 IPv4 地址)。
(2)结果拆解
复制代码
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.baidu.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41628
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION: 
;www.baidu.com. IN A 

;; ANSWER SECTION: 
www.baidu.com. 1057 IN CNAME www.a.shifen.com. 
www.a.shifen.com. 40 IN A 115.239.210.27
www.a.shifen.com. 40 IN A 115.239.211.112

;; Query time: 0 msec 
;; SERVER: 100.100.2.136#53(100.100.2.136) 
;; WHEN: Wed Sep 26 00:05:25 CST 2018
;; MSG SIZE rcvd: 90
  • HEADER 部分:status: NOERROR表示查询成功;qr=1表示是响应包,rd=1表示启用递归,ra=1表示服务器支持递归;
  • QUESTION SECTION:查询目标(www.baidu.com),IN A表示查询 IPv4 地址(A 记录);
  • ANSWER SECTION:解析结果(3 条记录),分别是 CNAME 别名和两个 A 记录,数字(1057、40)是 TTL 值;
  • 统计信息:Query time是查询耗时,SERVER是提供解析的 DNS 服务器 IP(端口 53 是 DNS 默认端口)。

6. DNS 缓存

DNS 缓存分为三级,目的是减少重复查询,提升解析效率:

  • 浏览器缓存:浏览器存储近期解析的域名,有效期较短(如几分钟到几小时);
  • 系统缓存:操作系统层面的缓存(Windows 用ipconfig /displaydns查看,Linux 用systemd-resolve --statistics查看);
  • 本地 DNS 服务器缓存:缓存时间最长(由 TTL 控制),是整个网络解析的核心缓存节点。

7.CNAME

CNAME 是 DNS(域名系统)里的 域名别名记录(全称 Canonical Name),核心是给一个域名 "起别名"------ 让一个域名(别名域名)直接指向另一个域名(主域名),而不是像 A 记录那样直接绑定到 IP 地址。

比如你常用的 "www.baidu.com",其实是个 "别名":通过 DNS 查询会发现,www.baidu.com的 CNAME 记录指向www.a.shifen.com(这是百度的主域名);之后再查www.a.shifen.com的 A 记录,才能得到具体的 IP 地址。相当于 "先找别名对应的主名字,再通过主名字找实际地址"。

简化多域名管理

如果你的网站有多个子域名(比如www.xxx.commail.xxx.comblog.xxx.com),都需要指向同一台服务器:

  • 不用给每个子域名都设置 A 记录(直接绑 IP),只需让所有子域名CNAME 指向主域名(如xxx.com
  • 后续服务器 IP 变更时,只需要修改主域名的 A 记录,所有别名域名会自动同步,不用逐个调整,大幅减少维护成本。

关键注意点

CNAME 记录不能和 A 记录同时存在:一个域名要么用 CNAME 指向其他域名,要么用 A 记录绑定 IP,二者只能选其一。

8.A记录是什么

A 记录是 DNS(域名系统)中最基础的IPv4 地址记录(全称 Address Record),核心作用是把域名直接绑定到具体的 IPv4 地址------ 当用户访问该域名时,DNS 服务器会直接返回对应的 IP 地址,让设备能定位到目标主机。

比如你有一个域名www.example.com,对应的服务器 IP 是192.168.1.100

  • 你在 DNS 服务商(如阿里云)里给www.example.com配置一条 A 记录,将其 "值" 设为192.168.1.100
  • 当用户访问www.example.com时,DNS 查询会直接返回192.168.1.100,用户设备就能直接连接到这台服务器。

CNAME出来后查出来多条A记录是怎么回事

"CNAME 出来后有多条 A 记录",核心逻辑是:CNAME 本身不会直接对应 A 记录,多条 A 记录是 "CNAME 指向的主域名" 的配置------ 解析流程是 "别名域名→主域名→多个 IP",多条A记录是主域名为了负载均衡 / 高可用配置的多 IP,不是 CNAME 直接生成的。

先理清解析的完整流程

以之前看到的 dig 查询结果为例:

  1. 你查询 www.baidu.com(别名域名),DNS 先返回一条CNAME 记录www.baidu.com → www.a.shifen.com(主域名);
  2. 因为 CNAME 只指向主域名,不直接对应 IP,所以 DNS 会自动 "接着查询主域名 www.a.shifen.com 的 A 记录";
  3. 主域名 www.a.shifen.com 配置了两条 A 记录 (比如 115.239.210.27115.239.211.112),所以最终返回这两条 A 记录。

你看到的 "CNAME + 两条 A 记录",是 "别名→主名→多 IP" 的解析结果叠加,两条 A 记录属于主域名,不是 CNAME 本身的记录

为什么主域名会配置两条 A 记录

主域名(比如www.a.shifen.com)设置多条 A 记录,本质是为了负载均衡和高可用,这是大型网站的常见配置:

  1. 负载均衡:两条 A 记录对应两台(或两组)相同的服务器,用户访问时,DNS 会随机返回其中一个 IP,把访问流量分散到不同服务器上 ------ 避免单台服务器压力过大(比如百度每天亿级访问,不可能靠一台服务器扛);
  2. 高可用 :如果其中一台服务器故障(比如 IP 115.239.210.27 对应的服务器宕机),DNS 会检测到不可用,自动把用户引导到正常的 IP(115.239.211.112),保证网站不会整体瘫痪。

不是CNAME 出来两条 A 记录",而是 "主域名的 A 记录被连带查询出来

很多人会误以为 "CNAME 对应了两条 A 记录",其实是误解:

  • CNAME 的作用只有一个:告诉 DNS"这个别名的主名是 XXX,去查 XXX 的 IP";
  • A 记录的作用:只负责 "域名→IP" 的直接映射,这里的两条 A 记录是主域名的配置,和 CNAME 本身无关;
  • 你看到的 "两条 A 记录",是 DNS 自动完成 "CNAME 跳转后,查询主域名 A 记录" 的结果,是解析流程的 "第二步输出"。

你看到的这种基于多 A 记录的 DNS 负载均衡是完全自动完成的,不需要你手动写任何代码 ------ 核心是 DNS 服务器内置了负载均衡策略,你只需要在 DNS 服务商后台配置好多条 A 记录即可。

具体怎么 "自动" 工作?

以百度的www.a.shifen.com配置两条 A 记录为例:

  1. 你只需要做配置(不用写代码) :在 DNS 服务商(比如阿里云、百度自己的 DNS 服务器)后台,给www.a.shifen.com添加两条 A 记录(对应两个 IP),这个操作是 "点按钮 / 填表单" 式的配置,不是写代码;
  2. DNS 服务器自动分发 IP :当有用户查询www.a.shifen.com的 IP 时,DNS 服务器会按内置策略(最常见的是轮询 ,也可能是随机、权重等),自动给不同用户返回不同的 IP:
    • 第一个用户来查 → 返回115.239.210.27
    • 第二个用户来查 → 返回115.239.211.112
    • 第三个用户来查 → 又返回115.239.210.27
    • 以此类推,自动把访问流量分散到不同 IP 对应的服务器上。

ICMP

ICMP(Internet Control Message Protocol,互联网控制消息协议)是网络层协议,基于 IP 协议工作(ICMP 报文封装在 IP 数据报中传输),核心作用是:

  • 诊断网络连通性(如验证主机是否可达);
  • 通知 IP 数据报传输中的错误(如丢包原因、目标不可达);
  • 补充 IP 协议的不足:IP 协议是 "无连接、不可靠" 的,不提供差错控制和状态反馈,ICMP 恰好弥补了这一缺陷。

2. 关键特性

  • 依赖 IP 传输:ICMP 报文本身不直接传输,需封装在 IP 数据报中(IP 头部的 "协议字段" 设为 1,表示承载的是 ICMP 报文);
  • 无端口号:ICMP 工作在网络层,他直接绕过了传输层,上面就是应用层,,端口号是传输层(TCP/UDP)的概念,因此 ICMP 不涉及端口;
  • 兼容性:仅适用于 IPv4,IPv6 中对应的替代协议是 ICMPv6。

3. ICMP 报文类型:诊断查询与错误通知

ICMP 报文分为两大类,文档中列出了核心类型码,以下是常用类型的详细说明:

类型码(十进制) 报文类型 类别 核心作用
0 回送应答(Echo Reply) 诊断查询 响应 "回送请求" 报文(如 ping 命令的应答包),表示目标主机可达
3 目标不可达(Destination Unreachable) 错误通知 当 IP 数据报无法送达目标时发送(如主机断电、端口未开放、路由不可达),细分 16 个子类型
8 回送请求(Echo Request) 诊断查询 主动探测目标主机是否可达(如 ping 命令发送的请求包)
11 超时(Time Exceeded) 错误通知 数据报 TTL(生存周期)减为 0 时发送(如路由环路导致 TTL 耗尽),或分片未按时组装完成
5 重定向(Redirect) 错误通知 路由器告知源主机 "存在更优路由",让主机更新路由表
18 地址子网应答(Address Mask Reply) 诊断查询 响应 "地址子网请求",返回目标网络的子网掩码

4. 常用 ICMP 工具:ping 与 traceroute

(1)ping 命令:验证网络连通性

ping 是最常用的 ICMP 工具,基于 "回送请求(类型 8)" 和 "回送应答(类型 0)" 实现:

工作原理
  1. 源主机发送 ICMP Echo Request 报文(携带 32 字节测试数据、序列号、时间戳);
  2. 目标主机收到后,返回 ICMP Echo Reply 报文(携带相同的测试数据);
  3. 源主机计算往返时间(RTT),并统计丢包率,判断网络连通性。
面试坑点
  • 问题:"ping 使用哪个端口?"
  • 答案:ping 基于 ICMP 协议(网络层),端口号是传输层(TCP/UDP)的概念,因此 ping不涉及任何端口
(2)traceroute 命令:追踪路由路径

traceroute(Windows 下为 tracert)是基于 ICMP 超时机制(类型 11)的工具,核心作用是显示源主机到目标主机的所有路由节点(路由器)

① 工作原理
  1. 源主机向目标主机发送一系列 IP 数据报,封装 ICMP Echo Request 报文;
  2. 第一个数据报的 TTL 设为 1,经过第一个路由器后 TTL 减为 0,路由器返回 ICMP 超时报文,源主机记录该路由器 IP;
  3. 第二个数据报的 TTL 设为 2,经过第二个路由器后 TTL 减为 0,路由器返回超时报文,源主机记录第二个路由器 IP;
  4. 重复上述过程,直到 TTL 足够大,数据报到达目标主机,目标主机返回 ICMP Echo Reply 报文,追踪结束。
相关推荐
乐迪信息2 小时前
乐迪信息:智能识别船舶种类的AI解决方案
大数据·网络·人工智能·算法·无人机
boneStudent2 小时前
STM32L476 LoRaWAN网关项目分享
服务器·网络·stm32
Linux蓝魔2 小时前
内网搭建阿里源的centos7系统源arm和x86
linux·运维·服务器
fo安方2 小时前
软考~系统规划与管理师考试——真题篇——章节——第5章 应用系统规划——解析版
java·运维·网络
wechat_Neal2 小时前
车载以太网技术全景-TCP/IP 协议栈篇
网络·网络协议·tcp/ip
独行soc2 小时前
2026年渗透测试面试题总结-1(题目+回答)
android·开发语言·网络·安全·web安全·渗透测试·php
qiuiuiu4132 小时前
正点原子RK3568学习日志21-实验1-字符设备点亮led
linux·学习
fai厅的秃头姐!2 小时前
01-python基础-day01Linux基础
linux
无小道3 小时前
OS中的线程
linux·线程·进程·os·线程库·用户级线程库·线程使用