在这篇文章中,我们将看到VM生成的数据包如何能够到达另一个VM或外部资源,Neutron使用OpenContrail插件的上下文中的关键概念/组件是什么。

我们将重点介绍OpenContrail,它如何实现覆盖以及它提供的工具来检查/解决数据包的转发方式。

在开始之前,我将简要介绍一下OpenContrail的关键概念。

Virtual networks, Overlay with OpenContrai

对于OverlayOpenContrail使用MPLS,L3VPNsMPLS EVPN来解决l3覆盖和l2覆盖。OpenContrail中有很多组件,但我们将关注两个关键组件 : controllerthe vRouter.

对于控制平面,每个控制器使用BGPXMPP协议充当BGP路由反射器。BGP用于控制器和物理路由器之间。控制器和vRouters之间使用XMPP。XMPP协议传输BGP路由公告以及其他一些非路由需求的信息。

对于数据平面,OpenContrail支持用于隧道的GRE / VXLAN / UDP。OpenContrail要求网关路由器支持以下功能:

在这篇文章中,我们将重点关注数据平面区域。

包的旅程

为了展示数据包的旅程,让我们使用以下拓扑,我们在两个不同的网络上有两个虚拟机,这要归功于路由器。

假设我们通过相应地设置安全组来允许ICMP数据包,我们可以从vm1vm2开始ping 。

OpenContrail中有许多内省工具可用于清楚地了解数据包的转发方式。

vm1vm2之间启动ping ,我们可以逐步检查数据包的去向。

由于VM不在同一网络上,因此它们都将使用其默认网关。本地vRouter用自己的MAC应答默认网关IP的ARP请求。

现在我们已经看到数据包将被转发到本地vRouter,我们将检查vRouter将如何转发它们。

因此,首先通过浏览在托管我们的VM的计算节点上运行的vRouter代理内省Web界面来检查数据平面层,地址为http:// <vrouter agent ip>:8085 / agent.xml,一般情况下可以通过计算节点的IP地址来访问

有很多子接口,但我们只使用其中的三个:

  • VrfListReq,http://<vrouter agent ip>:8085/Snh_VrfListReqWhic为您提供相关的网络和VRF。对于给定的VRF - 让我们说单播VRF(ucindex) - 我们可以看到所有的路线。

  • ItfReq,http://<vrouter agent ip>:8085/Snh_ItfReqWhich为您提供vRouter处理的所有接口。
  • MplsReq,http//<vrouter agent ip>:8085/Snh_MplsReqWhich为给定的vRouter提供所有关联MPLS Label / NextHop

由于XSL样式表,这些接口只是XML文档呈现,因此可以通过某些监视脚本轻松处理。

我们可以从接口(ItfReq)内省页面开始,找到与VM1对应的TAP接口。TAP的名称包含中子端口ID的一部分。

在界面旁边,我们看到与该界面所属的网络相关联的VRF名称。在同一行,我们有一些其他信息,安全组,浮动ips,VM ID等。

单击VRF链接将我们带到此VRF的索引页面。我们看到我们根据其类型链接到VRF:单播,多播,第2层。默认情况下,OpenContrail不处理第2层。如前所述,来自虚拟机的大多数第2层流量都被本地捕获vRouter充当ARP响应者。但是仍然需要处理一些像广播这样的特定数据包,这就是为什么存在特定的第2层VRF。

单击ucindex(Unicast)列中的链接,我们可以看到此vRouter处理的虚拟网络的所有单播L3路由。由于vm1应该能够达到vm2,我们应该看到IP为vm2的路由。

由于这个接口,我们看到为了达到IP 192.168.0.3这是我们的vm2的IP ,数据包将通过GRE隧道转发,其端点是托管vm2的计算节点的IP 。这就是我们在“ dip ”(目标IP)字段中看到的内容。我们看到数据包将封装在VXLAN数据包中。MPLS标签为16,如标签栏中所示。

好的,我们在代理级别看到了数据包将如何转发,但我们可能想要检查数据路径方面。OpenContrail为此提供命令行工具。

例如,在代理的情况下,我们可以看到vRouter内核模块和关联的VRF处理的接口。

我们在此索引3处具有TAP接口,并且相关联的VRF为数字1。

现在让我们检查一下这个VRF的路线。为此,我们使用rt命令行。

为了知道如何转发数据包,我们必须检查用于此路由的NextHop。

我们有几乎相同的代理人给我们的信息。在Oif字段中,我们有一个接口,将数据包发送到另一个计算节点。感谢vif命令行,我们可以获得有关此接口的详细信息。

由于数据包将通过bond1.89接口,因此tcpdump应该确认我们上面描述的内容。

