ipvlan介绍

最近使用docker,涉及到需要跨多台物理机部署系统,查了好多资料,最后查到了ipvlan。那什么是vlan,什么又是ipvlan。

交换机层面的vlan,是按802.1Q规范,在链路层中加了4字节的标识vlan的数据,交换机根据接口的类型,pid以及vlan的id,来判断是否需要转发此数据包,最终实现了不同vlan的广播包的隔离。

ipvlan不涉及802.1Q协议,是基于linux的ipvlan驱动实现的,其原理是在一台物理机上,可以创建多个虚拟网络设备,这些设备拥有相同的mac地址。如下图所示:

物理机computer1,其网卡eth0 ip地址是192.168.1.2,mac是00-50-56-C0-00-08。其中包含两个ipvlan设备,ip是192.168.2.2和192.168.2.3,网段与物理机不同,但其与物理机共用同一个mac。

先说下结论,物理机1中的192.168.2.2可以与物理机2中的192.168.2.4通信。下面以l2模式192.168.2.2向192.168.2.4发送arp包,说下具体的通信过程。

1. 重要的数据结构

每一个ipvlan设备,都有对应的net_device和ipvl_dev。

主设备(net_device *phy_dev)是ipvlan_link_new方法中tb[IFLA_LINK]指定的序号的设备,主设备带有IFF_IPVLAN_MASTER标记,而子设备带有IFF_IPVLAN_SLAVE标记。

调用register_netdevice注册设备时,会调用ipvlan_init,如果主设备还未打上IFF_IPVLAN_MASTER标记,会执行ipvlan_port_create创建ipvl_port,并给主设备打IFF_IPVLAN_MASTER标记。ipvl_port是用于同一个主设备的所有设备共享的,子设备会连接到ipvl_port的ipvlans链表上。

2. 数据离开物理机1

数据发送方法是ipvlan_start_xmit->ipvlan_queue_xmit->ipvlan_xmit_mode_l2。

在ipvlan_xmit_mode_l2中,通过源mac和目的mac,来判断是否是目的地址是本机的包。

ether_addr_equal(eth->h_dest, eth->h_source)

arp包目的mac地址是ff-ff-ff-ff-ff-ff,与物理机1mac地址不相同,调用dev_queue_xmit,最终将包通过物理网卡eth0发送出去。广播包的格式如下:

00-50-56-C0-00-08 (oui Unknown) > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 192.168.2.4 tell 192.168.2.2, length 28

3. 数据包进入物理机2

网络设备开启时,执行ipvlan_addr4_event->ipvlan_add_addr4->ipvlan_add_addr,将ip地址添加到port->hlhead和ipvlan->addrs上。

广播包会被同网段(交换机未划vlan的情况下)的所有物理机收到。ipvlan接收处理流程如下:

ipvlan_handle_frame->ipvlan_handle_mode_l2。

在ipvlan_handle_mode_l2中通过ipvlan_get_L3_hdr获取arp头,arp头中包含目的ip。再通过ipvlan_addr_lookup查找到目的ipvlan设备,数据包交给ipvlan_rcv_frame处理。

ipvlan_rcv_frame中调用ipvlan_skb_crossing_ns将数据包的目的网络设备更改为拥有192.168.2.4ip地址的ipvlan设备,数据最终到达192.168.2.4对应的网络设备。

ipvlan_skb_crossing_ns(skb, dev);

4. arp回包

arp的回复包,由 192.168.2.4发送,目的mac地址为物理机1 eth0的mac地址,数据离开物理机2,进入物理机1,最终到达192.168.2.2,与上面的过程类似,就不再赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YUVRGB

一、直观感受 根据上面的图片,不难看出: RGB的每个分量,是对当前颜色的一个亮度值Y分量对呈现出清晰的图像有着很大的贡献Cb、Cr分量的内容不太容易识别清楚YUV将亮度信息(Y)与色度信息(UV)分离…

深入理解原码、反码、补码(结合C语言)

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

【MySQL】视图 + 用户管理

视图 前言正式开始视图用户管理user表创建新用户修改用户密码权限管理给用户赋权剥夺权限 前言 本篇所讲的视图和我上一篇事务中所讲的读视图不是一个东西&#xff0c;二者没有任何关系&#xff0c;如果看过我前一篇博客的同学不要搞混了。 其实视图和用户管理本来是想着分开…

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

VMware Workstation Pro 17及 Windows 11 虚拟机的安装与激活

六点钟&#xff1a; 吃晚饭吗 不吃&#xff0c;胖胖 十点钟&#xff1a; 阿昊要吃夜宵对不对 ——CSDN&#xff0c;记录牛马生活 本文是在学习 Linux 期间&#xff0c;使用 VMware 时顺带学习 Windows 11 虚拟机的安装与激活 VMware Workstation Pro 17及 Windows 11 虚拟机…

