零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)

news2024/11/8 18:39:07

《零入门kubernetes网络实战》视频专栏地址

https://www.ixigua.com/7193641905282875942

本篇文章视频地址(稍后上传)



本篇文章开始介绍vxlan虚拟设备。

主要介绍vxlan的协议报文结构,

1、总结

主要涉及到以下方面:

  • overlay跟vxlan的关系
  • 如何理解vxlan设备是一对一,一对多模型?
  • 创建vxlan网络对底层网络的要求?
  • vxlan设备的主要作用?
  • vtep,vni, tunnel概念介绍
  • 通过三层网络搭建虚拟的二层网络
  • vxlan报文结构分析
  • 解析vxlan报文结构中MTU为什么是1450?

2、Overlay? 与Vxlan的关系?

在介绍vxlan之前,先介绍一下Overlay。

Overlay,简单的说,就是在原网络的基础上重新产生一个逻辑上的网络。

类似于官方用语:
在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于 IP 的基础网络技术为主。

IETF 在 Overlay 技术领域提出 VXLAN、NVGRE、STT 三大技术方案。

Overlay跟Vxlan到底什么关系呢?

类似于Overlay代表的是容器,vxlan代表的是Docker。

Docker只是容器的一种实现方案而已。还有其他方案,如Podman。

vxlan也只是Overlay的一种实现方案而已,还有NVGRE,STT等。

Overlay 不再详细的列举了,感兴趣的同学可以自信百度。

总体比较,VLXAN 技术具有更大优势,而且当前 VLXAN 也得到了更多厂家和客户的支持,已经成为 Overlay 技术的主流标准。

3、vxlan简介?

VXLAN ?

  • 可以组建虚拟可扩展的局域网,
  • 一种虚拟化隧道通信技术,
  • 属于隧道网络
  • 一种overlay(覆盖网络技术),
  • 通过三层网络搭建虚拟的二层网络(稍后介绍)
  • 支持一对一形式的通信(后续有案例介绍)
    • 就是说在创建本地的vxlan设备时,已经明确的指明了通信目的的vxlan设备的信息。
    • 比方说,用一根电话线链接的两端话筒,只能这两个话筒进行通信。
    • 是一种专用网络
  • 支持一对多形式的通信
    • 就是说在创建本地的vxlan设备时,并没有明确的指明通信的目的vxlan设备的信息。
    • 只有在真正通信的时候,通过某种方式,可以获取通信目的vxlan设备的信息,获取到对方的信息后,才能通信。
    • 方式一:(后续有案例介绍)
      • 比方说,在创建每一个vxlan设备的时候,将自己的vxlan设备信息,如IP,MAC,VNI以及所在宿主机节点的IP注册到存储里,如etcd里
      • 当某一个vxlan想跟目的vxlan进行通信的时候,就可以去etcd里进行查询,查询到目的信息后,就可以建立通信了。
      • flannel中的vxlan模式就是类似的原理
    • 方式二:(后续有案例介绍)
      • 比方说,在创建vxlan设备时,设置一个D类地址,如239.1.1.1
      • 当本地vxlan设备想跟目的vxlan设备进行通信时,第一次通信时,需要向239.1.1.1发送数据包,此数据包的目的就是获取目的vxlan设备的具体信息,
      • 239.1.1.1接收到数据包后,会通过多播的形式,发送数据包。
      • 感觉有点像,通过喇叭的形式,对外喊,寻找目的vxlan设备,目的vxlan设备接收到数据包后,发现是寻找自己的,就进行反馈数据包,将自己的IP,MAC,以及所占用的宿主机的IP信息反馈过去。

VXLAN是在底层物理网络(underlay)之上使用隧道技术,依托UDP层构建的overlay的逻辑网络,使逻辑网络与物理网络解耦。

其实,vxlan设备有点像网桥一样,可以以学习的方式学习到其他对端的IP地址,也可以直接配置静态转发。

4、vxlan解决了什么问题?为什么会出现vxlan?

VLAN技术的缺陷是VLAN header预留的长度只有12bit,故最多只能支持4096个子网的划分,无法满足云计算场景下主机数量。

VXLAN的报文头部有一个VXLAN标识(即VNI,VXLAN Network Identifier)有24bit,可以支持2的24次方个子网,

故可支持1600万个VXLAN的同时存在,远多于VLAN的4094个,因此可适应大规模租户的部署。

在创建vxlan时,会指定vni,一个vni可以认为是一个子网。

