它完全通过路由表处理。
如果您想获得乐趣,可以很容易地在虚拟机中进行尝试。我对您尝试此操作的计算机上可能发生的任何事情概不负责。
首先让我们将子网掩码更改lo
为255.255.0.0:
sudo ip addr del 127.0.0.1/8 dev lo; sudo ip addr add 127.0.0.1/16 dev lo
现在让我们来看一下lo
:
$ ip -4 addr show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
inet 127.0.0.1/16 scope host lo
到127.1.1.1的数据包会去哪儿?
$ sudo ip route get 127.1.1.1
127.1.1.1 via 172.16.22.2 dev eth0 src 172.16.22.130
cache mtu 1500 advmss 1460 hoplimit 64
我们开始在另一个终端上执行ping操作:
$ ping 127.1.1.1
让我们监视eth0上的ICMP流量:
$ sudo tcpdump -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
07:28:42.060077 IP 172.16.22.130 > 127.1.1.1: ICMP echo request, id 5665, seq 4, length 64
07:28:43.059920 IP 172.16.22.130 > 127.1.1.1: ICMP echo request, id 5665, seq 5, length 64
我将练习lo
将远程计算机上的子网掩码更改为255.255.0.0并将IP地址127.1.1.1添加到其网络接口。您会看到ICMP回复回来。请注意,路由器可能无法正常播放。