Java Throwable

如图展示了 Java 整个异常体系的关系。 Throwable 的 Java 异常体系的基类, 他的直接子类有 Error 和 Exception 2 个。 1 Error Error 表示的是由于系统错误, Java 虚拟机抛出的异常, 例如 Java 虚拟机崩溃, 内存不够等, 这种情况仅凭程序自身是无法处理的, 在程序中也不会…

004、简单页面-基础组件

之——基础组件 目录 之——基础组件 杂谈 正文 1.Image 1.0 数据源 1.1 缩放 1.2 大小 1.3 网络图片 2.Text 2.0 数据源 2.1 大小 2.2 粗细 2.3 颜色 2.5 样式字体 2.6 基础示例 2.7 对齐 2.8 省略 2.9 划线 3.TextInput 3.1 输入类型 3.2 提示文…

量子测量-技术点杂录

目录: 高质量文章导航-持续更新中_GZVIMMY的博客-CSDN博客 前置:量子测量设备 电子显微镜:电子显微镜可以在非常高分辨率下观察生物组织、细胞和分子结构。通过调整电子束的强度和聚焦来观察细胞内部的微小结构。但是,电子显微镜需要对样品进行切片处理,而且在真空中进行…

HbuilderX 项目打包文件过大问题优化

文章目录 HbuilderX 项目打包文件过大问题优化主要操作收效甚微&#xff0c;但又有那么点用的方法使用 gulp 压缩&#xff08;最后一步&#xff09;使用与配置 网上找的 gulp 优化压缩配置还未尝试可能有用的方法 尝试过程中看到的一些优质文章 HbuilderX 项目打包文件过大问题…

Shell循环:for(三)

示例&#xff1a;使用for实现批量主机root密码的修改 一、前提 已完成密钥登录配置&#xff08;ssh-keygen&#xff09;定义主机地址列表并了解远程修改密码的方法 [rootlocalhost ~]# ssh-keygen #设置免密登录[rootlocalhost ~]# ssh-copy-id 192.168.151.151 二、演示…

科研学习|论文解读——Open government research over a decade: A systematic review

Open government research over a decade: A systematic review 十年来的开放政府研究&#xff1a;一个系统性综述 摘要 在过去十年中&#xff0c;对开放政府的学术研究蓬勃发展。然而&#xff0c;对开放政府的全面审查是有限的。这一研究空白不仅阻碍了我们对开放政府整体知…

mysql区分大小写吗

mysql在windows下默认是不区分大小写的&#xff0c;在linux下默认是区分大小写的。 所以&#xff0c;为了避免出问题&#xff0c;许多公司的数据库编程规范中明确规定&#xff1a;库名、表名、列名、索引名一律小写&#xff0c;不同单词之间以下划线分割&#xff0c;且控制在3…

重庆市失业金申领流程

1.领失业金的前提&#xff1a;非本人意愿中断就业。个人理解就是不是主动辞职才能领。 2.因此公司在处理社保减员的时候&#xff0c;不能是劳动者主动提出离职。 3.社保减员可选择原因&#xff1a;其他原因中断缴费 / 由单位提出双方协商一致解除劳动合同。 4.当社保暂停缴费…

算法——滑动窗口

滑动窗口大致分为两类&#xff1a;一类是窗口长度固定的&#xff0c;即left和right可以一起移动&#xff1b;另一种是窗口的长度变化&#xff08;例如前五道题&#xff09;&#xff0c;即right疯狂移动&#xff0c;left没怎么动&#xff0c;这类题需要观察单调性(即指针)等各方…

以下哪项不是在内蒙古举办的?()

需要查看更多试题和答案&#xff0c;可以前往题海舟&#xff08;题海舟&#xff09;进行搜题查看。可以搜“题干关键词”。 以下哪项不是在内蒙古举办的&#xff1f;&#xff08;&#xff09; A.中蒙博览会 B.东北亚区域合作高峰论坛 C.中蒙俄合作高层论坛 D.中日经济合作会 …

C++基础 -32- 逻辑运算符重载

逻辑运算符重载格式 bool operator&&(data1&a,data2&b) {if(a.a&&b.a){return true;}elsereturn false; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int a):a(a){} };class d…

(数据结构)顺序表的查找

静态分配代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct LinkList {int data[MAX];int lenth; }Link; //初始化 void CreateList(Link* L) {L->lenth 0;for (int i 0; i < MAX; i){L->data[i] 0;} } //插入 …

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概4500多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

计算机网络扫盲(2)——网络边缘

一、概述 在计算机网络得到术语中&#xff0c;我们把与因特网相连的计算机或其他设备称为端系统&#xff08;或者主机&#xff09;&#xff0c;如下图所示&#xff0c;因为它们位于因特网的边缘&#xff0c;所以被称为端系统。因特网的端系统包括了桌面计算机&#xff…

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …