专注、坚持

计算机网络实例(三)— ping 的过程

2022.03.13 by kingcos
Preface · 序
重学计算机基础知识。

ARP & ICMP

这里我们尝试 ping 一台位于同一个 Wi-Fi 局域网下的 iPhone 的 IP。在开始 ping 之前,首先需要打开 Wireshark(m1 芯片的 Mac 也可正常使用 Intel 版本的 Wireshark)并开启抓包,并在命令行中查询 ARP 缓存是否已经记录了这台 iPhone IP 的 MAC 地址,如果已经记录了,我们可以使用 sudo arp -d 命令强制删除记录:

➜  ~ arp -nla | grep 192.168.199.138
192.168.199.138         8a:3b:15:74:f5:3f 1m50s     1m51s          en0    1

➜  ~ sudo arp -d 192.168.199.138
192.168.199.138 (192.168.199.138) deleted

➜  ~ arp -nla | grep 192.168.199.138

接下来我们使用 ping 命令,并在 3 次后停止 ping 和 Wireshark 抓包,并再次查询 ARP 缓存:

➜  ~ ping 192.168.199.138
PING 192.168.199.138 (192.168.199.138): 56 data bytes
64 bytes from 192.168.199.138: icmp_seq=0 ttl=64 time=63.348 ms
64 bytes from 192.168.199.138: icmp_seq=1 ttl=64 time=175.668 ms
64 bytes from 192.168.199.138: icmp_seq=2 ttl=64 time=8.581 ms
^C
--- 192.168.199.138 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.581/82.532/175.668/69.549 ms

➜  ~ arp -nla | grep 192.168.199.138
192.168.199.138         8a:3b:15:74:f5:3f 2m39s     2m39s          en0    1

整体的流程如下图:

5

我们也可以在 Wireshark 中看到这一过程:

  • ARP:

  • ICMP:

ping 与 MTU

使用 ping -s 可以设置 IP 数据包大小(单位:字节):

➜  ~ ping apple.com -s 3800
PING apple.com (17.253.144.10): 3800 data bytes
3808 bytes from 17.253.144.10: icmp_seq=0 ttl=53 time=201.315 ms
^C
--- apple.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 201.315/201.315/201.315/0.000 ms

在 Wireshark 中抓包可以发现 3800 bytes 的 IP 数据包被分为三片传输。与上述图例中的分片偏移方式有所不同,这里是前两个片按照 MTU 1500 字节(去除首部即为 1480)的方式分片。

19

使用 ping -D 可以设置 IP 数据包不允许分片(Don’t Fragment),但若 IP 数据包长度大于 MTU 将不允许传输:

➜  ~ ping apple.com -s 3800 -D
PING apple.com (17.253.144.10): 3800 data bytes
ping: sendto: Message too long
Request timeout for icmp_seq 0
^C
--- apple.com ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss

使用 ping -m 可以设置 TTL,使用 ping -c 可以设置次数;当 TTL 为 1 时,最近的路由器网关会返回 TTL 过期:

➜  ~ ping kingcos.me -m 1 -c 1
PING kingcos.me (185.199.110.153): 56 data bytes
92 bytes from hiwifi.lan (192.168.199.1): Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 11a7   0 0000  01  01 f730 192.168.199.200  185.199.110.153


--- kingcos.me ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss

Reference