【ryu控制器】ryu+mininet实现“最短路径”应用

RYU控制器是日本NTT公司负责研发的一款开源的SDN/OpenFlow控制器,这个控制器是取名于日本的‘flow’的意思,所以叫RYU,RYU控制器完全有python语言编写,和POX类似。RYU控制器现在支持到OpenFlow版本的1.0,1.2,1.3,1.4版本,同时支持与OpenStack结合使用,应用 于云计算领域。RYU采用Apache Licence开源协议标准。

github源码地址。,自带的应用都放置在ryu/app文件夹下。
这样运行应用:

sudo ryu-manager yourapp.py

“最短路径”应用的实现

参考了http://csie.nqu.edu.tw/smallko/sdn/ryu_sp13.htm和李呈大神的一些资料。
源码放在https://github.com/wangdongxuking61/ryu/edit/master/shortest_path_app文件夹下,shortest_path_app/下的重要文件:

  • create_topo.py:使用mininet的python API实现的自定义拓扑python代码
  • sp.py:使用ryu的python API实现的“最短路径”应用
  • MiniNAM.py+conf.config:MiniNAM就是在mininet的基础上,增加了运行时的界面,用法和mininet没区别

使用步骤:

  1. 打开terminal,先运行ryu控制器进程,启动“最短路径”的应用

    cd shortest_path_app/
    sudo ryu-manager sp.py --observe-links
    

    其中的--observe-links必须要加:自动下发LLDP,用于拓扑发现,否则看不到链路信息

  2. 再打开另一个terminal,运行MiniNAM以启动mininet,创建自定义的网络。使用--controller=remote参数连接上一步启动的ryu的控制器进程

    cd shortest_path_app/
    # 可以把python MiniNAM.py替换成mn,因为MiniNAM.py只是mininet加个界面
    sudo python MiniNAM.py --custom create_topo.py --topo mytopo,3 --controller=remote
    

    创建完成后如下图(通过手工拖拽,重新布局了),MiniNAM这货有一点不好的就是各个节点是随机布局,比较乱,要手动拽,比较烦。布局的代码在def createNodes(self)函数中,希望作者有空改一下,orz...

  3. 在mininet中,host互相ping或iperf发流,测试“最短路径应用”。在mininet窗口下让h1 ping h2,发送4个包

    mininet>h1 ping -c 4 h2
    

    可以看到包走的路径是h1->s1->s4->s5->s3->h2,为什么不走跳数更少的s1->s2->s3呢?

    因为在sp.py的_packet_in_handler(self, ev)函数中,大约170行左右,我写死了交换机间的边权。在162行,其它节点间的边权为0。

    带权图如下:

    image.png

    像我这样强制指定链路的边权是不合理的,可以通过某些手段测得链路的实际物理值:带宽、时延等。

    本ryu应用计算的是单源最短路,使用的是networkx提供的nx.shortest_path函数(sp.py的183行),读者可以换成其它的算法,例如多路径算法floyd,实现multipath。如果知道链路的带宽,还可以运行带宽相关的算法,比如实现负载均衡类型的应用。

  • 备注1:这个拓扑图有环,arp我也没做什么处理。没出现风暴是因为网络小,在风暴来临之前就获知了h2的mac地址。。。后来我用wireshark抓包看了下,是出现了好多次无用arp,像我说的那样,网络小,在风暴来临前已经获知mac地址了。如果拓扑图大的话一定要使用生成树协议。。。

  • 备注2:其实整体过程并不是很难理解,在h1使用arp协议获知h2的mac地址之后,h1发出icmp ping包,s1不知道怎么处理,让控制器c0做决定,然后c0掐指一算,最短路径是1-4-5-3,让s1发给s4,s4也不知道怎么处理,还发给c0,c0还要算一次最短路,让s4发给s5,如此下去,因此要调用多次最短路径。不过也就最开始这样,等以后多发几次包,交换机流表项都配置好后,以后就不用问控制器了,交换机就知道该送到哪个交换机了。不过如果链路的权重变化了,那就要通知控制器,重新计算最短路,这样就麻烦了。。。之前的流表项要删,控制器配置新的流表项。具体怎么实现“权重改变,通知控制器”我也在想该怎么实现。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342