Hi!欢迎来到Tungsten Fabric架构解析内容的第三篇,本文将详细介绍Tungsten Fabric vRouter的体系结构。
Tungsten Fabric架构解析系列文章,由TF中文社区为你呈现,旨在帮助初入TF社区的朋友答疑解惑。我们将系统介绍TF有哪些特点、如何运作、如何收集/分析/部署、如何编排、如何连接到物理网络等话题。

先来看一张Tungsten Fabric vRouter功能组件的概念视图。
Tungsten Fabric架构解析丨详解vRouter体系结构

vRouter代理在主机操作系统的用户空间中运行,而转发器可以是内核模块,在使用DPDK时在用户空间中运行,或者在可编程网络接口卡(也称为“智能NIC”)中运行。这些选项在后续文章中有更详细的描述,这里说明了更常用的内核模块模式。

代理与控制器保持会话,并发送其需要的VRF、路由和访问控制列表(ACL)的信息。代理将信息存储在自己的数据库中,并使用该信息配置转发器。接口连接到VRF,每个VRF中的转发信息库(FIB)都配置有转发条目。

每个VRF都有自己的转发表和流表,然而MPLS和VXLAN表在vRouter中是全局的。转发表包含目的地的IP和MAC地址的路由,并且IP到MAC关联用于提供代理ARP功能。当VM接口启动时,vRouter选择MPLS表中的标签值,并且这些值仅对该vRouter本地有效。

在一个Tungsten Fabric域内,对于不同vRouters中同一虚拟网络的所有VRF来说,VXLAN网络标识符是全局的。

每个虚拟网络都有一个分配给它的默认网关地址,并且每个VM或容器接口都会在初始化时获得的DHCP响应中接收该地址。当工作负载将数据包发送到其子网外的地址时,它将为与网关IP的IP地址对应的MAC进行ARP,并且vRouter以其自己的MAC地址进行响应。

因此,vRouters支持所有虚拟网络的完全分布式默认网关功能。

详细的vRouter数据包处理逻辑

流出VM和流入VM的数据包的逻辑详细信息略有不同,以下两张图和说明中对此进行了描述。
Tungsten Fabric架构解析丨详解vRouter体系结构

当从VM通过虚拟接口发送数据包时,转发器接收该数据包后,首先检查接口所在的VRF流表中是否存在与数据包的五元组(包括协议、源和目标IP地址、源和目标TCP或UDP)匹配的条目。

如果这是流中的第一个数据包,则不会有条目,转发器通过pkt0接口将该数据包发送给代理。代理根据VRF路由表和访问控制列表确定流的操作,并使用结果更新流表。动作可以是DROP、FORWARD、NAT或MIRROR。

如果要转发数据包,转发器将检查目标MAC地址是否是其自己的MAC地址,如果VM在目标位于VM的子网外时将数据包发送到默认网关。在这种情况下,将在IP转发表中查找目的地的下一跳,否则将使用MAC地址用于查找。虽然在计算节点内,但vRouter在这里执行物理路由器的IRB(集成路由和桥接)功能。
Tungsten Fabric架构解析丨详解vRouter体系结构

当数据包从物理网络到达时,vRouter首先检查数据包是否具有支持的封装。如果不是,则将数据包发送到主机操作系统。

对于基于UDP的MPLS和基于GRE的MPLS,标签直接标识VM接口,但VXLAN需要由VLAN网络标识符(VNI)标识的VRF中查找内部报头中的目标MAC地址。

一旦识别出接口,如果没有为接口设置策略标志(指示允许所有协议和所有TCP / UDP端口),则vRouter可以立即转发数据包。否则,使用五元组来查找流表中的流,并使用与针对传出分组所描述的逻辑相同的逻辑。

相同子网虚拟机之间的数据包流

当VM中的应用程序首先将数据包发送到另一个VM时,发生的操作顺序如下图所示。

起点是两个VM均已启动,并且控制器已将L2(MAC)和L3(IP)路由发送到两个vRouter,以启用VM之间的通信。发送VM前尚未将数据发送到其他的VM,因此之前没有通过DNS解析目标名称。
Tungsten Fabric架构解析丨详解vRouter体系结构

  1. VM1需要向VM2发送数据包,因此首先查找自己的DNS缓存以获取IP地址,但由于这是第一个数据包,因此没有条目。
  2. VM1在其接口启动时向DHCP响应中提供的DNS服务器地址发送DNS请求。
  3. vRouter捕获DNS请求并将其转发到在Tungsten Fabric控制器中运行的DNS服务器。
  4. 控制器中的DNS服务器以VM2的IP地址响应。
  5. vRouter将DNS响应发送给VM1。
  6. VM1需要形成以太网帧,因此需要VM2的MAC地址,它会检查自己的ARP缓存,但没有条目,因为这是第一个数据包。
  7. VM1发出ARP请求。
  8. vRouter捕获ARP请求,并在其自己的转发表中查找IP-VM2的MAC地址,并在控制器为VM2发送的L2 / L3路由中找到关联。
  9. vRouter使用VM2的MAC地址向VM1发送ARP回复。
  10. VM1的网络堆栈中发生TCP超时。
  11. VM1的网络堆栈重试发送数据包,这次在ARP缓存中找到VM2的MAC地址,并可以形成以太网帧并将其发送出去。
  12. vRouter查找VM2的MAC地址并找到封装路由,vRouter构建外部头部,并将结果数据包发送到S2。
  13. S2上的vRouter对数据包进行解封装,并查找MPLS标签以识别将原始以太网帧发送到的虚拟接口,以太网帧被发送到接口并由VM2接收。

不同子网虚拟机之间的数据包流

将数据包发送到不同子网中的目标时,顺序是相同的,只是vRouter作为默认网关响应。VM1将在以太网帧中发送数据包,其中包含默认网关的MAC地址,其IP地址是在VM1启动时vRouter提供的DHCP响应中提供的。

当VM1对网关IP地址发出ARP请求时,vRouter将使用自己的MAC地址进行响应。当VM1使用该网关MAC地址发送以太网帧时,vRouter使用帧内数据包的目的IP地址在VRF中查找转发表以查找路由,该路由将通过封装隧道连接到正在运行目标的主机。

更多Tungsten Fabric解析文章
第一篇:TF主要特点和用例
第二篇:TF怎么运作

关注微信:TF中文社区
Tungsten Fabric架构解析丨详解vRouter体系结构