下面是一个不使用远程控制器的传统拓扑,包含 2 个路由器和 4 个主机。每个路由器连接 2 台主机,每台主机属于不同的网段。路由器中设置了转发规则,以实现不同网段之间的通信。

from mininet.net import Mininet
from mininet.node import Node
from mininet.topo import Topo
from mininet.link import TCLink

class MyTopo(Topo):
    def __init__(self):
        # Initialize topology
        Topo.__init__(self)

        # Add hosts
        h1 = self.addHost('h1', ip='10.0.1.1/24')
        h2 = self.addHost('h2', ip='10.0.1.2/24')
        h3 = self.addHost('h3', ip='10.0.2.1/24')
        h4 = self.addHost('h4', ip='10.0.2.2/24')

        # Add switches
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')

        # Add links
        self.addLink(s1, h1)
        self.addLink(s1, h2)
        self.addLink(s2, h3)
        self.addLink(s2, h4)

        self.addLink(s1, s2, bw=1000)

        # Set routing rules
        s1.setIP('192.168.1.1', 24)
        s2.setIP('192.168.2.1', 24)

        s1.cmd('route add -net 10.0.2.0/24 gw 192.168.1.2')
        s2.cmd('route add -net 10.0.1.0/24 gw 192.168.2.2')

if __name__ == '__main__':
    topo = MyTopo()
    net = Mininet(topo=topo, link=TCLink)
    net.start()
    net.pingAll()
    net.stop()

在这个拓扑中,s1 和 s2 是两个路由器,分别连接着 h1、h2 和 h3、h4 这四个主机。h1 和 h2 属于 10.0.1.0/24 网段,h3 和 h4 属于 10.0.2.0/24 网段。s1 的 IP 地址是 192.168.1.1,s2 的 IP 地址是 192.168.2.1。为了实现不同网段之间的通信,需要设置转发规则。

在 s1 中,添加了一条路由规则,将 10.0.2.0/24 网段的数据包发送到网关 192.168.1.2。这个网关是 s2 的 IP 地址,因为 s2 连接着 10.0.2.0/24 网段的主机。在 s2 中,也添加了一条类似的路由规则,将 10.0.1.0/24 网段的数据包发送到网关 192.168.2.2。这个网关是 s1 的 IP 地址,因为 s1 连接着 10.0.1.0/24 网段的主机。

这样,当 h1 向 h3 发送数据包时,数据包会先到达 s1。s1 根据转发规则,将数据包发送到 s2。s2 收到数据包后,会将数据包发送给 h3。同样地,当 h4 向 h2 发送数据包时,数据包会先到达 s2。s2 根据转发规则,将数据包发送到 s1。s1 收到数据包后,会将数据包发送给 h2。通过这种方式,实现了不同网段之间的通信。

Mininet 构建传统网络拓扑:2 个路由器,4 个主机,不同网段通信

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

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