写一个mininet的拓扑代码,传统网络拓扑不使用远程控制器,拓扑包含两个主机,两个路由器,路由器中配置转发规则
以下是一个包含两个主机和两个路由器的Mininet拓扑代码,路由器中配置了转发规则:
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
class MyTopo(Topo):
def build(self):
h1 = self.addHost('h1')
h2 = self.addHost('h2')
r1 = self.addHost('r1')
r2 = self.addHost('r2')
self.addLink(h1, r1, bw=10)
self.addLink(h2, r2, bw=10)
self.addLink(r1, r2, bw=5)
r1.cmd('sysctl net.ipv4.ip_forward=1')
r2.cmd('sysctl net.ipv4.ip_forward=1')
r1.cmd('ip route add 10.0.2.0/24 dev r1-eth1')
r2.cmd('ip route add 10.0.1.0/24 dev r2-eth1')
r1.cmd('ip route add 10.0.3.0/24 via 10.0.1.2')
r2.cmd('ip route add 10.0.4.0/24 via 10.0.2.2')
if __name__ == '__main__':
topo = MyTopo()
net = Mininet(topo=topo, controller=None, link=TCLink)
net.start()
h1, h2, r1, r2 = net.get('h1', 'h2', 'r1', 'r2')
h1.cmd('ip addr add 10.0.1.1/24 dev h1-eth0')
h2.cmd('ip addr add 10.0.2.1/24 dev h2-eth0')
r1.cmd('ip addr add 10.0.1.2/24 dev r1-eth1')
r1.cmd('ip addr add 10.0.3.1/24 dev r1-eth2')
r2.cmd('ip addr add 10.0.2.2/24 dev r2-eth1')
r2.cmd('ip addr add 10.0.4.1/24 dev r2-eth2')
h1.cmd('ping -c3 10.0.2.1')
h2.cmd('ping -c3 10.0.1.1')
net.stop()
在这个拓扑中,我们创建了4个节点:h1、h2、r1和r2。我们分别使用addHost方法添加这些节点。
我们使用addLink方法将h1和r1、h2和r2、以及r1和r2之间连接起来,分别指定了带宽为10Mbps和5Mbps的链路。
在路由器r1和r2上,我们使用了sysctl命令来打开IP转发功能。我们还为r1和r2上的接口添加了IP地址,并且为它们配置了路由表。在r1上,我们将10.0.3.0/24网络的流量转发到10.0.1.2,而在r2上,我们将10.0.4.0/24网络的流量转发到10.0.2.2。
在主机h1和h2上,我们使用了ip addr add命令为它们的接口添加了IP地址,并使用ping命令测试了它们之间的连通性。
最后,我们使用net.start()和net.stop()来启动和停止Mininet拓扑。由于我们没有使用远程控制器,所以我们将controller参数设为None。我们还指定了link参数为TCLink,以使用TC(Traffic Control)来模拟网络延迟和丢包。
原文地址: https://www.cveoy.top/t/topic/rNj 著作权归作者所有。请勿转载和采集!