回环设备是如何实现的?

回环网络接口

是一个完全由软件实现的虚拟网络设备。

但是这个实现是如何完成的,你又如何操作它呢?

据我所知,IP地址在本地路由表中被标记为本地地址:

ip route show table local  

发送到标记为本地的IP将触发回环设备。但是这个检测纯粹通过路由表来完成还是还有其他内核操作呢?
编辑:我的最终目标是操纵回环设备配置,这样在我的笔记本上在我的两个无线适配器之间发送数据报将导致真实的流量/数据报在网络中传输,而不是在本地循环中传输。 接口1 -> WLAN -> 接口2 而不是:接口1 -> 回环 -> 接口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回复返回。请注意,路由器可能不会表现友好。