目录DNS 系统ICMP 协议ping 指令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为例用户电脑向本地DNS服务器通常是 ISP 提供的 DNS 服务器如202.96.128.86或公共 DNS 如8.8.8.8发出请求“www.baidu.com的 IP 是多少”本地DNS服务器从根服务器开始查问根服务器“www.baidu.com的 IP 是多少”根不直接回答但告诉你这个域名归 .com 服务器管理去找.com服务器吧它的地址是 X.X.X.X。问.com服务器“www.baidu.com的 IP 是多少”.com 告诉你这个域名归 baidu.com 服务器管理它的地址是 Y.Y.Y.Y。问baidu.com服务器“www.baidu.com的 IP 是多少”baidu.com 服务器给出最终答案www.baidu.com 1.2.3.4本地DNS服务器把结果1.2.3.4 返回给用户电脑。用户电脑的浏览器用这个 IP 地址访问百度服务器。DNS 域名解析的过程使用的是 UDP 协议解析如果成功本地 DNS 服务器、客户端都会对 DNS 查询结果做缓存方便下次查询windows 可以在命令行输入ipconfig /displaydns查询本地 DNS 缓存。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 请求Type8并等待 Echo 应答Type0。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_seq1 ttl52 time12.3 ms 64 bytes from 14.215.177.38: icmp_seq2 ttl52 time12.1 ms 64 bytes from 14.215.177.38: icmp_seq3 ttl52 time12.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往返时间RTTRound-Trip Time单位毫秒0% packet loss丢包率0% 表示网络稳定rtt min/avg/max/mdev最小/平均/最大/标准差抖动traceroute 指令traceroute也是一个网络诊断工具也是使用 ICMP 协议的的工具。用于追踪数据包从你的计算机到目标主机如网站或 IP 地址所经过的路径。它能显示数据包在网络中每一跳hop的 IP 地址和响应时间帮助你了解网络延迟和路由问题。