zoukankan      html  css  js  c++  java
  • 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)

    666.png

    上一节我们创建了虚拟路由器“router_100_101”,并通过 ping 验证了 vlan100 和 vlan101 已经连通。

    本节将重点分析其中的原理。

    首先我们查看控制节点的 linux bridge 结构发生了什么变化。

    vlan101 的 bridge 上多了一个 tape17162c5-00,从命名上可以推断该 TAP 设备对应 router_100_101 的 interface (e17162c5-00fa)。

    vlan100 的 bridge 上多了一个 tapd568ba1a-74,从命名上可以推断该 TAP 设备对应 router_100_101 的 interface (d568ba1a-740e)。

    当前网络结构如图所示:

    但发现一个问题:两个 TAP 设备上并没有配置相应的 Gateway IP。

    如果没有 Gateway IP,router_100_101 是如何完成路由的呢?

    答案是: l3 agent 会为每个 router 创建了一个 namespace,通过 veth pair 与 TAP 相连,然后将 Gateway IP 配置在位于 namespace 里面的 veth interface 上,这样就能提供路由了。

    通过 ip netns 查看 namespace:

    router 对应的 namespace 命名为 qrouter-<router id>。

    通过 ip netns exec <namespace name> ip a 命令查看 router_100_101 namespace 中的 veth interface 配置。

    namespace 中有两个 interface:

    1. qr-e17162c5-00 上设置了 Gateway IP 172.16.101.1,与 root namespace 中的 tape17162c5-00 组成 veth pair。

    2. qr-d568ba1a-74 上设置了 Gateway IP 172.16.100.1,与 root namespace 中的 tapd568ba1a-74 组成 veth pair。

    网络结构如图所示:

    namespace 中的路由表也保证了 subnet_172_16_100_0 和 subnet_172_16_101_0 之间是可以路由的。

    分析到这里,我们已经搞清楚 router_100_101 是如何打通 vlan100 和 vlan 101 了。

    但这里有一个关键问题需要进一步分析:
    为什么要把 router_100_101 放到 namespace 中?

    下一节我们将详细分析这个问题。

     

    blob.png

  • 相关阅读:
    Smobiler 仿知乎APP个人主页
    smobiler仿自如app筛选页面
    Smobiler 仿美柚APP个人主页
    谈谈网络协议 – 物理层
    谈谈网络协议 – 路由
    谈谈网络协议 – 基础知识
    Flutter(三):Flutter App 可行性分析
    Flutter(二):编写第一个Flutter App
    Flutter(一):MAC的Flutter安装指南
    Jetpack新成员,Paging3从吐槽到真香
  • 原文地址:https://www.cnblogs.com/CloudMan6/p/5975106.html
Copyright © 2011-2022 走看看