【Linux网络与网络编程】15.DNS与ICMP协议
1. DNS
1.1 DNS介绍
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的字符串,并使用 hosts 文件来描述主机名和 IP 地址的关系。最初, 通过互连网信息中心(SRI-NIC)来管理这个 hosts 文件的。
但是如果一个新计算机要接入网络或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网,这样就太麻烦了,于是产生了 DNS 系统。一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系。如果新计算机接入网络,将这个信息注册到数据库中。当用户输入域名时,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。至今, 我们的计算机上仍然保留了 hosts 文件,在域名解析的过程中仍然会优先查找 hosts 文件的内容。
DNS是基于UDP协议的一整套从域名映射到IP的系统。
1.2 域名解析过程
如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我 们所熟知的.com、.net、.cn 等通用域和.cn、.uk 等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如 http://baidu.com、http://taobao.com 等等二级域 名,它们基本上是归企业和运维人员管理。
1.3 使用dig工具分析DNS过程
caryon@ALiClode:~$ dig www.baidu.com; <<>> DiG 9.18.30-0ubuntu0.24.04.2-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7183
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.baidu.com. IN A;; ANSWER SECTION:
www.baidu.com. 916 IN CNAME www.a.shifen.com.
www.a.shifen.com. 61 IN A 220.181.111.1
www.a.shifen.com. 61 IN A 220.181.111.232;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Jun 24 20:39:12 CST 2025
;; MSG SIZE rcvd: 101
1.4 DNS缓存
在 Windows 系统中,可以使用 ipconfig /displaydns 命令来查看系统级别的 DNS 缓存
浏览器中输入url后发生的事情有什么?
1. 浏览器会将url解析出协议类型、域名、端口号和请求的资源所在路径。
2. DNS会对域名经行解析,先在缓存中查找,如果没有就要从根域名进行解析,将其转换为IP
3. 浏览器通过三次握手与服务器建立TCP连接,如果是https协议还需要进行TLS握手
4. 到此,浏览器就可以向服务端发起http请求
5. 服务端对浏览器的请求做出应答
6. 浏览器根据服务端的应答对界面做出渲染
2. ICMP协议
一个新搭建好的网络,往往需要先进行一个简单的测试来验证网络是否畅通,但是 IP 协议并不提供可靠传输,如果丢包了,IP 协议并不能通知传输层是否丢包以及丢包的原因。ICMP 协议正是一个提供这种检测功能的网络层协议。
ICMP协议可以确认 IP 包是否成功到达目标地址或者通知在发送过程中 IP 包被丢弃的原因。ICMP 也是基于 IP 协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议。ICMP 只能搭配 IPv4 使用,如果是 IPv6 的情况下,需要使用 ICMPv6
2.1 ICMP的报文格式
ICMP 大概分为两类报文: 一类是通知出错原因 一类是用于诊断查询
2.2 ping命令
caryon@ALiClode:~$ ping baidu.com
PING baidu.com (182.61.201.211) 56(84) bytes of data.
64 bytes from 182.61.201.211: icmp_seq=1 ttl=54 time=6.60 ms
64 bytes from 182.61.201.211: icmp_seq=2 ttl=54 time=6.59 ms
64 bytes from 182.61.201.211: icmp_seq=3 ttl=54 time=6.60 ms
64 bytes from 182.61.201.211: icmp_seq=4 ttl=54 time=6.58 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 6.582/6.593/6.604/0.009 ms
ping 命令不光能验证网络的连通性,同时也会统计响应时间和 TTL(IP 包中的 Time To Live, 生存周期)。
ping命令的工作原理
ping命令是基于ICMP协议的。ping 命令会先发送一个 ICMP Echo Request 给对端,对端接收到之后会返回一个 ICMP Echo Reply
2.3 traceroute 命令
traceroute 命令也是基于 ICMP 协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。
caryon@ALiClode:~$ traceroute baidu.com
traceroute to baidu.com (182.61.244.181), 30 hops max, 60 byte packets1 10.92.211.46 (10.92.211.46) 0.625 ms 0.653 ms 10.92.209.70 (10.92.209.70) 0.753 ms2 11.73.19.161 (11.73.19.161) 1.622 ms 11.73.19.137 (11.73.19.137) 11.829 ms 11.73.75.182 (11.73.75.182) 5.736 ms3 10.102.242.177 (10.102.242.177) 0.900 ms 10.216.138.42 (10.216.138.42) 9.601 ms 10.216.138.186 (10.216.138.186) 1.676 ms4 10.216.223.218 (10.216.223.218) 1.945 ms * 10.216.231.238 (10.216.231.238) 2.225 ms5 10.102.155.110 (10.102.155.110) 2.145 ms 10.102.154.230 (10.102.154.230) 2.866 ms 116.251.112.189 (116.251.112.189) 2.511 ms6 * * *7 61.148.154.113 (61.148.154.113) 3.996 ms 125.33.185.101 (125.33.185.101) 3.825 ms 3.600 ms8 bt-229-110.bta.net.cn (202.106.229.110) 4.319 ms 61.51.114.190 (61.51.114.190) 4.461 ms 61.51.114.198 (61.51.114.198) 4.690 ms9 220.206.193.182 (220.206.193.182) 5.410 ms 220.206.193.186 (220.206.193.186) 5.500 ms 220.206.193.182 (220.206.193.182) 5.882 ms
10 * 182.61.255.70 (182.61.255.70) 5.472 ms 182.61.255.74 (182.61.255.74) 6.164 ms
11 182.61.255.101 (182.61.255.101) 22.522 ms 182.61.217.169 (182.61.217.169) 22.098 ms 182.61.238.157 (182.61.238.157) 21.677 ms
12 182.61.251.166 (182.61.251.166) 21.462 ms 182.61.250.228 (182.61.250.228) 27.591 ms 182.61.250.232 (182.61.250.232) 37.304 ms
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *