TUN设备和TAP设备

文章目录

  • TUN/TAP 的发展历史
  • TUN/TAP设备数据流
    • outter flow
    • inner flow
    • outter flow 与 inner flow 的应用场景
  • TAP设备
    • TAP设备实现 虚拟机网络
      • qemu 实例
      • TAP设备实现虚拟机网络时的数据流
    • TAP设备实现 VPN
      • 实例
      • TAP设备实现VPN时的数据流
  • TUN设备
    • TUN设备实现 VPN
      • 实例
      • TUN设备实现VPN时的数据流

TUN/TAP 的发展历史

TODO

TUN/TAP设备数据流

outter flow

虚拟机应用程序(Guest App):在虚拟机中,Guest App生成要发送的数据。

虚拟机操作系统(Guest OS):Guest OS包含了网络协议栈,Guest App通过Guest OS的网络协议栈将数据传送到虚拟机内的虚拟网卡(如E1000、Virtio等)。

虚拟网卡(Guest Virtual NIC):虚拟机内部的虚拟网卡模拟了物理网卡,它将数据包封装并发送到宿主操作系统的TAP设备。

---------
虚拟机应用程序(Host App):虚拟机内的TAP设备通过Host App生成数据包,这些数据包是从虚拟机到宿主操作系统的数据流。
---------  
宿主操作系统(Host OS):Host OS包含了网络协议栈,Host App通过Host OS的网络协议栈将数据包发送到TAP设备。

TAP设备(Host TAP):宿主操作系统内部的TAP设备接收来自Host App的数据包,并将其传输到宿主操作系统的物理网络接口。

物理网络接口(Physical NIC):数据包从Host TAP设备通过宿主操作系统的物理网络接口(通常是物理以太网适配器)传输到物理网络。

物理网络(Physical Network):数据包最终通过物理网络传输到目的地,可以是其他计算机、服务器或互联网。

inner flow

发送侧:

Guest App:虚拟机内的Guest App生成要发送的数据。
Guest OS(包括网络协议栈):Guest OS包括网络协议栈,负责处理Guest App生成的数据。
虚拟机内的虚拟网卡:虚拟机内部的虚拟网卡接收和处理Guest OS传递的数据。
虚拟机应用程序(例如QEMU):虚拟机应用程序(例如QEMU)运行在虚拟机内,它模拟虚拟硬件,包括虚拟网卡,并生成数据以供发送。
    
接收侧:

Host侧的TAP设备:TAP设备位于宿主操作系统上,它与虚拟机内的虚拟网卡相关联,并负责虚拟机应用程序生成的数据的传输。
Host OS(包括网络协议栈):Host OS包括网络协议栈,它负责处理来自TAP设备的数据包。
Host App:宿主操作系统内的Host App接收并处理从TAP设备传入的数据包。

outter flow 与 inner flow 的应用场景

两种数据流向(outter inner)
两种应用场景( 虚拟机网络)
两种设备(tap tun)

tun设备 作用于三层,处理的是IP封包,支持和inner flow , 不支持虚拟机网络 和 outter flow
    虽然tun设备不可以支持第一种数据流向(outter flow),因为tun设备没有发送数据到外部的功能
    	// 没有连接真实网卡的功能
   	也正是因为如此,tun设备不支持虚拟机网络
tap设备 作用于二层,处理的是MAC封包,都支持( 虚拟机网络)和两种数据流向,可以做第三层tun做的事情()
	// 但一般我们不让其做  应用,因为tap做起来比tun麻烦,要拆包
	// 所以既然tun做起来更方便,为什么不让tun做呢?
	// 这大概也是除了设计tap, tun 也被设计出来的原因吧!

tap一般和虚拟机组网有关
tun一般和 app 有关

TAP设备

TAP设备实现 虚拟机网络

qemu 实例

  • A.qemu 网络设备虚拟化
  • B.qemu 关于net 的选项
  • C.qemu 在ubuntu2204 实现桥接
我在A 中叙述了 qemu网络设备虚拟化发展历史
我在B 中描述了 qemu 网络的配置选项
我在C 中描述了 如何利用tap设备基于qemu完成网络桥接
    
说一点,即使是最开始的网络虚拟技术("全模拟/传统模拟") , 也是需要tap设备的 . 之后更新的每一种技术,也都需要基于tap设备.
    这些更新都没有更新他的基石 : tap 设备
不管 B 的选项中是否描述了 tap 设备,他都有tap设备(可能是隐式指定了)
C 中的实例,就是   基于  tap设备+虚拟网桥       实现了 效果 : 类似vmware的桥接
	当然我们还可以 基于 tap设备+NAT虚拟设备    实现   效果 : 类似vmware的NAT
    当然我们还可以 基于 tap设备               实现   效果 : 类似vmware 的 host only

TAP设备实现虚拟机网络时的数据流

  • tap设备+虚拟网桥 : outter flow

  • tap设备+NAT虚拟设备 : outter flow & inner flow

  • tap设备 : inner flow

TAP设备实现 VPN

实例

一般没有,一般用TUN做
但是也可以做!

TAP设备实现VPN时的数据流

  • inner flow

TUN设备

TUN设备实现 VPN

实例

TODO

TUN设备实现VPN时的数据流

  • inner flow

你可能感兴趣的:(杂七杂八总览,TUN,TAP)