当前位置: 首页 > 知识库问答 >
问题:

连接到哪个物理接口tun/tap设备

丌官嘉福
2023-03-14

我在理解tun/tap设备实际上是如何工作的方面有点问题,这里是wiki上的

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

好的,应用程序加密、压缩并通过TCP或UDP将其发送到另一方。

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

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

提前Ty

共有2个答案

宣熙云
2023-03-14

TUN/分接头未连接到任何物理接口(直接)。程序使用它们向虚拟实体(用户空间程序而非物理设备)写入/读取L2/L3数据包。

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

陈和裕
2023-03-14

没有内在的联系。

重要的是要理解,TUN/TAP或任何其他设备都不做路由。网络之间互连的协议(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无关,而是关于一般的知识产权路由。答案在很大程度上取决于您的具体配置。

 类似资料:
  • 问题内容: 我可以知道Java RMI连接使用哪个端口吗? 如果要使用RMI连接将Java客户端应用程序连接到Java服务器应用程序,我需要在服务器计算机上打开哪个端口,以便客户端应用程序可以连接到该端口? 我想在服务器计算机上设置防火墙,但是我不知道应该打开哪个端口。 问题答案: RMI通常无法在防火墙上工作,因为它使用不可预测的端口(它始于1099,然后再使用随机端口运行)。 在这些情况下,通

  • 问题内容: 到目前为止,我使用PyQt类所做的事情: 输出: 使用: 输出: 有没有办法区分它们? 可以使用普通的Python代替PyQt类吗? 如何获得IPv6地址? 问题答案: 您应该使用netifaces。它被设计为跨平台的,并且包含Windows专用代码以及可在不同UNIX / UNIX类平台上工作的各种通用版本。 从netifaces版本0.10.0开始,支持Python3。 使用摘要

  • 连接 通过 连接 Joint 组件,你可以把一个刚体对象附加到另一个对象上,从而建立固定连接。一般来说,你想要的是一个自由度有限的连接,因为 Unity 提供了不同的连接组件来实施不同的限制。 例如,一个 链条连接 Hinge Joint 允许围绕特定点和轴线旋转,而一个 弹簧连接 Spring Joint 则保持物体分离并稍微拉开距离。 2D 连接组件的在名字的末尾带有 2D,例如 Hinge

  • 我找不到关于TUN/TAP如何工作的任何信息。我想在两个主机之间创建一个简单的隧道,并在它们之间建立一个虚拟地址空间(类似于GRE隧道)。我不想要任何加密,或任何VPN。 我的问题是我甚至不知道TUN说的是什么。创建隧道接口并将数据发送到另一端时,侦听的“tun服务器”(隧道endpoint)使用的协议是什么?您连接到的端口是什么?

  • 我正在尝试创建一个充当vpn服务器的lxc容器。我正在尝试将tap/tun适配器添加到容器的设备列表中。我已尝试将以下行添加到lxc配置中。 这似乎并没有将其添加到容器中。我已尝试创建该文件夹 和 这也不管用。在容器内使用mknod会抛出一个错误 对我如何进行有什么想法吗?我仍然是新的VPN服务器和LXC容器。

  • 我使用生物识别设备已经有一段时间了。我一直能够连接生物识别设备并从中提取数据。但这一次我给了一个非常旧的设备(Pegasus PB-7),它连接到服务器。我只有远程桌面连接和生物识别设备的访问权限。我面临的问题是,远程桌面上已经安装了一个软件,当我提供Ip和端口时,它会在几秒钟内连接到它。但是,当我使用zkemSdk(我一直在使用它连接到其他设备)时,它不会连接,下面的方法会向我返回-7。 SDK