在云计算时代,虚拟机和容器已经成为标配。它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡。

tap/tun 是什么#

tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网路板卡实现,tap/tun 虚拟网卡完全由软件来实现,功能和硬件实现完全没有差别,它们都属于网络设备,都可以配置 IP,都归 Linux 网络设备管理模块统一管理。

作为网络设备,tap/tun 也需要配套相应的驱动程序才能工作。tap/tun 驱动程序包括两个部分,一个是字符设备驱动,一个是网卡驱动。这两部分驱动程序分工不太一样,字符驱动负责数据包在内核空间和用户空间的传送,网卡驱动负责数据包在 TCP/IP 网络协议栈上的传输和处理。

用户空间与内核空间的数据传输#

在 Linux 中,用户空间和内核空间的数据传输有多种方式,字符设备就是其中的一种。tap/tun 通过驱动程序和一个与之关联的字符设备,来实现用户空间和内核空间的通信接口。

在 Linux 内核 2.6.x 之后的版本中,tap/tun 对应的字符设备文件分别为:

  • tap:/dev/tap0
  • tun:/dev/net/tun

设备文件即充当了用户空间和内核空间通信的接口。当应用程序打开设备文件时,驱动程序就会创建并注册相应的虚拟设备接口,一般以 tunX 或 tapX 命名。当应用程序关闭文件时,驱动也会自动删除 tunX 和 tapX 设备,还会删除已经建立起来的路由等信息。

tap/tun 设备文件就像一个管道,一端连接着用户空间,一端连接着内核空间。当用户程序向文件 /dev/net/tun 或 /dev/tap0 写数据时,内核就可以从对应的 tunX 或 tapX 接口读到数据,反之,内核可以通过相反的方式向用户程序发送数据。

tap/tun 和网络协议栈的数据传输#

tap/tun 通过实现相应的网卡驱动程序来和网络协议栈通信。一般的流程和物理网卡和协议栈的交互流程是一样的,不同的是物理网卡一端是连接物理网络,而 tap/tun 虚拟网卡一般连接到用户空间。

如下图的示意图,我们有两个应用程序 A、B,物理网卡 eth0 和虚拟网卡 tun0 分别配置 IP:10.1.1.11 和 192.168.1.11,程序 A 希望构造数据包发往 192.168.1.0/24 网段的主机 192.168.1.1

基于上图,我们看看数据包的流程:

  1. 应用程序 A 构造数据包,目的 IP 是 192.168.1.1,通过 socket A 将这个数据包发给协议栈。
  2. 协议栈根据数据包的目的 IP 地址,匹配路由规则,发现要从 tun0 出去。
  3. tun0 发现自己的另一端被应用程序 B 打开了,于是将数据发给程序 B.
  4. 程序 B 收到数据后,做一些跟业务相关的操作,然后构造一个新的数据包,源 IP 是 eth0 的 IP,目的 IP 是 10.1.1.0/24 的网关 10.1.1.1,封装原来的数据的数据包,重新发给协议栈。
  5. 协议栈再根据本地路由,将这个数据包从 eth0 发出。

后续步骤,当 10.1.1.1 收到数据包后,会进行解封装,读取里面的原始数据包,继而转发给本地的主机 192.168.1.1。当接收回包时,也遵循同样的流程。

在这个流程中,应用程序 B 的作用其实是利用 tun0 对数据包做了一层隧道封装。其实 tun 设备的最大用途就是用于隧道通信的。

tap/tun 的区别#

看到这里,你可能还不大明白 tap/tun 的区别。
tap 和 tun 虽然都是虚拟网络设备,但它们的工作层次还不太一样。

  • tap 是一个二层设备(或者以太网设备),只能处理二层的以太网帧;
  • tun 是一个点对点的三层设备(或网络层设备),只能处理三层的 IP 数据包。

tap/tun 的应用#

从上面的数据流程中可以看到,tun 设备充当了一层隧道,所以,tap/tun 最常见的应用也就是用于隧道通信,比如 VPN,包括 tunnel 和应用层的 IPsec 等,其中比较有名的两个开源项目是 openvpn 和 VTun。

总结#

tun/tap 虚拟网卡,对应于物理网卡,如 eth0。

tun/tap 驱动包括字符设备驱动和网卡驱动。

tun/tap 常用于隧道通信。

