DNS 系统
DNS 系统诞生的背景
TCP/IP 中使用 IP 地址和端口号来确定网络上唯一的一台主机的一个程序. 但是 IP 地址不方便记忆. 于是人们发明了一种叫域名 的东西, 是一个字符串, 并且使用 hosts 文件 来描述域名和 IP 地址的关系。最初, 通过互连网信息中心 (SRI-NIC) 来管理这个 hosts 文件的.如果一个新计算机要接入网络, 或者某个计算机 IP 变更, 都需要到信息中心申请变更 hosts 文件.其他计算机也需要定期下载更新版本的 hosts 文件才能正确上网.这样就太麻烦了, 于是产生了DNS系统: 一个组织的系统管理机构, 维护系统内的每个主机的 IP 和域名的对应关系。至今, 我们的计算机上仍然保留了 hosts 文件(Linux 系统下在 /etc/hosts). 在域名解析的过程中仍然会优先查找 hosts 文件的内容.
域名简介
DNS 是一个**全球分布式数据库,**域名按层级组织,从右向左读(根 → 顶级域 → 二级域 → 子域):
www.google.com.
↑ ↑ ↑ ↑
子域 二级域 顶级域 根(省略)
| 层级 | 示例 | 说明 |
|---|---|---|
| 根域 | .(点) |
全球 13 组根服务器(实际上有上百台物理机器),所有 DNS 查询的起点 |
| 顶级域(TLD) | .com、.org、.cn、.uk |
通用 TLD(如 .com)和国家 TLD(如 .cn) |
| 二级域 | google、baidu |
域名所有者可自由注册的部分 |
| 子域 | www、mail |
二级域持有者自行划分 |
DNS 查询简介
以你在浏览器 url 输入框输入 www.baidu.com 为例:
用户电脑 向 递归解析器 (通常是 ISP 提供的 DNS 服务器,如
202.96.128.86或公共 DNS 如8.8.8.8)发出请求:"www.baidu.com的 IP 是多少?"递归解析器 从根服务器开始查:
问根服务器:
www.baidu.com在哪?根不直接回答,但告诉你:去找
.comTLD 服务器,它的地址是 X.X.X.X。问
.comTLD 服务器:www.baidu.com在哪?.com 告诉你:去找
baidu.com的权威服务器,它的地址是 Y.Y.Y.Y。问
baidu.com权威服务器:www.baidu.com的 IP 是什么?权威服务器给出最终答案:
www.baidu.com = 1.2.3.4递归解析器把结果 1.2.3.4 返回给用户电脑。
用户电脑的浏览器用这个 IP 地址访问百度服务器。
ICMP 协议
**ICMP 协议是一个网络层协议。**一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是 IP 协议并不提供可靠传输. 如果丢包了, IP 协议并不能通知传输层是否丢包以及丢包的原因。ICMP 正是提供这种功能的协议; ICMP 主要功能包括:
- 确认 IP 包是否成功到达目标地址.
- 通知在发送过程中 IP 包被丢弃的原因.
- ICMP 也是基于 IP 协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
- ICMP 只能搭配 IPv4 使用. 如果是 IPv6 的情况下, 需要用 ICMPv6;

ICMP的报文格式 (选学)

| 字段 | 长度 | 说明 |
|---|---|---|
| 类型 | 1 字节 | 消息类型(如 8=请求,0=应答,3=不可达,11=超时) |
| 代码 | 1 字节 | 同一类型下的细分(如"网络不可达"vs"主机不可达") |
| 校验和 | 2 字节 | 覆盖整个 ICMP 报文的校验 |
| 数据部分 | 可变 | 不同消息类型携带不同内容 |

ICMP 没有端口号
这是很多初学者容易搞混的点。端口号(如 80、443)是 TCP/UDP 的概念,而 ICMP 位于网络层,不需要端口号 。它通过 类型(Type) 和 代码(Code) 来区分不同的消息。
ping 指令
ICMP和 ping 指令 是网络故障排查中最常用的一对搭档。简单来说:ICMP 是协议,ping 是使用这个协议的工具。ping 本质上就是发送 ICMP Echo 请求(Type=8),并等待 Echo 应答(Type=0)。

ping 输出示例(以 Linux/Windows 为例)
$ ping www.baidu.com
PING www.baidu.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38: icmp_seq=1 ttl=52 time=12.3 ms
64 bytes from 14.215.177.38: icmp_seq=2 ttl=52 time=12.1 ms
64 bytes from 14.215.177.38: icmp_seq=3 ttl=52 time=12.4 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 12.1/12.2/12.4/0.1 ms
输出字段含义
| 字段 | 含义 |
|---|---|
icmp_seq |
请求序号,用于检查丢包 |
ttl |
生存时间(每跳减1),用于估算经过了多少路由器 |
time |
往返时间(RTT,Round-Trip Time),单位毫秒 |
0% packet loss |
丢包率,0% 表示网络稳定 |
rtt min/avg/max/mdev |
最小/平均/最大/标准差(抖动) |