是完全用软件实现的虚拟网络设备。
但这个实现实际上是如何完成的,又如何操作它呢?
据我所知,IP 在本地路由表中被标记为本地:
ip route show table local
发送到标记为本地的 IP 将触发环回设备。 但是,这种检测是纯粹通过路由表完成的还是也通过其他一些内核操作完成的?
编辑:我的最终目标是操纵循环设备配置,以便在我的笔记本电脑上的接口(两个 WLAN 适配器)之间发送数据报将导致网络中产生实际流量/数据报,而不是本地循环。接口 1 -> WLAN -> 接口 2 和非:接口 1 -> LOOP -> 接口 2
答案1
它完全通过路由表来处理。
如果您想玩得开心,在虚拟机中试用非常简单。对于您试用的机器上可能发生的任何事情,我概不负责。
首先让我们将的网络掩码更改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 回复回来了。请注意,路由器可能无法很好地运行。