2

我在理解 tun/tap 设备的实际工作方式时遇到了一点问题,这是来自 wiki

  1. 虚拟网络设备如何实际工作?虚拟网络设备可以看作是一个简单的点对点或以太网设备,它不是从物理媒体接收数据包,而是从用户空间程序接收数据包,而不是通过物理媒体发送数据包,而是将数据包发送到用户空间程序。

假设您在 tap0 上配置了 IPX,那么每当内核向 tap0 发送一个 IPX 数据包时,它就会被传递给应用程序(例如 Vtun)。应用程序加密、压缩并通过 TCP 或 UDP 将其发送到另一端。另一端的应用程序对接收到的数据进行解压缩和解密并将数据包写入TAP设备,内核处理数据包就像它来自真实的物理设备一样。

Ok 应用程序加密、压缩并通过 TCP 或 UDP 将其发送到另一端。

如果您有 3 个物理连接每个路由到互联网,tun/tap 设备将使用哪个物理设备路由到互联网?

我很困惑,因为没有人真正谈论 tun/tap 接口和实际物理接口之间的真正关系

提前TY

4

2 回答 2

5

没有内在的关系。

重要的是要了解 TUN/TAP 或任何其他设备都不会进行路由。Internet 协议 (IP) 路由由 IP 堆栈处理,它无法真正区分 TAP 接口和真正的以太网接口。IP 堆栈从 TUN/TAP 接口接收的数据包由同一台机器上的程序生成,当 IP 堆栈将数据包路由出 TUN 或 TAP 接口时,它们仅由打开该接口的软件接收。将它们视为连接到软件的以太网端口,而不是真正的以太网。

您似乎很好地掌握了您引用的示例。Vtun(软件)打开 tap0 接口和一个套接字,然后像任何其他 IP 流量一样路由该套接字。Vtun 获取它在 tap0 上接收到的数据包,并使用加密和压缩对其进行封装,然后将它们推出套接字。该套接字另一端的另一个 Vtun 实例(可能在另一台机器上运行)从套接字解封装数据包并将它们推出其 TAP 接口以由其内核的网络层处理。

但是套接字根本不是 TAP 的一部分,它的路由方式取决于 IP 堆栈。如果 Vtun 的两个实例在同一系统上运行,则套接字将不需要路由出物理接口。在这样的用例中,可以完全删除套接字(以及加密和压缩)。您可以让一个程序在两个 TAP 接口之间愚蠢地复制数据。TUN/TAP 规范中没有任何内容需要套接字或物理接口;示例套接字是附带的,Vtun 程序的性质引入的一个功能。

所以你关于互联网的三个物理连接的问题与 TUN/TAP 无关,而是关于一般 IP 路由。那里的答案在很大程度上取决于您的具体配置。

于 2014-07-03T22:00:15.127 回答
1

TUN/TAP 没有(直接)连接到任何物理接口。程序使用它们将 L2/L3 数据包写入/读取到虚拟实体 - 用户空间程序而不是物理设备。

TUN 的一个用例如下:您在机器“RealDeal”上有一个 VM。VM 有一个 NIC(虚拟),它为 VM 处理以太网帧。但“RealDeal”会剥离所有以太网帧头并将 IP 数据包发送到上游。这是个问题。连接到网桥的 Tap 接口告诉操作系统,如果数据包是用于 VM 的,则不要剥离以太网标头。

于 2017-04-06T12:02:50.003 回答