环回设备如何实现?


8

回送网络接口

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

但是,该实现实际上是如何完成的,以及如何操作呢?

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

ip route show table local  

发送到标记为本地的IP将触发回送设备。 但是,这种检测是完全通过路由表还是通过其他一些内核操作完成的?

编辑:我的最终目标是操纵环路设备的配置,以便在我的笔记本电脑上的接口(两个wlan适配器)之间发送数据报将导致网络中的实际流量/数据报,而不是本地环路。接口1-> WLAN->接口2而不是:接口1-> LOOP->接口2

Answers:


5

它完全通过路由表处理。

如果您想获得乐趣,可以很容易地在虚拟机中进行尝试。我对您尝试此操作的计算机上可能发生的任何事情概不负责。

首先让我们将子网掩码更改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回复回来。请注意,路由器可能无法正常播放。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.