VXLAN 网络中报文转发过程
本文分享自天翼云开发者社区《VXLAN 网络中报文转发过程》,作者:刘****林
以同网段的 VM 间互通简单介绍 VXLAN 网络中的报文转发过程。

1.VM1 发送目的地址为 VM2 的报文。
2.VTEP1 收到该报文后进行 VXLAN 封装,封装的外层目的 IP 为 VTEP2。封装后的报文,根据外层 MAC 和 IP 信息,在 IP 网络中进行传输,直至到达对端VTEP2。
3.VTEP2 收到报文后,对报文进行解封装,得到 VM1 发送的原始报文,然后将其转发至VM2。
二层 MAC 学习及 BUM 报文转发
1.二层MAC学习
在 VXLAN 网络中,同子网虚拟机的互通是通过查找 MAC表进行转发。如下图所示,VM1 给 VM2 发送报文时,经过 VTEP1 转发,VTEP1 上需要学习到 VM2 的 MAC 地址。
最初的 VXLAN 标准并没有定义控制平面,VTEP 之间无法传递学习到的主机 MAC 地址。但是 VXLAN 有着与传统以太网非常相似的 MAC 学习机制,当 VTEP接收到VXLAN 报文后,会记录源 VTEP 的 IP、虚拟机 MAC 和 VNI 到本地 MAC表中,这样当 VTEP 接收到目的 MAC 为此虚拟机的 MAC 时,就可以进行 VXLAN 封装并转发。

以 VTEP2 学习到 VM1 的 MAC 过程为例:
1.VM1 发送目的地址为 VM2 的报文。
2.VTEP1 接收到报文后,进行 VXLAN 封装,并将其转发至 VTEP2。同时,VTEP1可以学习到 VM1 的 MAC 地址、VNI、入接口。
3.VTEP2 接收到报文后,对报文进行解封装。同时,VTEP2 可以学习到 VM1 的MAC 地址、VNI、入接口(为 VTEP1)。
经过上述流程,VTEP1 和 VTEP2 可以学习到 VM1 的 MAC 地址。VTEP1 和 VTEP2学习到 VM2 的 MAC 地址过程与之类似。
1.BUM 报文转发
前面描述的报文转发过程都是已知单播报文转发,如果 VTEP 收到一个未知地址的BUM 报文(广播、组播、未知单播)如何处理呢。与传统以太网 BUM 报文转发类似,VTEP 会通过泛洪的方式转发流量。

以上图中 VM1 想向 VM2 发送报文为例,因为 VM1 不知道VM2 的 MAC 地址,所以会发送 ARP 广播报文请求 VM2 的 MAC 地址。
1.VM1 发送 ARP 广播请求,请求 VM2 的 MAC地址。
2.VTEP1 收到 ARP 请求后,因为是广播报文,VTEP1 会在该 VNI 内查找所有的隧道列表,依据获取的隧道列表进行报文封装后,向所有隧道发送报文,从而将报文转发至同子网的 VTEP2 和 VTEP3。
3.VTEP2 和 VTEP3 接收到报文后,进行解封装,得到 VM1 发送的原始 ARP报文,然后转发至 VM2 和 VM3。
4.VM2 和 VM3 接收到 ARP 请求后,比较报文中的目的 IP 地址是否为本机的IP地址。VM3 发现目的IP不是本机IP,故将报文丢弃;VM2 发现目的IP是本机IP,则对 ARP 请求做出应答。
由于此时 VM2 上已经学习到了 VM1 的 MAC 地址,所以 ARP 应答报文为已知单播报文,转发流程与前文描述的一致,此处不在赘述。
5.VM1 收到 VM2 的 ARP 应答后,就可以学习到VM2的MAC 地址。后续的转发流程同已知单播转发流程一致。
VXLAN 网络中报文转发过程的更多相关文章
- 用寄快递模拟数据在网络中的传送过程,发送一个ip数据报到接受这个ip数据报经历的过程
发送一个ip数据报到接受这个ip数据报经历的过程 好比寄一个快递的过程 这个包裹一共有三层, 这个包裹的最里面是数据,数据 第二层写着目的ip地址和源ip地址,即收件人和发件人的姓名 第三层也就是最外 ...
- OSI7层封包解包动态图-数据在网络中的传输过程.gif
- H3C 多路径网络中环路产生过程(3)
- H3C 多路径网络中环路产生过程(2)
- H3C 多路径网络中环路产生过程(1)
- H3C 单路径网络中环路产生过程(3)
- H3C 单路径网络中环路产生过程(2)
- H3C 单路径网络中环路产生过程(1)
- 一文带你读懂什么是vxlan网络
一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...
- VXLAN学习之路-结合VRF在Linux中实践VXLAN网络
一.概述 近期在在搞网络安全HCIE.CISP的认证的事,顺便将VXLAN技术再次系统的学习一下,学习过程中看到云原生实验室里的一篇文章,就是关于VXLAN在Linux系统中的实践,感觉文章写得很好, ...
随机推荐
- ubuntu如何安装redis
在终端下输入 sudo apt search redis 查找一下发现了 redis-server 如果找不到 你可能需要使用 update 更新一下了 sudo apt-get update 然后就 ...
- 使用越来越广泛的2FA双因素认证,缘何越发受到推崇?
大家好,我是vzn呀,又见面了. 随着互联网在生活方方面面的应用,日常少不了要登录各个网站或者应用.或者是银行转账等需要验证自己身份的场景.从早期的输入账号密码来登录,到后来普遍开始通过手机验证码进行 ...
- Python源码分析2 - 一个简单的Python程序的执行
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...
- PYENV安装与使用
1.概述 pyenv 是一个python的版本管理软件,通过他,我们可以 方便的安装python 的版本,切换版本,解决版本不同带来问题. 2.安装pyenv 我们可以通过链接下载pyenv http ...
- 德承工控机DX-1200 成功适配2024年6月6日发布的国产开源系统OpenEuler 24.03 LTS
基础软件双子星:欧拉系统(OpenEuler)& 鸿蒙系统(OpenHarmony),鸿蒙系统常应用在华为的手机和平板电脑上,大众也较为熟悉,是面向消费电子产品领域的系统:而欧拉系统则是面向服 ...
- ArkTs布局入门02——弹性布局(Flex)
1.概述 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列.对齐和分配剩余空间.容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为 ...
- Shiro简单入门+个人理解(2)
今天开始了Shiro认证及授权的部分,认证及授权是Shiro的主要功能,虽然Shiro还具有加密等功能,但在实际开发时,很少会使用到,在公司一般都有自己的一套加密方式,具体我就不说话了,毕竟有保密协议 ...
- 在 IdentityServer4 中创建客户端
创建客户端 在创建了 IdentityServer4 服务器之后,我们可以准备从获取一个访问令牌开始. 1. 客户端凭证式验证流 在 OpenID Connect 中,最为简单的验证方式为客户端凭借方 ...
- gradle 很棒
一直以为 gradle 就是 maven 的一个易读版,表达上比 XML 更精简了,实际上还是maven,似乎没有存在的必要. 但是,万万没想到,这玩意儿竟然是一个语言,竟然可以调试!也就是说,它不是 ...
- .net core 文本比对的一个诡异设计
9-11 发现的,过久了都忘了,记一下 string s = Encoding.ASCII.GetString(new byte[] { 0x57, 00, 0x49, 00, 0x4e, 00, 0 ...