Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 连接到哪个物理接口tun/tap设备_Sockets_Networking_Tap_Tun - Fatal编程技术网

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

Sockets 连接到哪个物理接口tun/tap设备,sockets,networking,tap,tun,Sockets,Networking,Tap,Tun,我在理解tun/tap设备实际上是如何工作的方面有点问题,这里是wiki上的 虚拟网络设备实际上是如何工作的?虚拟网络设备可以看作是简单的点对点或以太网设备, 它不是从物理媒体接收数据包,而是接收 它们来自用户空间程序,而不是通过 物理媒体将它们发送到用户空间程序 假设您在tap0上配置了IPX,那么 内核向tap0发送一个IPX数据包,并将其传递给应用程序 (例如VTun)。应用程序对其进行加密、压缩和发送 通过TCP或UDP连接到另一端。另一方的应用程序 对接收到的数据进行解压缩和解密,并将

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

  • 虚拟网络设备实际上是如何工作的?虚拟网络设备可以看作是简单的点对点或以太网设备, 它不是从物理媒体接收数据包,而是接收 它们来自用户空间程序,而不是通过 物理媒体将它们发送到用户空间程序 假设您在tap0上配置了IPX,那么 内核向tap0发送一个IPX数据包,并将其传递给应用程序 (例如VTun)。应用程序对其进行加密、压缩和发送 通过TCP或UDP连接到另一端。另一方的应用程序 对接收到的数据进行解压缩和解密,并将数据包写入 TAP设备,内核处理数据包,就像它来自真实的数据包一样 物理设备

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

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

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


    提前完成任务

    没有内在联系

    重要的是要了解,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程序的性质引入的特性


    因此,您关于三个到internet的物理连接的问题与TUN/TAP无关,而是关于一般IP路由。答案在很大程度上取决于您的具体配置。

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

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

    非常感谢,最近,我更仔细地研究了openvpn代码,我发现openvpn软件本身就是一个将绑定到以太网接口的人,从openvpn接收一个数据包,对其进行解密,然后将其直接写入相关的tun/tab设备,然后当操作系统回复时(使用任何软件)将向该tun/tab发送流量openvpn将直接从tun/tab设备读取数据,对其进行加密和压缩,然后用openvpn报头将其封装,然后将其发送到第一次接收流量的绑定接口。