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

时间:2014-02-04 07:57:26

标签: sockets networking tap tun

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

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

    假设您在tap0上配置了IPX,然后在   内核向tap0发送一个IPX包,它被传递给应用程序   (例如VTun)。应用程序加密,压缩和发送它   通过TCP或UDP到另一端。另一方面的申请   解压缩并解密收到的数据并将数据包写入   在TAP设备中,内核处理来自真实的数据包   物理设备。

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

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

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

事先提前

2 个答案:

答案 0 :(得分:4)

没有固有的关系。

重要的是要了解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路由有关。答案很大程度上取决于您的具体配置。

答案 1 :(得分:0)

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

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