一 实验拓扑
本实验算法思想:首先找到源主机到目的主机的k条最短路径,然后基于k条路径,选取带宽最优的路径进行路由。
可以发现主机h1与主机h3到主机h2跳数最短路径有3条:[s1,s3,s6,s9],[s1,s5,s8,s9],[s1,s5,s6,s9]。
二 实验过程
1 启动ryu控制器
启动ryu控制器:
$ ryu-manager shortest_forwarding.py --observe-links --k-paths=3 --weight=bw
其中,–k-paths表示选择k条最短路径,–weight=bw表示服务质量为带宽。
输出信息:
loading app shortest_forwarding.py
loading app ryu.topology.switches
loading app ryu.controller.ofp_handler
instantiating app None of NetworkAwareness
creating context network_awareness
instantiating app None of NetworkMonitor
creating context network_monitor
instantiating app shortest_forwarding.py of ShortestForwarding
instantiating app ryu.topology.switches of Switches
instantiating app ryu.controller.ofp_handler of OFPHandler
2 创建网络拓扑
根据上图创建网络拓扑.py文件并运行:
$ python3 topo1.py
其中topo1.py:
#!/usr/bin/env python
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call
def myNetwork():
net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c=net.addController(name='c',
controller=RemoteController,
ip='127.0.0.1',
protocol='tcp',
port=6633)
info( '*** Add switches\n')
s7 = net.addSwitch('s7', cls=OVSKernelSwitch,dpid='0000000000000007')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch,dpid='0000000000000001')
s5 = net.addSwitch('s5', cls=OVSKernelSwitch,dpid='0000000000000005')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch,dpid='00