Open vSwitch 入门实践(8) VXLAN实验

news2024/9/20 13:33:05

目录

什么是VXLAN?

VXLAN解决了什么问题?

VXLAN网络如何工作?

简单VXLAN实验

主机A

主机B

测试


什么是VXLAN?

VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。

VXLAN详情请参考VXLAN_巭犇的博客-CSDN博客

VXLAN解决了什么问题?

  • 突破了VLAN技术4094个隔离网络的限制,在一个管理域中创建多达1600万个VXLAN网络。

  • VXLAN提供了云服务厂商所需的规模的网络分段,以支持大量租户。

  • 突破了物理网络边界的限制,传统虚拟二层网络(VLAN)是需要和物理网络做大量适配工作才能保证环境的迁移不会导致虚拟网络异常,overlay网络则不必关心底层物理网络是如何搭建的,只要能保证VXLAN端点相互之间可以联通即可。

VXLAN网络如何工作?

VXLAN隧道协议将二层以太网帧封装在三层UDP数据包中,使用户能够创建跨物理三层网络的虚拟化二层子网或网段。每个二层子网使用VXLAN网络标识符(VNI)作为唯一标识。报文格式如下图:

执行数据包封装和解封装的实体称为VXLAN隧道终结点(VTEP)。VTEP主要分为两类:硬件VTEP和软件VTEP。硬件VTEP我接触较少,这里就不再介绍了。

软件VTEP如下图所示:VTEP在数据包到达虚拟机之前进行了封装和解封装,使得虚拟机完全不需要知道VXLAN隧道以及它们之间的三层网络。

简单VXLAN实验

我们参照下图完成实验。

主机A

# 创建隧道网桥
ovs-vsctl add-br br-tun
# 创建隧道端口并指定远端IP和VXLAN ID
ovs-vsctl add-port br-tun vx01 -- set Interface vx01 type=vxlan options:remote_ip=192.168.2.12 options:key=1111
# 创建内部端口
ovs-vsctl add-port br-tun vnet0 -- set Interface vnet0 type=internal
# 创建netns用于模拟虚拟网络设备
ip netns add ns0
# 将内部端口移动到netns中
ip link set vnet0 netns ns0
# 启动网卡
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
# 配置IP
ip netns exec ns0 ip addr add 192.168.0.1/24 dev vnet0
[root@node01 ~]# ovs-vsctl show
4a2b2b93-bf98-4fc5-a50f-927f86d8c6e8
    Bridge br-tun
        Port "vx01"
            Interface "vx01"
                type: vxlan
                options: {key="1111", remote_ip="192.168.2.12"}
        Port "vnet0"
            Interface "vnet0"
                type: internal
        Port br-tun
            Interface br-tun
                type: internal
    ovs_version: "2.11.0"

主机B

# 创建隧道网桥
ovs-vsctl add-br br-tun
# 创建隧道端口并指定远端IP和VXLAN ID
ovs-vsctl add-port br-tun vx01 -- set Interface vx01 type=vxlan options:remote_ip=192.168.2.11 options:key=1111
# 创建内部端口
ovs-vsctl add-port br-tun vnet0 -- set Interface vnet0 type=internal
# 创建netns用于模拟虚拟网络设备
ip netns add ns0
# 将内部端口移动到netns中
ip link set vnet0 netns ns0
# 启动网卡
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
# 配置IP
ip netns exec ns0 ip addr add 192.168.0.2/24 dev vnet0
[root@node02 ~]# ovs-vsctl show
25dd36a4-1b9b-42e1-b365-7c534875a517
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port "vnet0"
            Interface "vnet0"
                type: internal
        Port "vx01"
            Interface "vx01"
                type: vxlan
                options: {key="1111", remote_ip="192.168.2.11"}
    ovs_version: "2.11.0"

测试

主机A上测试网络连通性 ip netns exec ns0 ping 192.168.0.2

[root@node01 ~]# ip netns exec ns0 ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.617 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.413 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.426 ms
64 bytes from 192.168.0.2: icmp_seq=4 ttl=64 time=0.376 ms
64 bytes from 192.168.0.2: icmp_seq=5 ttl=64 time=0.437 ms
64 bytes from 192.168.0.2: icmp_seq=6 ttl=64 time=0.379 ms
64 bytes from 192.168.0.2: icmp_seq=7 ttl=64 time=0.363 ms

