| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 云原生虚拟化:一文读懂网络虚拟化之 tun/tap 网络设备 -> 正文阅读 |
|
[网络协议]云原生虚拟化:一文读懂网络虚拟化之 tun/tap 网络设备 |
作者:text-align:center; |
了解云原生的同学应该都了解过 flannel ,flannel 的 overlay 网络模型中有一种是 UDP 模式,虽然因为性能差被弃用了,但也是最典型的容器跨主机网络方案。 上图就是 flannel 的 UDP 模式,想必这个图大家都不陌生,来源于张磊的《深入剖析 Kubernetes》中的网络解析章节,可以看到 Flannel 进行 UDP 的封包与解包都是在用户态通过 tun 设备(flannel0)来实现的,而这个 flannel0 就是今天咱们要讲的主角之一,tun 设备。 tun/tap 设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。 ? tun/tap 设备与物理网卡的区别,如上图所示:
01?工作原理工作原理 从上图可以更直观的看出 tun/tap 设备和物理设备的区别:虽然它们的一端都是连着网络协议栈,但是物理网卡另一端连接的是物理网络,而 tun/tap 设备另一端连接的是一个应用层程序,这样协议栈发送给 tun/tap ?的数据包就可以被这个应用程序读取到,此时这个应用程序可以对数据包进行一些自定义的修改(比如封装成 UDP),然后又通过网络协议栈发送出去——其实这就是目前大多数“代理”的工作原理。 Tun/tap 设备提供的虚拟网卡驱动,从tcp/ip协议栈的角度而言,它与真实网卡驱动并没有区别。 工作模式 tun/tap 有两种模式,tun 模式?与 tap 模式。tun 设备与 tap 设备工作方式完全相同,区别在于:
注意事项:
应用的数据收发过程:
02?设备创建除了在应用中通过克隆设备?/dev/net/tun 和 ioctl 系统调用创建虚拟设备,还可以通过 ip tuntap 命令创建。
03?tun/tap 驱动Tun/tap 驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动。
通过 modinfo tun 和 modinfo tap ?查看 tun/tap 设备驱动:
04?应用场景VPN接收数据流程 接收机制如上图所示,黑线是公网 IP,红线是解密后的内网 IP 包。VPN 进程监听的是公网?IP?+ 端口,数据包经过网卡到达协议栈,到达 VPN 进程,VPN 进程解密解包后,将数据通过 字符设备文件发送给虚拟设备,再次经过协议栈的路由,最终将数据发到用户程序。 发送数据流程 ? 发送机制如上图所示,红线是内网 IP,黑色线是加密过后的公网 IP 包。应用程序发送目的?IP?为 内网?IP?的数据包,到达虚拟网卡,转到字符设备文件,被 VPN 进程读取到。经过封包加密后,通过协议栈路由到网卡,最终通过公网网卡发送出去。 虚拟机 VM以 qemu 为例,qemu 启动时通过 qemu -netdev tap 指定 tap 设备: 如图中所示,红色箭头表示数据报文的入方向,步骤:
参考资料:
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:21:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |