Linux虚拟网络设备之Tun/Tap

TUN/TAP介绍

在计算机网络中,TUNTAP是操作系统内核中的虚拟网络设备,不同于普通靠硬件的网路板卡实现的设备,这些虚拟的网络设备全部由软件实现,并向运行与操作系统上的软件提供与硬件网络设备完全相同的功能。
TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间    的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递数据包,从而模拟从外部接受数据的过程。
 
FROM WIKI TUN/TAP

TUN/TAP驱动工作原理

作为虚拟网卡驱动,Tun/Tap驱动程序的数据接收和发送并不直接与真实网卡打交道,而是通过用户态转发。在linux中要实现核心态和用户态的交互,有多种方式

Tun/Tap就是利用设备文件来实现用户态和核心态的数据交互

从结构上来说,TUN/TAP驱动并不单纯的是实现网卡驱动,同时还实现了字符设备驱动部分。以字符设备的方式连接用户态和核心态

Tun/tap驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自TCP/IP协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,而字符驱动部分则将网络分包在内核与用户态之间传送,模拟物理链路的数据接收和发送。Tun/tap驱动很好的实现了两种驱动的结合。

Tun/Tap设备提供的虚拟网卡驱动,从tcp/ip协议栈的角度而言,它与真实网卡驱动别没区别。从驱动程序的角度 来说,它与真实网卡的不同表现在tun/tap设备获取的数据不是来自物理链路层,而是来自用户区,Tun/Tap设备驱动通过字符文件来实现数据从用户区的获取。发送数据时tun/tap设备也不是发送到物理链路,而是通过字符设备发送到用户区,再由用户区程序通过其他渠道发送。

使用场景

tun/tap设备的用处是将协议栈中的部分数据包转发给用户空间的应用程序,给用户空间的程序一个处理数据包的机会。于是比较常用的数据压缩,加密等功能就可以在应用程序里面做进去,tun/tap设备最常用的场景是VPN,包括tunnel以及应用层的IPSec等。

参考