首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

运维新手入门——网络虚拟化Vxlan

一、经典网络

(一)二三层区分

处于同一子网时进行二层通信,属于不同子网时是三层通信

如果源 IP 与目的 IP 处于一个子网,直接将包通过交换机发出去。

如果源 IP 与目的 IP 不处于一个子网,就交给路由器去处理。

是否处于同一个子网通过PC的子网掩码来进行比对。

如果 A 给 C 发消息,A 和 C 的 IP 地址分别 & A 机器配置的子网掩码,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器,否则发给交换机。

(二)VLAN

此外,可以通过VLAN隔离广播域,使得交换机的广播范围限制在同VLAN内

(三)二层通信

PC1和PC2在同一个网段,PC1 ping PC2

PC1首先查看自己的ARP缓存表,确定其中是否包含有PC2对应的ARP表项。如果找到了对应的MAC地址,则PC1直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。

如果PC1在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为PC1的IP地址和MAC地址,目标IP地址和目标MAC地址为PC2的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的PC2会对该请求进行处理。

ARP请求报文

PC2比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即PC1)的IP地址和MAC地址存入自己的ARP表中(其它同网段的PC也会缓存)。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

ARP响应报文

PC1收到ARP响应报文后,将PC2的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

(四)三层通信

PC1和PC3不在同一个网段,PC1 ping PC3

PC1发现PC3和自己不在同一个网段,决定将报文发给默认网关192.168.1.10

PC1通过ARP找到默认网关的MAC地址

ARP请求报文

ARP回应报文

PC1源 MAC 地址与网关 MAC 地址封装在数据链路层头部,又将源 IP 地址和目的 IP 地址(注意这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化)封装在网络层头部,然后发包。

交换机 1收到数据包后,发现目标 MAC 地址是 4444.4444.4444,转发给路由器

数据包来到了路由器 ,发现其目标 IP 地址是 192.168.2.1,查看其路由表,匹配端口号,获取192.168.2.1的MAC地址,将其从端口发出

交换机 3 收到了数据包,匹配MAC地址,从端口把数据包发出去。

PC3最终收到了对应的数据包。

二、VXLAN网络

(一)基本概念

vxlan主要用在云数据中心,虚拟机跨三层迁移的场景,用于解决vlan模式下迁移范围有限的情况。如下图,各个PC就好像连在同一个交换机上一样。

在实际的二层通信时,可以通过arp获取mac进行通信,而arp会被三层设备隔离,因此要实现跨三层的二层通信,可以通过隧道技术,将原始报文包起来。

VTEP是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行。VTEP既可以是一台独立的网络设备,也可以是在服务器中的虚拟交换机。VXLAN的报文增加如下

VXLAN Header:增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。

UDP Header:VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。

Outer IP Header:封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。

Outer MAC Header:封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)为到达目的VTEP的路径中下一跳设备的MAC地址。

(二)通信过程

二层通信

PC1 PING PC2

PC1发送ARP报文请求PC2

VTEP收到ARP请求后,根据配置判断报文需要进入VXLAN隧道。确定了报文所属BD后,也就确定了报文所属的VNI。同时,VTEP学习PC1的MAC、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP会对报文进行封装,这里封装的外层源IP地址为本地VTEP的IP地址,外层目的IP地址为对端VTEP的IP地址,外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

报文到达对端VTEP后,VTEP对报文进行解封装,得到V原始报文。同时MAC地址、VNI和远端VTEP的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。PC2接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址,发现目的IP是本机IP,则对ARP请求做出应答。

由于此时PC2上已经学习到了PC1的MAC地址,所以ARP应答报文为单播报文。

VTEP接收到ARP应答报文后,识别报文所属的VNI。同时,VTEP学习PC2的MAC、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP对报文进行封装。外层源IP地址为本地VTEP的IP地址,外层目的IP地址为对端VTEP的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

报文到达对端VTEP后,VTEP对报文进行解封装,得到原始报文。同时,VTEP学习PC2的MAC地址、VNI和远端VTEP的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP将解封装后的报文发送给PC1。

三层通信

PC1 PING PC3 (不同网段)

PC1和PC2分别属于192.168..0.0/24网段和192.168.1.0/24网段,且分别属于VNI 1000和VNI 1000。PC1和PC2对应的三层网关分别是VTEP3上BDIF 10和BDIF 20的IP地址。VTEP3上存在到192.168..0.0/24网段和192.168..1.0/24网段的路由。

PC1和PC2处于不同网段,PC1需要先发送ARP广播报文请求网关(BDIF 10)的MAC。获得网关的MAC后,PC1先将数据报文发送给网关;之后网关也将发送ARP广播报文请求PC2的MAC,获得PC2的MAC后,网关再将数据报文发送给PC2。ARP请求即二层通信流程,不在赘述。现在假设PC1和PC2均已学到网关的MAC、网关也已经学到了PC的MAC。

PC1先将数据报文发送给网关。

VTEP1收到数据报文后,识别此报文所属的VNI,并根据MAC表项对报文进行封装。这里封装的外层源IP地址为本地VTEP的IP地址,外层目的IP地址为对端VTEP的IP地址,外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

报文进入VTEP3,VTEP3对报文进行解封装,得到PC1发送的原始报文。然后,VTEP3会对报文做如下处理:

VTEP3发现该报文的目的MAC为本机BDIF 10接口的MAC,而目的IP地址为192.168.1.1的,所以会根据路由表查找到192.168.1.1的下一跳。

发现下一跳为192.168.1.10,出接口为BDIF 20。此时VTEP3查询ARP表项,并将原始报文的源MAC修改为BDIF 20接口的MAC,将目的MAC修改为PC2的MAC。

报文到BDIF 20接口时,识别到需要进入VXLAN隧道(VNI 6000),所以根据MAC表对报文进行封装。这里封装的外层源IP地址为本地VTEP的IP地址,外层目的IP地址为对端VTEP的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。

封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

报文到达VTEP2后,VTEP2对报文进行解封装,得到内层的数据报文,并将其发送给PC2。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OefkGIqGx0O634o5Sts3KN5Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券