一 :Cailico vxlan报文传输路径
从node3上podsrc寻找目标pod 的时候会走vxlan.calico路由
ip -d link show vxlan.calico
对照报文理解:
或者
在node3上arp缓存存有node7的mac地址;
在使用vxlan传输报文以后,vlan id已经明确,只需要确定传输端、接收端的udp端口、目标机器、源机器的IP地址、mac地址就可封装数据包;
这个协议费解的地方是L2、L3混杂;结合封包格式和抓包报文可以看到,原始L2帧是通过vxlan.calico实现的,在使用宿主机ip路由的前提下,通过arp 协议维护fdb表,达到在L2转发的目的。
回头看一下vxlan的一段定义,会加深一点印象;
VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连接到了一个虚拟的二层交换机的不同端口上,可以方便地通信。
其实calico解决的是地址分配和路由问题,并且提供了一种传输和路由实现的办法,基于协议格式、封包样式可以看到传输中的实现过程。
二: Cailico IPIP报文传输路径
这个图是别人画的,没有单独再画,可以看到报文转发路径;
Pod 与cali** 是通过link组对出现的;
如果通过其它pod ping node6上busybox-zxv52,就要通过本机路由,通过网络设备tun10;
Tunl0 负责具体的封包转发;
三:总结与分析
本来想从抓包、报文传输路径、内核协议栈几个步骤分析协议,对协议有一个深入的了解,但是分析以后又发现了几个问题:
①vxlan tun是隧道协议实现的网络设备,也是calico 设计实现的核心(昨天看到知乎上有一位大神手写代码实现了关键模块,很佩服),应不应该进一步往下挖;
②calico 在几种模式下对于BGP的使用,还有一些不是很清楚。