tun和tap哪个性能好

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tun和tap哪个性能好相关的知识,希望对你有一定的参考价值。

参考技术A tun。
1、在Windows中,tun模式的流畅度比 TAP模式的流畅度好。
2、tun模式下的文件接收速度,比tap模式下的文件接收速度快。

通用TUN/TAP设备驱动

参考技术A 原文 Universal TUN/TAP device driver

TUN/TAP为用户空间提供分组接收和传输。既可以看作一个Point-to-Point设备,也可以看做一个Ethernet设备。它从用户空间程序接收分组,而不是从物理媒介;将分组写入用户空间程序而不是通过物理媒介。

一个程序打开/dev/net/tun字符型文件,并向内核发出ioctl()来注册一个网络设备。根据选项,这个网络设备将显示为tunXX或者tapXX。当程序关闭文件描述符时,这个网络设备和所有对应的路由都将关闭。

用户空间程序read/write IP数据包(通过tun)还是以太网帧(通过tap),取决于选择的设备类型。正在使用哪一个取决于ioctl()设置的flag。

http://vtun.sourceforge.net/tun 下的软件包包含两个简单的示例,介绍如何使用tun和tap设备。两个示例的工作原理都像在两个网络接口之间的桥一样。

另外,最好的例子来源于VTun( http://vtun.sourceforge.net ) :))

创建设备节点:

设置权限:

驱动程序模块自动加载:

确保内核启用了“内核模块加载器” - 模块自动加载支持。 内核应该在第一次访问时加载它。

手动加载:

后一种方法,每次当你需要使用模块的时候,你都需要加载它。另一种方法将在你打开/dev/net/tun的时候自动加载。

设备的名称 char *dev 是具有格式的字符串(e.g. "tun%d"),也可以是任何有效的网络设备名称。注意,字符指针将会被真实网络设备名覆盖。

如果 IFF_NO_PI 标志没有被设置,每一帧格式如下:

从3.8版开始,Linux支持多队列tuntap,它可以使用多个文件描述符(队列)来并行发送或接收数据包。 设备分配与以前相同,如果用户想要创建多个队列,则必须使用IFF_MULTI_QUEUE标志多次调用具有相同设备名称的TUNSETIFF。

char *dev 是设备的名称, queues 是要创建的队列数, fds 用于存储和返回创建给调用者的文件描述符(队列)。 每个文件描述符都作为一个队列的接口,可以被用户空间访问。

引入了一个新的 ioctl(TUNSETQUEUE) 来启用或禁用队列。 当用 IFF_DETACH_QUEUE 标志调用它时,队列被禁用。 当用 IFF_ATTACH_QUEUE 标志调用它时,队列被启用。 通过 TUNSETIFF 创建队列后,队列默认启用。

fd是我们想要启用或禁用的文件描述符(队列),当enable为真时,我们启用它,否则我们禁用它

以上是关于tun和tap哪个性能好的主要内容,如果未能解决你的问题,请参考以下文章

TUN/TAP设备浅析

硬货 | 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序

Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

Linux 虚拟化网络技术 — 虚拟二层网卡(Tap)与虚拟三层隧道网卡(Tun)

Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

TUN/TAP设备浅析(一) -- 原理浅析