以VNI(virtual network identifier)区分不同子网,相当于VLAN ID;

也就是说,vxlan主要解决了vlan不能划分更多子网的问题。

5、VXLAN 协议原理简介

比方说,有一个新的业务,需要一个单独的网络进行测试,如果当前存在的网络满足要求的话,可以使用

但是,如果不满足呢?或者说,需要迁移当前服务器,迁移后的服务器是否还满足测试要求呢?

那么,怎么解决这个问题呢?

能不能在当前网络的基础上,在创建一个逻辑上的网络,无论底层原网络如何迁移变化,都不影响逻辑上的网络,最好了。

有点类似于容器,容器内部的变化一般情况下不会影响到宿主机的变化。

5.1、创建vxlan网络时,对原网络(现有网络)的要求?

  • 只要是三层网络可达(能够通过IP互相通信)的网络就能部署VXLAN。
    • 因为需要将vxlan产生的数据包封装到UDP数据包里,
    • UDP数据包,依赖原网络进行传输的
    • 创建UDP数据包时,需要设置网络层,即需要设置目的IP,源IP,因此,需要IP之间能够通信
  • 创建VXLAN隧道网络相比改造传统的二层或三层网络,对原有的网络架构影响较小。

5.2、如何通过vxlan设备进行组网?

  • vxlan网络是依赖当前环境中的网络的
  • 当前网络三层可达
  • 在当前网络所在的服务器节点上安装VTEP设备,安装了vtep设备的服务器之间就可以组建成vxlan网络
    • 没有安装vtep设备的服务器就不算vxlan网络
  • 在同一个服务器上可以创建多个vxlan设备
  • 同一个vxlan网络的vxlan设备的vni号是相同的
  • 不同的vni号,代表不同的vxlan网络,网络隔离。
  • 创建vxlan设备时,
    • 需要设置vni号
    • 静态方式获取目的vxlan设备的信息
      • 可以直接指定目的vxlan设备的信息
    • 动态方式获取目的vxlan设备的信息
      • 方式一:可以设置D类地址,通过D类地址来获取目的vxlan设备的信息
      • 方式二:每个vxlan设备创建时,将vxlan设备信息等注册到集中缓存,如etcd里,需要获取目的vxlan设备信息时,可以去etcd里查询

5.3、vxlan设备的作用?

负责VXLAN协议报文的封包和解包,

注意,不负责UDP报文的创建。

物理网络上可以创建多个VXLAN网络,可将这些VXLAN网络看作一个隧道,不同节点上的虚拟机/容器能够通过隧道直连。

通过VNI标识不同的VXLAN网络,使不同的VXLAN可以互相隔离。

5.4、VETP、VNI、TUNNEL概念简介

  • VTEP(VXLAN tunnel endpoints):
    • VXLAN网络的边缘设备,用来进行VXLAN报文的封包与解包
    • VTEP可以是网络设备(例如交换机),也可以是一台机器(例如虚拟化集群中的宿主机)。
  • VNI(VXLAN network identifier):
    • VNI是VXLAN的标识,是个24位整数,因此最大值是2的24次方,即16777216。
    • 如果一个VNI对应一个租户,那么理论上VXLAN可以支持千万级别的租户。
  • tunnel:
    • 隧道是一个逻辑上的概念,
    • 在VXLAN模型中并没有具体的物理实体相对应。
    • 隧道可以看作一个虚拟通道,VXLAN通信双方都认为自己在直接通信,并不知道底层网络的存在。
    • 从整体上看,每个VXLAN网络像是为通信的设备搭建了一个单独的通信通道,也就是隧道。

5.5、为什么说vxlan是隧道网络?或者 通过三层网络搭建虚拟的二层网络

在这里插入图片描述

vxlan设备之间通信时,他们以为自己都是在同一个局域网内部通信呢,

其实,他们产生的数据包被Linux内核封装到UDP数据包里,通过本地的对外网卡eth0发送。

Vxlan设备产生的数据包的最外层是MAC层,即,二层。

这些数据包被作为原始数据,封装到了UDP里,即,二层数据包依赖的是三层网络进行通信的。

那么,vxlan设备之间的通信,其实就是一种建立在原网络之上的逻辑网络;

在原网络之上,专门建立的一种逻辑网络。

这种逻辑网络,没有具体实体的线路,完全是每次通信时,才建立起亮点之间的逻辑通道。

6、vxlan报文结构介绍?

