文章目录
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)
两种应用场景(vpn 虚拟机网络)
两种设备(tap tun)
tun设备 作用于三层,处理的是IP封包,支持vpn和inner flow , 不支持虚拟机网络 和 outter flow
虽然tun设备不可以支持第一种数据流向(outter flow),因为tun设备没有发送数据到外部的功能
// 没有连接真实网卡的功能
也正是因为如此,tun设备不支持虚拟机网络
tap设备 作用于二层,处理的是MAC封包,都支持(vpn 虚拟机网络)和两种数据流向,可以做第三层tun做的事情(vpn)
// 但一般我们不让其做 vpn 应用,因为tap做起来比tun麻烦,要拆包
// 所以既然tun做起来更方便,为什么不让tun做呢?
// 这大概也是除了设计tap, tun 也被设计出来的原因吧!
tap一般和虚拟机组网有关
tun一般和 app vpn有关
TAP设备
TAP设备实现 虚拟机网络
qemu 实例
我在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做
但是也可以做!
使用tun实现vpn的时候,对端不能拿到发起端的mac地址
使用tap实现vpn的时候,对端能拿到发起端的mac地址
但是一般来说 对端不需要拿到发起端的mac地址
TAP设备实现VPN时的数据流
- inner flow
TUN设备
TUN设备实现 VPN
实例
TODO
TUN设备实现VPN时的数据流
- inner flow