flannel原理之vxlan模式

vxlan模式

vxlan是一种overlay技术,跟之前提到的udp模式思路是类似,但是具体实现不太一样:

  1. udp模式是在用户态实现的,数据会先经过tun网卡,到应用程序,应用程序再做隧道封装,再进一次内核协议栈,而vxlan是在内核当中实现的,只经过一次协议栈,在协议栈内就把vxlan包组装好
  2. udp模式的tun网卡是三层转发,使用tun是在物理网络之上构建三层网络,属于ip in udp,vxlan模式是二层实现,overlay是二层帧,属于mac in udp
  3. vxlan由于采用mac in udp的方式,所以实现起来会设计mac地址学习,arp广播等二层知识,udp模式主要关注路由

关于交换机以及网桥,mac地址相关的文章可以查看docker网络之网桥

flannel vxlan原理

vxlan是一种虚拟隧道通信技术,通过三层网络搭建虚拟的二层网络,与tap隧道有点相似,不过tap的虚拟交换机功能要在用户层实现。vxlan同样是基于udp的(为什么很少看到基于tcp的隧道?)

vxlan在内核当中实现,当数据包使用vxlan设备发送数据时,会打上vlxan的头部信息,在发送出去,对端解包,并根绝VNI把原是报文发送到目的服务器。

看起来很简单,这里面有两个最基本的问题:

  1. 由于是隧道技术,overlay层使用的是二层转发,那么overlay就需要填充二层mac地址
  2. 假设已经完成了mac地址填充,那么就涉及到underlay包发到对端的地址的问题。

只要解决了这两个问题,vxlan通信理论上就没问题。

flannel会操作三个表,路由表,arp表和二层转发表fdb。

为了让对端数据从vtep设备发出,封装成vxlan,需要添加路由表,但是和udp隧道不一样的是,udp隧道的tun网卡可以不填ip(linux),vtep是填充了一个32位掩码的ip了,vxlan的路由不仅指定了发送网卡,也指定了下一跳为对端vtep的ip,

你可能感兴趣的:(网络,linux,服务器,dpdk,运维)