6.1、vxlan的整体报文结构,如下

在这里插入图片描述

6.2、假设网络拓扑如下:

在这里插入图片描述

V1_IP,表示Master节点上vxlan设备的的IP。

NS1_IP,表示ns1命名空间里veth1a设备的IP。

其他标识含义类似。

根据上面的网络拓扑,我们逐步解析vxlan的报文结构

6.3、vxlan报文结构,创建的先后顺序

在这里插入图片描述

如果你用代码进行解析时,

获取字节流后,先读取到的就是上图中最左侧的Ethernet头部,
即,

Ethernet头部—>读取IP头部—>读取UDP头部—>vxlan头部—>Ethernet头部—>读取IP头部—>原始数据

即,从左往右 依次解析。

6.4、vxlan报文结构,每一部分都是由谁产生的?

在这里插入图片描述

6.5、解析vxlan设备产生的数据包结构

在这里插入图片描述

注意,上面的IP头部,仅列出了主要属性。

实际IP头部占用的是20字节。

6.6、解析vxlan头部结构

在这里插入图片描述

6.7、解析外层结构

在这里插入图片描述

注意,上面的IP头部,仅列出了主要属性。
实际IP头部占用的是20字节。

7、解析一下vxlan报文结构中MTU为什么是1450?

通过命令创建vxlan设备时,如果没有显示的设置MTU的话,

默认MTU的值就是1450。

MTU就是在传输数据报文时,原始数据能够占用的最大字节数。

7.1、首先,看一下在vxlan数据报文中,MTU具体指的是那一部分

首先,看一下在vxlan数据报文中,MTU具体指的是那一部分。

在这里插入图片描述

并且,看一下左侧的MAC层,IP层,UDP层,VXLAN头部占用的字节数

7.2、计算一下vxlan设备的MTU值?

在这里插入图片描述

看一下,通过命令行方式创建的vxlan设备的MTU值?

在这里插入图片描述

7.3、可以计算一下,实际用户能够发送的原始数据最大字节数(仅供参考)

在这里插入图片描述

8、vxlan设备,当前的使用场景?

可以在以下网络模型中,找到vxlan设备的身影

  • flannel
  • calico
  • opensstack
    等等



<<零入门kubernetes网络实战>>技术专栏之文章目录


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

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

相关文章

Excel电子表格的PHP类库:PHP_XLSXWriter(大数据量报表、后台运行、浏览器下载)

Excel电子表格的PHP类库&#xff1a;PHP_XLSXWriter 一、PHP_XLSXWriter与PHPExcel的区别二、PHP_XLSXWriter的使用1.使用步骤2.后台下载3.浏览器下载4.封装函数 PHP_XLSXWriter 是一个用于生成 Microsoft Excel 2007 xlsx 文件的 PHP 库。XLSX 是一种用基于 XML 的开放式文件标…

chatgpt赋能python:Python多行缩进——提高代码可读性和效率的关键

Python多行缩进——提高代码可读性和效率的关键 众所周知&#xff0c;Python是一种缩进敏感的编程语言&#xff0c;它鼓励程序员使用缩进来表示代码块&#xff0c;而非传统的大括号或关键字。在Python中&#xff0c;缩进通过使用空格或制表符来实现&#xff0c;而且空格和制表…

深度剖析整形数据在内存中的存储

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习数据的存储。 让我们开启c语言学…

Linux命令(31)之watch

Linux命令之watch 1.watch介绍 linux命令watch是周期性的用来执行某命令&#xff0c;并把某命令执行结果输出到屏幕上。使用watch命令&#xff0c;可以周期性的监测并输出某命令的执行结果到屏幕上&#xff0c;省得手动一遍一遍运行某命令&#xff0c;提高工作效率。 2.watc…

PHP伪协议filter详解,php://filter协议过滤器

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 php://filter 一、访问数据流二、过滤数据流三、多…

[第一章 web入门]SQL注入-2

拿到题目后看提示&#xff0c;要自主访问两个页面 访问login.php后&#xff0c;是一个登录界面&#xff0c;直接测试注入类型 第一件事还是输入常用账户名admin&#xff0c;密码随便输入 回显账号或者密码错误 这种登录界面一般都是字符型注入&#xff0c;所以测试一下闭合符&a…

【力扣刷题 | 第七天】

前言&#xff1a; 今天我们将会进入栈与队列的刷题篇章&#xff0c;二者都是经典的数据结构&#xff0c;熟练的掌握栈与队列实现可以巧妙的解决有些问题。 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队…