可以看到我们只使用一张网卡就成功的在已有的物理网络上建立了一个新的分布式二层网络。

在这个实验中我使用了固定的VXLAN ID 1111,只是为了简化实验,无其他含义。

当我们此时在主机B上对物理网卡eth0使用tcpdump抓包时。

tcpdump -l -n -vv -i eth0 'port 4789 and udp[8:2] = 0x0800 & 0x0800 and udp[11:4] = 1111 & 0x00FFFFFF'
可以看到类似我下面截取的数据包。
[root@node02 ~]# tcpdump -l -n -vv -i eth0 'port 4789 and udp[8:2] = 0x0800 & 0x0800 and udp[11:4] = 1111 & 0x00FFFFFF'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:22:24.544957 IP (tos 0x0, ttl 64, id 2843, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.2.11.52033 > 192.168.2.12.4789: [no cksum] VXLAN, flags [I] (0x08), vni 1111
IP (tos 0x0, ttl 64, id 8607, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.2: ICMP echo request, id 2862, seq 7, length 64
10:22:24.545015 IP (tos 0x0, ttl 64, id 32291, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.2.12.51555 > 192.168.2.11.4789: [no cksum] VXLAN, flags [I] (0x08), vni 1111

前两行是underlay网络的报文,也就是底层承载网络。分别是:

  • 底层协议 proto UDP (17)
  • 包长度 length 134
  • 源和目的地址  192.168.2.11.52033 > 192.168.2.12.4789
  • VXLAN ID:vni 1111

后两行是overlay网络的报文,也就是我们的虚拟网络。分别是:

  • 承载的协议是 proto ICMP (1)
  • 包长度 length 84
  • 源和目的地址 192.168.0.1 > 192.168.0.2

可以看出这些信息和我们的实验环境非常匹配,只有包大小不太一致,这是因为underlay网络的基础信息刚好占有了50个字节,不信你可以加一下上面的报文格式中的数字。

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

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

相关文章

Spring依赖注入 - Resource注解详解及与Autowired注解区别

上篇博客我们讲了Spring中的自动注入(byName,byType)和Autowired注解的工作原理以及源码分析,那么这次,我们来分析还没讲完的,剩下的核心的方法: Nullable Object resolveDependency(DependencyDescriptor descriptor, Nullable …

0.96寸OLED液晶显示器

在日常的小项目制作中我们经常会接触到OLED液晶显示器,本文介绍0.96寸液晶显示器的基本原理,辅助我们后续的小项目开发 OLED被称为有机激光二极管,也被称为有机激光显示,OLED采用有机材料涂层和玻璃基板,当有电流通过…

#Chrome扩展程序开发教程--02:Hello Extensions

#Chrome扩展程序开发教程--02:Hello Extensions 引言1、Hello Extensions2、固定扩展程序3、重新加载扩展程序4、查看扩展程序的输出 引言 本系列博客旨在带来最新的Chrome扩展程序开发入门教程。 1、Hello Extensions 本节博客中,笔者将带领读者创建一个…

C++附加篇: 空间适配器

"我有时难过,却还有些抚慰和感动。" 一、我们来谈谈空间适配器 (1) 什么是空间配置器? STL的六大组件,容器、算法、迭代器、适配器、仿函数,最后一个也就是"空间适配器"。 所谓"空间适配器"&#x…

轻松掌握K8S使用kubectl操作配置文件挂载ConfigMap和密钥Secret知识点05

1、挂载应用配置文件配置集ConfigMap 当有许多应用如redis、mysql,希望将它的配置文件挂载出去,以便随时修改,可以用ConfigMap配置集 具体用法查看使用命令行操作里的 3、ConfigMap配置集实战 2、挂载应用配置文件的敏感信息Secret Secre…

JAVA开发运维(云基础设备监控)

在大型的商用系统中,经常需要监控云设备的健康状态,性能情况,流量数据等。及时发现系统问题,及时修复,以确保系统的高可用。检查云资源的工作内容主要包括基础监控、主动拨测、用户体验、APM监控、指标体系、业务分析、…

Java运行时内存管理

一、前言 希望能在我们平时开发写代码的时候,能够知道当前写的这段代码,内存方面是如何分配的。 我们深知,一个Java程序员在很多时候根本不用操心内存的释放,而是依靠JVM去管理,以前写C代码的时候,却要时刻…

SAP 自定义生产订单状态

1、生产订单通常系统有一整套订单状态,做PP的各位同学都应该知道。 CRTD状态 REL已下达 CNF已报工 DLV已入库 TECO技术性完成 等等状态这里就不在罗列了,可以自行在生产订单中看到 2、这篇文章主要是在生产订单系统外,在自定义一套状态。这个…

Spring更简单的读取和存储Bean(基于注解)

目录 ①从Maven中央仓库获取spring-context和spring-beans的依赖,将依赖引入到pom.xml中 ②配置扫描路径 ③添加注解存储Bean对象(可以使用5大类注解和方法注解) 类注解(写在类上,作用于类上) Contro…

【致敬未来的攻城狮计划】— 连续打卡第十一天:FSP固件库开发点亮第一个灯。

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

leetcode刷题--辅助工具

idea插件 插件商店搜索leetcode,可以让你利用idea调试leetcode的题目 插件首先需要填写用户名密码登录,登录上就可以在idea搜题、做题、提交等 注意: 一些版本登录可能登录失败,解决方法是换leetcode地址为leetcode.cn。 有些可…

通过用户名密码认证保障 MQTT 接入安全

认证是一种安全措施,用于识别用户并验证他们是否有权访问系统或服务器。它能够保护系统免受未经授权的访问,确保只有经过验证的用户才能使用系统。 物联网连接万物,对试图访问基础设施的用户进行认证至关重要。未经授权的访问存在重大的安全…

数据保管库的数据质量错误

数据保管库的数据质量错误 在过去的几年里,数据仓库发生了巨大的变化,但这并不意味着支撑健全数据架构的基本原理需要被抛在窗外。事实上,随着GDPR等数据法规的日益严格以及对优化技术成本的重新重视,我们现在看到了“Data Vault…

设计模式之备忘录模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、备忘录模式是什么? 备忘录模式是一种行为型的软件设计模式,在不破坏封装的前提下,获取一个…

OpenCV实例(八)行人跟踪

OpenCV实例(八)行人跟踪 1.目标跟踪概述2.基于背景差分检测运动物体2.1 实现基本背景差分器2.2 使用MOG背景差分器2.3 使用卡尔曼滤波器寻找运动趋势 3.跟踪行人 作者:Xiou 1.目标跟踪概述 目标跟踪是对摄像头视频中的移动目标进行定位的过…

数据结构与算法基础-学习-20-查找之散列表(HASH TABLE)

目录 目录 一、基本思想 二、术语 1、散列方法 2、散列函数 3、散列表 4、冲突 5、同义词 三、如何减少哈希冲突 四、构造散列函数需考虑的情况 五、散列函数的构造方法 1、直接定址法 2、除留余数法 六、如何处理哈希冲突 1、开地址法 2、拉链法 七、散列表查…

【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建

这篇文章,主要介绍微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建。 目录 一、Gateway服务网关 1.1、什么是Gateway 1.2、Gateway基础环境搭建 (1)基础环境介绍 (2)引入依赖 (3&#…

快速上手Navicat~

众所周知, Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装教程。 简介 一般我们在开发过程中是离不开数据库的&#xf…

【Unity VR开发】结合VRTK4.0:添加对象追随器

语录: 我已经准备好了足够挡雨的伞,可是却迟迟没有等到雨的到来,这样的尴尬只是我漫长人生中的小插曲罢了。 前言: 对象追随器的目的是让一个或多个游戏对象跟随场景中的另一个对象,而无需将游戏对象嵌套在彼此之下。 …

『pyqt5 从0基础开始项目实战』13. 打包生成exe(保姆级图文)

目录 项目源码打包exe打开闪退需要db文件夹总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 项目源码 请查阅专栏上文获取源码 ## 安装库包 python pip install pyinstaller ![…