You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Mininet创建A<->B<->C三节点拓扑,使流量始终经B转发

实现Mininet三节点拓扑并强制A-C流量经B转发

方案思路

要实现A与C的流量必须通过B转发,最直接的方式是构建链式拓扑(A-B-C)或星型拓扑(A、C均连接到B),物理上切断A与C的直接链路,同时确保节点路由配置默认走中间节点B。以下以链式拓扑为例提供Python实现代码。

完整代码实现

from mininet.net import Mininet
from mininet.node import Controller, OVSKernelSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info

def createTopology():
    # 初始化网络,使用OVS交换机和默认控制器
    net = Mininet(controller=Controller, switch=OVSKernelSwitch)

    info('*** 添加控制器\n')
    net.addController('c0')

    info('*** 添加节点\n')
    # 创建三个主机节点A、B、C
    A = net.addHost('A', ip='10.0.0.1/24')
    B = net.addHost('B', ip='10.0.0.2/24')
    C = net.addHost('C', ip='10.0.0.3/24')

    info('*** 添加交换机\n')
    # 创建两个交换机,分别连接A-B和B-C
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')

    info('*** 添加链路\n')
    # 构建A-s1-B-s2-C的链式连接,确保A与C无直接链路
    net.addLink(A, s1)
    net.addLink(s1, B)
    net.addLink(B, s2)
    net.addLink(s2, C)

    info('*** 启动网络\n')
    net.start()

    info('*** 配置静态路由(强制流量走B)\n')
    A.cmd('ip route add 10.0.0.3/24 via 10.0.0.2')
    C.cmd('ip route add 10.0.0.1/24 via 10.0.0.2')

    info('*** 进入命令行界面\n')
    CLI(net)

    info('*** 停止网络\n')
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    createTopology()

关键说明

  1. 拓扑结构:通过交换机将A与B、B与C分别连接,A和C之间无直接链路,所有流量必须经过B节点转发。
  2. 路由配置:手动添加静态路由,强制A访问C时将数据包发往B,C访问A时同理,进一步确保流量路径。
  3. 验证方法:
    • 启动网络后,在CLI中输入A ping C,验证连通性
    • 输入A traceroute C,可看到数据包路径为A -> B -> C,确认流量经过B节点

星型拓扑替代方案

若想用星型拓扑,只需将代码中的交换机和链路部分修改为:

# 修改交换机和链路部分
s1 = net.addSwitch('s1')
net.addLink(A, s1)
net.addLink(B, s1)
net.addLink(C, s1)

这种情况下,需保留静态路由配置,强制A、C的流量通过B转发,避免交换机直接转发A与C的数据包。

内容的提问来源于stack exchange,提问作者D. Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:34