环回设备是如何实现的?

环回设备是如何实现的?

环回网络接口

是完全用软件实现的虚拟网络设备。

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

据我所知,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 回复回来了。请注意,路由器可能无法很好地运行。

相关内容