• TUN设备和TAP设备


    TUN/TAP 的发展历史

    TODO
    
    • 1

    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):数据包最终通过物理网络传输到目的地,可以是其他计算机、服务器或互联网。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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设备传入的数据包。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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 也被设计出来的原因吧!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    tap一般和虚拟机组网有关
    tun一般和 app vpn有关
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

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

    • tap设备 : inner flow

    TAP设备实现 VPN

    实例

    一般没有,一般用TUN做
    但是也可以做!
    使用tun实现vpn的时候,对端不能拿到发起端的mac地址
    使用tap实现vpn的时候,对端能拿到发起端的mac地址
    但是一般来说  对端不需要拿到发起端的mac地址
    
    • 1
    • 2
    • 3
    • 4
    • 5

    TAP设备实现VPN时的数据流

    • inner flow

    TUN设备

    TUN设备实现 VPN

    实例

    TODO
    
    • 1

    TUN设备实现VPN时的数据流

    • inner flow
  • 相关阅读:
    IP地址 0.0.0.0 和 127.0.0.1之间的区别
    单细胞论文记录(part27)--Method of the Year: spatially resolved transcriptomics
    华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档
    ssm小型超市管理系统的设计与实现毕业设计源码011136
    期末前端web大作业——我的家乡陕西介绍网页制作源码HTML+CSS+JavaScript
    postgres 建立连接并删除记录
    Pytorch人体姿态骨架生成图像
    (四)线性插值
    Nginx 配置 https
    【提高效率】C++使用map替代传统switch case
  • 原文地址:https://blog.csdn.net/u011011827/article/details/133831571