from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.link import Link
from mininet.log import setLogLevel, info

class MyTopo(Topo):

    def __init__(self):

        # 初始化拓扑
        Topo.__init__(self)

        # 添加主机
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')

        # 添加交换机
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        s3 = self.addSwitch('s3')
        s4 = self.addSwitch('s4')

        # 添加连接
        self.addLink(h1, s1)
        self.addLink(h1, s2)
        self.addLink(h2, s3)
        self.addLink(h2, s4)

        self.addLink(s1, s2)
        self.addLink(s2, s3)
        self.addLink(s3, s4)
        self.addLink(s4, s1)

        # 设置交换机的路由规则
        s1.setIP('10.0.1.1', 24)
        s2.setIP('10.0.2.1', 24)
        s3.setIP('10.0.3.1', 24)
        s4.setIP('10.0.4.1', 24)

        s1.cmd('route add -net 10.0.2.0/24 gw 10.0.1.2 dev s1-eth1')
        s1.cmd('route add -net 10.0.3.0/24 gw 10.0.4.2 dev s1-eth3')

        s2.cmd('route add -net 10.0.1.0/24 gw 10.0.2.2 dev s2-eth2')
        s2.cmd('route add -net 10.0.4.0/24 gw 10.0.3.2 dev s2-eth3')

        s3.cmd('route add -net 10.0.2.0/24 gw 10.0.3.1 dev s3-eth1')
        s3.cmd('route add -net 10.0.1.0/24 gw 10.0.4.1 dev s3-eth2')

        s4.cmd('route add -net 10.0.3.0/24 gw 10.0.4.2 dev s4-eth1')
        s4.cmd('route add -net 10.0.2.0/24 gw 10.0.1.1 dev s4-eth2')

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

    topo = MyTopo()

    net = Mininet(topo=topo, controller=None)

    net.start()
    info('*** Running CLI\n')
    NodeCLI(net)
    net.stop()

在这个拓扑中,我们使用了四个交换机和两个主机,主机和交换机之间使用了 Link 连接。每个交换机都有两个端口连接主机,两个端口连接其他的交换机。在拓扑中,我们没有使用远程控制器,而是将路由和路由规则直接加到了交换机上。这个拓扑对于学习网络编程和网络拓扑结构非常有用,可以帮助我们更好地理解网络的工作原理。

Mininet 拓扑代码示例:两个主机、四个路由器,无远程控制器

原文地址: https://www.cveoy.top/t/topic/lDH9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录