野火Renesas R4M2 UDS诊断bootloader 升级MCU

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

从零开始Vue项目中使用MapboxGL开发三维地图教程(一)MapboxGL介绍以及前期vue项目的搭建

MapboxGL介绍以及前期vue项目的搭建 1、Mapbox-gl简介2、搭建vue项目2.1、创建vue项目2.2、注册mapbox官网2.3、mapbox-gl入门案例 3、Mapbox-gl地图主要配置参数说明 1、Mapbox-gl简介 Mapbox-gl是一个开源、基于webgl技术的前端地图类库。 地图数据渲染和可视化这块我们经常用…

chatgpt赋能python:如何培训Python?-从入门到专业化

如何培训Python&#xff1f;- 从入门到专业化 Python是一种高级编程语言&#xff0c;已被广泛应用于各种领域以及各种应用程序的开发中。如果你也想成为一名Python开发人员&#xff0c;有以下几种培训方法帮助你一步步实现你的目标。 1.自学Python 学习Python的最简单方法是…

【前端 - CSS】第 13 课 - CSS 应用案例 - 体育新闻

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 最近学习完了 CSS 的 引入方式、选择器 和 字体修饰属性 的相关知识点&#xff0c;然后运…

redis(一),redis简介,Linux下安装及基本配置

一.redis简介&#xff1a; 1.什么是redis Redis 是完全开源的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的 key-value 数据库。它属于NoSQL数据库。 2.NoSQL简介&#xff1a; NoSQL有两种说法&#xff0c;一般指的是非关系型数据库&#xff0c;另一种说法是说它是“…

xml parser - etree

import xml.etree.ElementTree as ET# https://docs.python.org/3/library/xml.etree.elementtree.html # https://zhuanlan.zhihu.com/p/502584681def main():tree ET.parse(./country_data.xml)# 获取根元素root tree.getroot()print("{} {}".format(type(root),…

chatgpt赋能python:Python3.7安装指南

Python 3.7 安装指南 Python是一种高级编程语言&#xff0c;被广泛应用于Web开发、数据科学、人工智能等领域。而最新版本的Python 3.7则提供了更加稳定、更加高效的开发环境。这篇文章将介绍如何在不同的操作系统中安装Python 3.7。 Windows系统安装 Python 3.7 在Windows系…

chatgpt赋能python:安装Platform模块——让Python更好用

安装Platform模块——让Python更好用 Python是一种跨平台的编程语言&#xff0c;可以在不同操作系统上使用。作为Python的一个标准模块&#xff0c;Platform模块可以帮助开发者轻松获取有关操作系统及其特征的信息。这篇文章将介绍如何安装Platform模块&#xff0c;并提供一些…

cxGrid自动保存当前单元格输入的数据

遇到的问题&#xff0c;利用cxGrid做数据录入界面&#xff0c;当用户在一个单元格中录入数据&#xff0c;没有回车&#xff0c;然后直接点工具条上的保存按钮&#xff0c;执行数据提交&#xff0c;结果当前输入的内容丢掉了&#xff0c;又回到输入前的值。 在群中求助&#xf…

axios实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台

文章目录 &#x1f4cb;前言&#x1f3af;demo 介绍&#x1f3af;后端与接口的调试&#x1f9e9;关于运行后端项目&#x1f9e9;关于接口的调试 &#x1f3af;功能分析&#x1f9e9;数据的展示与分页功能&#x1f9e9;添加功能&#x1f9e9;编辑功能&#x1f9e9;删除功能 &…

大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(一)

文章目录 写在前面整体效果开发所需环境开发工具需要具备的知识Node安装更改npm包安装的目录设置npm镜像vscode安装创建vue项目代码编写项目先体验注意写在前面 stable-diffusion-webui(以下简称sd)项目通过FastAPI对外提供了一系列的api用于开发者二次开发或者集成到自己的…

真正理解微软Windows程序运行机制——窗口机制(第三部分)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…

帆软报表二次开发 树组件节点上添加自己的按钮

我这里的需求是在树组件的子节点上加一个复制按钮。 先看效果 这是一颗多选树,用的是bi.tree_value_chooser_pane 这个组件,这个组件默认支持多选,它默认的效果为: 这个组件没有提供机制来自定义节点的渲染。 通过查找源码发现这个组件内部构建树是通过BI.$.fn.zTree来构…