Vxlan学习笔记2
抓包的一些分析
测试环境如下:
VTEP1:192.168.83.96
VTEP2:192.168.83.97
VNI:100
VM1:10.0.0.1
VM2:10.0.0.2
图中可见vxlan内部的原始数据帧被打上了vxlan头部,再被封装在udp中被继续传输。
MAC地址的学习
以ARP请求和答应报文转发流程为例,图是搬运的(
- VM_A向VM_C发起通信,由于不知道对方MAC地址,因此发送源MAC为MAC_A、目的MAC为全F、源IP为IP_A、目的IP为IP_C的ARP广播报文,请求VM_C的MAC地址。
- VTEP_1收到ARP请求后,根据入接口的配置判断报文需要进入VXLAN隧道。确定报文所属的VNI。同时,VTEP_1学习MAC_A、VNI和报文入接口,并记录在本地MAC表中。然后VTEP_1开始封装报文,由于没有VM_C的对应VTEP信息,因此会向网络中其余VTEP广播。
VTEP_1封装好后向两个对端VTEP都发送了对应的数据包(这里用到了头端复制的技术),此时的数据包IP目的地址分别为对端VTEP的地址,MAC地址为下一条MAC地址。 - 报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。同时,VTEP_2和VTEP_3学习VM_A的MAC地址、VNI和远端VTEP的IP地址,并记录在本地MAC表中。之后,VTEP_2和VTEP_3配置对报文进行相应的处理并在对应的二层域内进行广播寻找VM_C。
VM_B和VM_C接收到ARP请求后,由于VM_B发现目的IP不是本机IP,故将报文丢弃;VM_C发现目的IP是本机IP,则对ARP请求做出应答。
- 由于此时VM_C上已经学习到了VM_A的MAC地址,所以发送报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A的单播报文。
- VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI。同时,VTEP_3学习MAC_C、VNI和报文入接口,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。
这里封装好的数据包源IP地址为本地VTEP的IP地址,目的IP地址为对端VTEP_1的IP地址。 - 报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时,VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。
VM_A收到报文后,学习到了VM_C的MAC地址,途中的VTEP设备也学习到了相应的对应关系,就可以开始正常通信了。
补充一个名词解释
BD(Bridge-Domain,桥接域):没找到什么官方解释,但是在一些文档上是与“大二层”关联起来的。
_(:3 」∠)_