虚拟网络设备 tap/tun 原理解析相关推荐

  1. linux虚拟网络设备之tun/tap(一)

    在现在的云时代,到处都是虚拟机和容器,它们背后的网络管理都离不开虚拟网络设备,所以了解虚拟网络设备有利于我们更好的理解云时代的网络结构.从本篇开始,将介绍Linux下的虚拟网络设备. 虚拟设备和物理设 ...

  2. Linux虚拟网络设备之tun/tap

    Table of Contents 虚拟设备和物理设备的区别 tun/tap的另一端是什么? tun/tap设备有什么用? tun和tap的区别 示例 示例程序 演示 结束语 参考 在现在的云时代,到 ...

  3. linux虚拟网络设备之tun/tap驱动程序设计原理(五)

    简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...

  4. 疫情下的远程办公:理解Linux虚拟网络设备之tun/tap

    Table of Contents VPN TUN TUN编程 源代码 编译 测试运行 执行程序,生成虚拟设备 为tun设备分配IP地址 ping tun设备 VPN TUN 应用程序A是一个普通的程 ...

  5. linux虚拟网络设备--虚拟机网卡和linux bridge上tap设备的关系(七)

    1. 虚拟机进程 使用ps –ef |grepkvm可以看到虚拟机进程信息如下: /usr/libexec/qemu-kvm -nameinstance-0000001d -S -machine pc ...

  6. TAP/TUN Vnet veth

    TAP 设备与 VETH 设备 TUN/TAP 设备是一种让用户态程序向内核协议栈注入数据的设备,一个工作在三层,一个工作在二层,使用较多的是 TAP 设备.VETH 设备出现较早,它的作用是反转通讯 ...

  7. 云计算底层技术-虚拟网络设备(Bridge,VLAN)

    openstack底层技术-各种虚拟网络设备一(Bridge,VLAN)  openstack底层技术-各种虚拟网络设备二(tun/tap,veth) Linux Bridge Bridge与netf ...

  8. Linux 虚拟网络设备 tun/tap veth pair

    Linux 虚拟网络设备 tun/tap veth pair 本篇主要介绍一下 linux 下面的 虚拟网络设备 tun/tap veth pair 随着容器逐步取代虚拟机,成为云基础架构的标准,然而 ...

  9. linux虚拟网络设备--eth, tap/tun, veth-pair(九)

    Linux 虚拟网络的背后都是由一个个的虚拟设备构成的.虚拟化技术没出现之前,计算机网络系统都只包含物理的网卡设备,通过网卡适配器,线缆介质,连接外部网络,构成庞大的 Internet. 然而,随着虚 ...

最新文章

  1. DSP48E Slice
  2. QT的QWinThumbnailToolBar类的使用
  3. 把List对象或者单值对象转换为Json格式
  4. oracle新建用户sql局域,oracle 新建数据库,及创建用户,表空间,sqlplus导入导出数据库...
  5. 2011 ICM 美国数据建模赛题
  6. 解压大于4g的文件_python解压压缩包
  7. 使用sp_monitor 查看SQL Server统计信息
  8. 我设想的可扩展结构(插件) (二)
  9. java计算机毕业设计网上图书销售系统源程序+mysql+系统+lw文档+远程调试
  10. 360安全卫士指控QQ侵犯用户隐私
  11. 软件需求收集、挖掘和分析方法
  12. android 字体倒影,Android实现图片的倒影效果
  13. linux查看UID命令,Linux下查看UID
  14. 半加器——Verilog HDL语言
  15. Delete `␍`eslint(prettier/prettier) 错误的解决方案
  16. centos 6.5 安装gcc 4.9.1
  17. Java异常处理的普遍误解
  18. 新手炼丹师的调参内经——深度学习涨点技巧总结
  19. 吉林省二级计算机vb c语言 access vf 考哪个有用,计算机二级考试选择
  20. 程序员收到阿里offer,提离职被怒:为年薪百万连兄弟都不做啦!

热门文章

  1. 【转】机器人技术介绍作者
  2. 高颜值测试报告- XTestRunner
  3. U盘文件打不开了还能恢复吗
  4. 《HTML5游戏编程核心技术与实战》——第1章 游戏和HTML5初探1.1 网页游戏和HTML5...
  5. mybatis plus使用雪花算法_MyBatis-Plus入门
  6. clip预训练模型综述
  7. IBM展望未来5年五大科技趋势:“读心术”成真
  8. Spring boot AOP(切面)使用方法和解析
  9. 第一届“百度杯”信息安全攻防总决赛
  10. 移动电源的优势是什么?