如隧道端点所示,数据包将直接转发到托管目标VM的计算节点,而不是使用第三方路由设备。

另一方面,第二计算节点上的vRouter将接收封装的数据包。根据MPLS标签,它在MPLS Label / NextHop上进行查找,正如我们在内省时所看到的那样。

正如我们在这里看到的,Label 17的NextHop字段是我们第二个VM的TAP接口。在数据路径方面,我们可以检查相同的信息。检查MPLS Label / NextHop表:

最后是NextHop和带有以下命令的接口:

这篇文章只是概述了数据包如何从一个节点转发到另一个节点,以及可用于故障排除目的的接口/工具是什么。OpenContrail的一个有趣之处在于,几乎所有组件都有自己的内省界面,可以在故障排除会话期间为您提供很多帮助。正如我们所看到的,路由完全分布在OpenContrail中,每个vRouter使用众所周知的路由协议(如BGP / MPLS)处理部分路由,这证明了它们的扩展能力。

opencontrail—VXLAN模式下数据包的传输过程的更多相关文章

  1. Linux内核--网络栈实现分析(七)--数据包的传递过程(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7545855 更多请查看专栏,地 ...

  2. 主动模式下FTP的详细工作过程(转) 挺详细

    主动模式下FTP的详细工作过程   PORT FTP是常用的FTP工作方式,当客户端的连接请求到来时,FTP服务器会利用默认的21端口与客户端建立连接,该连接属于命令通道,利用该通道来下达控 制指令: ...

  3. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的”(上 ...

  4. Linux网络 - 数据包的接收过程【转】

    转自:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后 ...

  5. [转]Linux网络 - 数据包的接收过程

    转, 原文: https://segmentfault.com/a/1190000008836467 ------------------------------------------------- ...

  6. [转]Linux网络 - 数据包的发送过程

    转, 原文:https://segmentfault.com/a/1190000008926093 -------------------------------------------------- ...

  7. Linux内核--网络栈实现分析(二)--数据包的传递过程(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7492423 更多请看专栏,地址 ...

  8. CCNA - Part10 数据包的通信过程

    这篇文章主要是对数据包在同网段和不同网段的转发流程梳理,使用 ping 命令进行实际抓包测试. 网关的概念: 对于像 PC 等终端设备来说,通过交换机可以实现同网段的通信.但如果想要给其他网段发生数据 ...

  9. ovs 数据包的处理过程

    Openvswitch的内核模块openvswitch.ko会在网卡上注册一个函数netdev_frame_hook,每当有网络包到达网卡的时候,这个函数就会被调用. static struct sk ...

随机推荐

  1. WPF 禁用TextBox的触摸后自动弹出虚拟键盘

    前言 & 问题 如下截图,TextBox,在触摸点击后,会自动弹出windows的虚拟键盘. 如何,禁用键盘的自动弹出? 调用虚拟键盘 通过调用TapTip.exe或者osk.exe,主动弹出 ...

  2. 并发concurrent---2

    背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 使用ThreadLocal可以实现线程范围内共享变量,线程A写入的值 ...

  3. oracle学习笔记(六) JDBC使用

    JDBC使用 1. 导包 直接使用IDEA导入依赖包即可 新建一个lib,把jar包放在这里 2. 加载驱动 Class.forName("oracle.jdbc.driver.Oracle ...

  4. 001. Java内存中的字符编码

    Java内存中的字符编码 Unicode字符集及utf-8 .utf-16.utf-32 等字符编码方式 字符集:字符表示的数字集合,元素称为码点或码位: 字符编码:字符实际的储存表示: 码点:一个码 ...

  5. 《JavaScript高级程序设计》笔记:DOM2和DOM3(十二)

    DOM1级主要定义的是HTML和XML文档的底层结构.DOM2级和DOM3级在这个结构基础上引入了更多的交互能力,也支持更高级的XML特性.为此DOM2级和DOM3级分为了很多的模块(模块直接具有某种 ...

  6. arcgis api 3.x for js 入门开发系列十八风向流动图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  7. Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

    Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...

  8. 章节十、8-XPath---如何构建有效的XPath

    以下演示操作以该网址中的内容为例:https://learn.letskodeit.com/?_ga=2.143454972.85111248.1555037144-697706367.1554889 ...

  9. .Net Core 在Linux服务器下部署程序--(4). 前端ReactWeb应用部署

    确认第二步中的软件已经安装完成 Nodejs前端Web服务器 Zip与UnZip压缩包软禁 nrm前端包源管理器 PM2前端Web程序守护进程 创建部署文件夹 如果已经执行过( 3. 租户平台后端程序 ...

  10. Maven settings.xml

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...