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
整体的流程如下图:
我们也可以在 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
)的方式分片。
使用 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