在计算机网络中,tun与tap是操作系统内核中的虚拟网络设备。不同于普通靠硬件网络适配器实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
tun/tap是什么?
tun是网络层的虚拟网络设备,可以收发第三层数据报文包,如IP封包,因此常用于一些点对点IP隧道,例如OpenVPN,IPSec等。

tap是链路层的虚拟网络设备,等同于一个以太网设备,它可以收发第二层数据报文包,如以太网数据帧。Tap最常见的用途就是做为虚拟机的网卡,因为它和普通的物理网卡更加相近,也经常用作普通机器的虚拟网卡。

如何操作tun/tap?
Linux tun/tap可以通过网络接口和字符设备两种方式进行操作。

当应用程序使用标准网络接口socket API操作tun/tap设备时,和操作一个真实网卡无异。

当应用程序使用字符设备操作tun/tap设备时,字符设备即充当了用户空间和内核空间的桥梁直接读写二层或三层的数据报文。在 Linux 内核 2.6.x 之后的版本中,tun/tap 对应的字符设备文件分别为:

tun:/dev/net/tun
tap:/dev/tap0
当应用程序打开字符设备时,系统会自动创建对应的虚拟设备接口,一般以tunX和tapX方式命名,虚拟设备接口创建成功后,可以为其配置IP、MAC地址、路由等。当一切配置完毕,应用程序通过此字符文件设备写入IP封包或以太网数据帧,tun/tap的驱动程序会将数据报文直接发送到内核空间,内核空间收到数据后再交给系统的网络协议栈进行处理,最后网络协议栈选择合适的物理网卡将其发出,到此发送流程完成。而物理网卡收到数据报文时会交给网络协议栈进行处理,网络协议栈匹配判断之后通过tun/tap的驱动程序将数据报文原封不动的写入到字符设备上,应用程序从字符设备上读取到IP封包或以太网数据帧,最后进行相应的处理,收取流程完成。

注意:当应用程序关闭字符设备时,系统也会自动删除对应的虚拟设备接口,并且会删除掉创建的路由等信息。
tun/tap的区别
tun/tap 虽然工作原理一致,但是工作的层次不一样。

tun是三层网络设备,收发的是IP层数据包,无法处理以太网数据帧,例如OpenVPN的路由模式就是使用了tun网络设备,OpenVPN Server重新规划了一个网段,所有的客户端都会获取到该网段下的一个IP,并且会添加对应的路由规则,而客户端与目标机器产生的数据报文都要经过OpenVPN网关才能转发。

tap是二层网络设备,收发以太网数据帧,拥有MAC层的功能,可以和物理网卡通过网桥相连,组成一个二层网络。例如OpenVPN的桥接模式可以从外部打一条隧道到本地网络。进来的机器就像本地的机器一样参与通讯,丝毫看不出这些机器是在远程。如果你有使用过虚拟机的经验,桥接模式也是一种十分常见的网络方案,虚拟机会分配到和宿主机器同网段的IP,其他同网段的机器也可以通过网络访问到这台虚拟机。

使用方式
Linux 提供了一些命令行程序方便我们来创建持久化的tun/tap设备,但是如果没有应用程序打开对应的文件描述符,tun/tap的状态一直会是DOWN,还好的是这并不会影响我们把它当作普通网卡去使用。

使用ip tuntap help查看使用帮助

Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]
[ mode { tun | tap } ] [ user USER ] [ group GROUP ]
[ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]

Where: USER := { STRING | NUMBER }
GROUP := { STRING | NUMBER }
示例

创建 tap

ip tuntap add dev tap0 mode tap

创建 tun

ip tuntap add dev tun0 mode tun

删除 tap

ip tuntap del dev tap0 mode tap

删除 tun

ip tuntap del dev tun0 mode tun
tun/tap 设备创建成功后可以当作普通的网卡一样使用,因此我们也可以通过ip link命令来操作它。

例如使用ip link命令也可以删除tun/tap设备

ip link del tap0
ip link del tun0
编辑于 2021-04-20 22:0

Linux tun:tap 详解相关推荐

  1. linux文件权限详解

    linux文件权限详解 一.文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限: ...

  2. Linux磁盘阵列技术详解(二)--raid 1创建

    我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...

  3. linux mingetty 命令详解

    linux mingetty 命令详解 功能说明:精简版的getty. 语 法:mingetty [--long-hostname][--noclear][tty] 补充说明:mingetty适用于本 ...

  4. linux zip 命令详解

    功能说明:压缩文件.  语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期 ...

  5. SVN的Windows和Linux客户端操作详解

    SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...

  6. linux zipinfo 命令详解

    linux zipinfo 命令详解 功能说明:列出压缩文件信息. 语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本样式>] 补充说明:执行zi ...

  7. Linux chkconfig命令详解

    Linux chkconfig命令详解 (2011-03-07 15:49:04) 转载 标签: linux shell chkconfig 杂谈 分类: 工作*Linux chkconfig:    ...

  8. linux uname 命令详解

    linux uname 命令详解 功能说明:显示系统信息. 语 法:uname [-amnrsv][--help][--version] 补充说明:uname可显示电脑以及操作系统的相关信息. 参 数 ...

  9. linux mread 命令详解

    linux mread 命令详解 功能说明:将MS-DOS文件复制到Linux/Unix的目录中. 语 法:mread [MS-DOS文件...][Linux文件或目录] 补充说明:mread为mto ...

最新文章

  1. hive中如何控制mapper的数量
  2. SAP用户权限控制大解析及权限进阶分析
  3. oracle9I收缩表,Oracle 9i删除数据表(转)
  4. 文件传输_python socket实现文件传输(防粘包)
  5. 聊聊高并发(二十一)解析java.util.concurrent各个组件(三) 深入理解AQS(一)
  6. Spring装配Bean的过程
  7. script标签的同步和异步
  8. iphonex计算机隐藏功能,关于iPhone11系列的一些隐藏功能,非常的实用
  9. UI设计素材模板|音乐社交娱乐教育APP Makeapp Wireframe Kit
  10. mysql的事物隔离机制?
  11. 大数据学习菜鸟的Hadoop快速入门基础教程汇总详细解答
  12. 计算机关于职业与道德的论文怎么写,计算机职业道德论文提纲模板 计算机职业道德论文大纲怎么写...
  13. 基于安卓的视频遥控小车
  14. C# webbrowser文本框的键盘和鼠标模拟输入和模拟鼠标点击
  15. 2020搞一个副业项目需要什么技能?
  16. excel如何输入公式的技巧
  17. win7系统打开计算机怎么不显示磁盘分区,大师详解win7系统隐藏磁盘分区不显示的具体步骤...
  18. oracle分区注意点,ORACLE分区表梳理系列(一)- 分区表概述、分类、使用方法及注意事项...
  19. php编程计算长方体的的体积,长方体(体积)
  20. magic-api的使用体验

热门文章

  1. java 控制 区域投屏,Scrcpy投屏原理浅析-设备控制篇
  2. SpringBoot集成电脑网站支付
  3. 软件制造工程学习笔记(详尽版)
  4. 开环霍尔电流传感器 额定输入0~(50-500)A-安科瑞 顾月
  5. 短视频创作有什么建议吗?
  6. 信息学C++教程<-->Hellowolrd
  7. jq动画插件,自制基于vue的圆形时钟
  8. python 简易任务管理器
  9. 细粒度分类 CUB_200_2011 vgg16 (数字图像处理)
  10. IXFP4N100参数及代换型号 数据表(PDF)中文资料