Linux-Bridge(LBR)网络虚拟化实战

2023-11-10

1、Linux 网络虚拟化概述

1. 网络通信模型

Linux 系统的网络通信模型,即信息是如何从程序中发出,通过网络传输,再被另一个程序接收到的。整体上看,Linux 系统的通信过程无论按理论上的 OSI 七层模型,还是以实际上的 TCP/IP 四层模型来解构,都明显地呈现出“逐层调用,逐层封装”的特点,这种逐层处理的方式与栈结构,譬如程序执行时的方法栈很类似,因此它通常被称为“Linux 网络协议栈”,简称“网络栈”,有时也称“协议栈”。

下图体现了 Linux 网络通信过程与 OSI 或者 TCP/IP 模型的对应关系,也展示了网络栈中的数据流动的路径。

Linux 系统下的网络通信模型:

图中传输模型的左侧,特别标示出了网络栈在用户与内核空间的部分,可见几乎整个网络栈(应用层以下)都位于系统内核空间之中,之所以采用这种设计,主要是从数据安全隔离的角度出发来考虑的。由内核去处理网络报文的收发,无疑会有更高的执行开销,譬如数据在内核态和用户态之间来回拷贝的额外成本,因此会损失一些性能,但是能够保证应用程序无法窃听到或者去伪造另一个应用程序的通信内容。针对特别关注收发性能的应用场景,也有直接在用户空间中实现全套协议栈的旁路方案,譬如开源的Netmap以及 Intel 的DPDK,都能做到零拷贝收发网络数据包。

图中传输模型的箭头展示的是数据流动的方向,它体现了信息从程序中发出以后,到被另一个程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux-Bridge(LBR)网络虚拟化实战 的相关文章

  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https

