作为研究网络堆栈的一部分,我正在本地网络中进行各种实验。这是关于其中一个的问题。
在本地网络中,我有两台设备,地址为
192.168.1.25
和192.168.1.232
。我通过 SSH 从第一台设备连接到第二台设备(地址属于 wlo1
接口)。之后,在 tmux 会话中,我执行了命令:
sudo ip link add vvv_0 type dummy
ifconfig vvv_0 192.168.1.250
(此地址未分配给其他任何人)。
执行第二个命令后,与第二个设备的连接中断,一段时间后,SSH 会话自动结束,并显示
Broken pipe
消息。
尝试跑步时
ping 192.168.1.232
在第一台设备和命令上
sudo tcpdump icmp
第二次观察到以下情况: 在第一台设备上:
PING 192.168.1.232 (192.168.1.232): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
在第二台设备上(数据包基本被捕获):
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wlo1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
00:37:46.518117 IP MBP-Device > device-VivoBook-ASUSLaptop-X515JAB-X515JA: ICMP echo request, id 56678, seq 0, length 64
00:37:46.856042 IP MBP-Device > device-VivoBook-ASUSLaptop-X515JAB-X515JA: ICMP echo request, id 56678, seq 1, length 64
00:37:47.988090 IP MBP-Device > device-VivoBook-ASUSLaptop-X515JAB-X515JA: ICMP echo request, id 56678, seq 2, length 64
00:37:48.808157 IP MBP-Device > device-VivoBook-ASUSLaptop-X515JAB-X515JA: ICMP echo request, id 56678, seq 3, length 64
然后我直接在第二台设备上执行命令:
sudo ifconfig vvv_0 0.0.0.0
此后,我能够通过 SSH 从第一台设备重新连接到第二台设备。
第一台设备和第二台设备之间失去连接的原因可能是什么?
原因找到了。将
192.168.1.250/24
分配给 vvv_0
后,第二台设备上的路由表发生了更改。
ip route show
分配前输出:
default via 192.168.1.1 dev wlo1 proto dhcp metric 600
169.254.0.0/16 dev virbr0 scope link metric 1000 linkdown
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.232 metric 600
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
之后:
default via 192.168.1.1 dev wlo1 proto dhcp metric 600
169.254.0.0/16 dev virbr0 scope link metric 1000 linkdown
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev vvv_0 proto kernel scope link src 192.168.1.250
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.232 metric 600
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
因此,由于路由表,在
wlo1
上收到了 ICMP 回显请求数据包,并且通过 vvv_0
发送了 ICMP 回显应答数据包。