我正在尝试使此拓扑内的主机相互ping通,但出现“目标主机不可达”。我相信这可能是一个循环性问题,因为似乎有大量流量通过接口流动(如ifconfig报告的那样),但我找不到正确解决(或精确地)解决问题的 how 足够)。欢迎指针!
这是我要实现的拓扑:
这是我使用的脚本:
#!/usr/bin/python.
from mininet.net import Mininet
from mininet.node import Node
from mininet.link import Link
from mininet.log import setLogLevel, info
from mininet.cli import CLI
#from mininet.link import TCLink
class DC:
def __init__(self, net, dc_id, host_count):
self.hosts = []
self.switch = net.addSwitch('sd%d' % dc_id)
for i in range(host_count):
h = net.addHost('h%d_%d' % (dc_id, i))
net.addLink(h, self.switch)
self.hosts.append(h)
if __name__ == '__main__':
setLogLevel('info')
info('*** Test\n')
# Mininet.init()
net = Mininet() #link=TCLink)
dc0 = DC(net, 0, 3)
dc1 = DC(net, 1, 3)
dc2 = DC(net, 2, 3)
bss0 = net.addSwitch('bss0')
bss1 = net.addSwitch('bss1')
net.addLink(bss0, dc0.switch)#, delay='5ms')
net.addLink(bss0, dc1.switch)#, delay='10ms')
net.addLink(bss0, dc2.switch)#, delay='15ms')
net.addLink(bss1, dc0.switch)#, delay='15ms')
net.addLink(bss1, dc1.switch)#, delay='10ms')
net.addLink(bss1, dc2.switch)#, delay='5ms')
cc0 = net.addHost('cc0')
net.addLink(bss0, cc0)
cc1 = net.addHost('cc1')
net.addLink(bss1, cc1)
c0 = net.addController('cm0')
net.start()
# print h1.cmd('ping -c1', h2.IP())
CLI(net)
net.stop()
运行脚本时,我无法从cc0 ping到h0_0:
mininet> cc0 ping h0_0
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.10 icmp_seq=10 Destination Host Unreachable
关于为什么我认为这可能是一个循环性问题:
mininet> cc0 ifconfig
cc0-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 255.0.0.0 broadcast 10.255.255.255
inet6 fe80::3c21:40ff:febc:452e prefixlen 64 scopeid 0x20<link>
ether 3e:21:40:bc:45:2e txqueuelen 1000 (Ethernet)
RX packets 2974099 bytes 232235782 (232.2 MB)
该接口收到了232 MB的ping数据包,这有点儿多了,所以我认为网络是由于圆形性问题而泛滥的,该问题可能是由于网络高度连接这一事实造成的。
通过注释掉一些链接来简化网络拓扑可以解决此问题,并且似乎可以确认问题出在循环中:
net.addLink(bss0, dc0.switch)#, delay='5ms')
# net.addLink(bss0, dc1.switch)#, delay='10ms')
# net.addLink(bss0, dc2.switch)#, delay='15ms')
# net.addLink(bss1, dc0.switch)#, delay='15ms')
net.addLink(bss1, dc1.switch)#, delay='10ms')
net.addLink(bss1, dc2.switch)#, delay='5ms')
仍然,我想保留这些多个链接和拓扑。 Mininet中处理此类路由的首选方法是什么?一个例子将是最受欢迎的。
感谢您的帮助, 约安娜