tap/tun 是Linux内核 2.4.x 版本之后使用软件实现的虚拟网络设备,这类接口工作在内核中。

不同于普通的网络接口,没有物理硬件(因此也没有物理线路连接到这类接口)。

可以将tun/tap接口认为是一个普通的网络接口,当内核决定发送数据时,会将数据发送到连接到该接口上的用户空间的应用(而不是"线路"上)。

当一个程序附加到tun/tap接口上时,该程序将获得一个特定的文件描述符,从该描述符上可以获得接口上发送过来的数据

类似地,程序也可以往该描述符上发送数据(需要保证数据格式的正确性),然后这些数据会输入给tun/tap接口,内核中的tun/tap接口就像从线路上接收到数据一样。