随机推荐

  • 如何在 CentOS 7 服务器上添加和删除用户

    介绍 当您第一次开始使用新的 Linux 服务器时 添加和删除用户通常是您需要做的第一件事 在本指南中 您将学习如何创建用户帐户 分配sudo权限 并删除 CentOS 7 服务器上的用户 先决条件 要完成本教程 您将需要 一台 CentO
  • 如何在 Ubuntu 22.04 上设置私有 Docker 注册表

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 Docker 注册表是一个管理 Docker 容器镜像存储和交付的应用程序 注册表集中容器映像并减少开发人员的构建时间 Docker 镜像通过虚拟化保证相同的运行时环境 但构建镜像可能
  • 如何在 Ubuntu 16.04 上将 Nginx Web 根移动到新位置

    介绍 在 Ubuntu 上 默认情况下 Nginx Web 服务器将其文档存储在 var www html 它通常与操作系统的其余部分一起位于根文件系统上 但有时 将文档根移动到另一个位置会很有帮助 例如单独安装的文件系统 例如 如果您从同
  • 如何使用BackupPC在Ubuntu 12.04 VPS上创建备份服务器

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何设置 Nginx 负载均衡

    关于负载均衡 负载平衡是一种有用的机制 可以在多个功能强大的虚拟专用服务器之间分配传入流量 通过将处理机制分配给多台计算机 可以为应用程序提供冗余 确保容错和提高稳定性 用于负载平衡的循环算法将访问者发送到一组 IP 中的一个 在最基本的层
  • 如何在 Java 中使用运算符

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 An operator是一个或多个符号的组合 比如著名的算术运算符减号 并加上 或更高级的instanceof 当您对值或变量应用运算符时 您会得到运算结果 此类操作是编程的基础 因为
  • 如何在 Ubuntu 14.04 服务器上安装 Node.js

    介绍 Node js 是一个用于服务器端编程的 Javascript 平台 允许用户快速构建网络应用程序 通过在前端和后端都利用 Javascript 开发可以更加一致并在同一系统内进行设计 在本指南中 我们将向您展示如何在 Ubuntu
  • mysql如何显示ddl_Mysql DDL语句之视图

    Mysql 视图是一个虚拟表 内容由 select 查询语句定义 同真实的表数据一致 但是视图并不在数据库中以存储的数据值形式存在 试图引用自定义查询表的字段 并且在引用试图时动态生成 对其所引用的基础表来说 Mysql 视图的作用类似于筛
  • 【计算机视觉

    文章目录 一 ModaNet 二 SKU110K 三 SceneNet 四 VT5000 五 Washington RGB D 六 Argoverse HD 七 CADC Canadian Adverse Driving Condition
  • 小技巧——宝塔面板重启、重置命令

    1 Centos 安装脚本 yum install y wget wget O install sh http download bt cn install install sh sh install sh 2 Ubuntu Deepin
  • Qt示例5:用Qt画一个漂亮预警仪表

    以下是用Qt实现漂亮预警仪表的步骤和代码 创建一个Qt项目 并添加一个主窗口 在主窗口中添加QGraphicsView控件 用于绘制预警仪表 创建一个QGraphicsScene对象 并将其设置为QGraphicsView的场景 QGrap
  • emmx用xmind打开_XMind思维导图:专注扩展延伸和梳理,让你事半功倍!

    更多精彩软件 请关注我们 今日新闻 现如今 思维导图被普遍运用在各行各业 充当着重要的角色 但你会发现这些导图绝大多数是通过电脑软件绘制的 随着移动互联网的高速发展 实际情况告诉我们需要一款手机版的思维导图软件 便于我们在手机上就能自由整理
  • mmdetection踩坑1~docker内RuntimeError: DataLoader worker (pid 1727) is killed by signal: Bus errer

    今天在docker内使用mmdetection做训练时 workers per gpu参数设置为0时 可以正常训练 但修改配置文件中workers per gpu 2参数后 开始训练 程序报错 网上查资料显示 是因为docker的共享内存不
  • 初始化列表

    在构造函数后面 属性 值 参数 属性 值 参数 define CRT SECURE ND WARNINGS include
  • 1.4最流行的NoSQL——Redis

    本文比较重要的概念 NoSQL 及它的优点 Redis 及它的优点 NoSQL Not Only SQL NoSQL 在互联网中作用很大 可以在很大程度上提高互联网系统的性能 具备一定持久层的功能 也可以作为一种缓存工具 注释 Redis缓
  • 重学JavaScript 第二天

    数据类型 js数据类型整体分为两大类 1 基本数据类型 2 引用数据类型 1 数据类型 数字类型 number JavaScript 中的正数 负数 小数等 统一称为 数字类型 注意 JS 是弱数据类型 变量到底属于那种类型 只有赋值之后
  • 【排序算法】快速排序(C语言)

    排序算法 快速排序 目录 一 快速排序的单趟排序 1 霍尔法 2 挖坑法 3 前后指针 二 快速排序 1 排序步骤 2 排序完整步骤图 3 快速排序代码 3 1 递归实现 3 2 非递归实现 三 选择基准数key 1 为什么要选择基准数ke
  • 互联网精准广告定向技术: 一切你该了解的知识总结与整理

    互动中国编者前言 本文来自于读者的投稿 牛国柱博客 原文作者为资深互联网广告行业从业者 经过一段长时间的积累 从基础知识 技术应用以及在线广告作弊手段整理和反作弊方法三大角度 共计15篇系列专文 对于精准广告定向技术的介绍进行了一个全面且切
  • MATLAB2016添加工具箱toolbox方法,有截图

    我这里添加的是Image Graphs 下载路径 需要注册账号 https ww2 mathworks cn matlabcentral fileexchange 53614 image graphs requestedDomain zh
  • Linux-Bridge(LBR)网络虚拟化实战

    1 Linux 网络虚拟化概述 1 网络通信模型 Linux 系统的网络通信模型 即信息是如何从程序中发出 通过网络传输 再被另一个程序接收到的 整体上看 Linux 系统的通信过程无论按理论上的 OSI 七层模型 还是以实际上的 TCP