据介绍,环回网络接口“是完全用软件实现的虚拟网络设备”关于 Unix.SE 的另一个问题。
但这个实现实际上是如何完成的,以及如何操作它呢?
据我所知,IP在本地路由表中被标记为本地:
ip route show table local
发送到标记为本地的 IP 将触发环回设备。但是这种检测纯粹是通过路由表还是通过其他一些内核操作来完成的?
我的最终目标是操纵环路设备配置,以便在我的笔记本电脑上的两个 WLAN 适配器之间发送数据报将导致网络中的真实流量/数据报,并且不是在本地循环中。那是:
Interface 1 -> WLAN -> Interface 2
并不是:
Interface 1 -> LOOP -> Interface 2
答案1
在非常基本的层面上,它是一种纯粹用软件实现的设备。与虚拟机完全是软件的方式类似,环回也是如此(尽管使用完全不同的机制)。
通常,当接口发送数据包时,它最终会被发送到线路并刷新。另一方面,环回不是将传出数据包放入线路,而是将其移动到该接口的传入队列,然后像任何传入数据包一样进行处理。
在评估数据包时netfilter
,有两次做出路由决策的时间。一次用于传入数据包(例如,该数据包是否在正确的接口上收到?),一次用于传出数据包(例如,该数据包应在哪个接口上传输?)。当内核根据本地路由表检查数据包时会做出此路由决定。
答案2
路由表→设备→设备驱动程序(环回)
UPD。 (2012-10-20):最近遇到了 sysctl 的文档:«...
accept_local - BOOLEAN
Accept packets with local source addresses. In combination
with suitable routing, this can be used to direct packets
between two local interfaces over the wire and have them
accepted properly.
rp_filter must be set to a non-zero value in order for
accept_local to have an effect.
...»,所以它有望回答您问题的第二部分。