虚拟设备有什么用?

虚拟设备有什么用?

我正在检查代码虚拟设备驱动程序的。该dummy_xmit()函数破坏数据包。我想问一下虚拟设备的真正用途是什么,还是它现在没有用,是一种遗留设备类型?

如果我使用虚拟设备类型进行以下测试:

$ sudo ip link add dummy1 type dummy
$ sudo ip addr add 2.2.2.2/24 dev dummy1
$ sudo ip link set dummy1 up

如果我 ping 2.2.2.2,它将进入环回接口。如果我 ping 2.2.2.10,它将转到该dummy_xmit()函数,但这会破坏数据包。如果数据包不被破坏的唯一情况是使用环回时,为什么不只使用环回呢?

答案1

虚拟界面确实有点奇特,但仍然很有用。它的主要优点是适用于独立主机和唯一 IP 网络连接是拨号链路的计算机。事实上,后者大多数时候也是独立主机。

独立主机的困境是它们只有一个活动的网络设备,即环回设备,通常分配的地址为 127.0.0.1。然而,在某些情况下,您需要将数据发送到本地主机的“官方”IP 地址。例如,考虑笔记本电脑 vlite,在本示例期间它已与任何网络断开连接。

vlite 上的应用程序现在可能想要将一些数据发送到同一主机上的另一个应用程序。在 /etc/hosts 中查找 vlite 会产生 IP 地址 191.72.1.65,因此应用程序会尝试发送到该地址。由于环回接口是当前机器上唯一活动的接口,内核不知道这个地址实际上指的是它自己!结果,内核丢弃数据报,并向应用程序返回错误。

这就是虚拟设备介入的地方。它通过简单地充当环回接口的另一个自我来解决这个困境。对于 vlite,您只需为其提供地址 191.72.1.65 并添加指向它的主机路由。然后,191.72.1.65 的每个数据报都将在本地传送。正确的调用是:

       # ifconfig dummy vlite
       # route add vlite

相关内容