这两个project的实现需要广播,也就是需要以https://www.bilibili.com/read/cv9546894为基础。

为什么这两实验需要广播?因为要做链路层发现,洪泛的时候要用到MST。

https://zhidao.baidu.com/question/367633876776495564.html

之所以把DFS算法和Dijkstra算法放在一起讲,是因为这两个project实现起来都很简单 和找最x路有关,虽然很少用DFS算法来找最短路,但是project的内容就是这么强行让人搞。

事先声明,这里都用7结点网络为例,而且不会放代码。(因为上面那个链接已经把绝大部分的关键的代码贴出来了,之后这些实验只是对那些代码进行一定的修改,在贴代码那真的没意思了)

先来看看DFS算法实验内容:

1、在Ryu上实现深度优先遍历算法,并找出任意两个主机间的最短路和最长路(这里只讲实现寻找到最长路。因为对于最短路,只要把找最长路步骤中的不等号方向改改就行了,原理一致);

2、用最长路来配置通信业务;

3、把配置通的业务在可视化平台上进行展示。

实现建议:

1、尽量使用非递归版本的DFS算法,因为它所需要的资源会比递归版本的DFS算法少(虽说我在实现的时候用的是递归,哈哈哈,( ̄ε(# ̄)打脸 )

2、如果你遇到的是仁慈的助教和老师,他们应该会让你在一个小拓扑(比如这个7结点的)里面跑算法(因为比如在24结点里面跑DFS,运行时间会比较长,跑出来的路有上万条),此时你可以在考虑在Kruskal算法结束后立马对网络中所有的任意两个点使用DFS(小网络算得很快)并把结果保存起来,在ping的时候直接调用结果即可,比那两个年轻人啪的一下站起来还快;但是如果助教和老师不允许改网络规模,那就不能像刚刚那样投机取巧了,只能乖乖地在PacketIn事件中,根据解包出来的src和dst,仅仅对这两个点调用DFS算法。不过这种情况下一般(就是当你不是使用性能极好的电脑的时候)第一次ping必丢包,因为等结果出来前,数据包早就die了(https://baike.baidu.com/item/TTL/130248),但如果计算结果正确,第二次ping就OK了。

3、直接使用Kruskal算法算出来的MST当作通信链路即可,反正助教不看代码。 不是,年轻人不讲武德。不要耍这些聪明,小聪明蛤。即使不看代码也能识破这一招。这只需在之前那条创建仿真网络的指令后面加上 --link=tc即可。

这样创建出来的网络中的链路不再是理想链路,而且ping的时候会显示这个包在链路中跑了多久。

举个栗子:

先看看用Kruskal算出来的MST来ping h1 和h7:
这条路单向总时延为16ms。16*2 = 32ms

看第二次ping的时延信息,略大于32ms

使用DFS算法算出h1到h7最长路,并以此最为通信链路:
这条路的单向总时延是49ms。49*2 = 98ms。(还有,是paths不是pathes)
看第二次ping的时延信息,略大于101ms

所以到底是否正确配置链路,一看就知道了。总而言之,不要耍小聪明。

4、独立再写一个可以进行可视化的脚本。因为networkx的窗口弹出来之后呀,Ryu和Mininet之间的连接貌似会断开,导致流表下发失败,但是图还是可以看的。(其实如果你相信自己的手速的话可以不需要独立写一个可以可视化的脚本——在networkx的窗口弹出来的瞬间,将其关闭,即可)

Dijkstra算法实验内容

1、使用Dijkstra算法计算任意两点之间的最短路(这里意味着,使用Dijkstra算法求解单源单宿最短路哦。算法的结束判定条件需要进行一定的修改(当然,不改也可));

2、使用最短路配置任意两点间1的通信业务;

3、将所有业务在可视化平台上展示。

实现建议

1、使用循环桶。简单好写,时间复杂度和空间复杂度都很低;

2、如果是使用循环桶的亲,这边建议开创一个变量记录桶中总共的元素个数。若个数为零,可以直接停止Dijkstra算法了。虽然在这个实验中,这一步略显多余,但自我感觉这样会比较好。。。(防止进入死循环,抛弃这一步的话,在最大流的实验中很可能就会进入这种死循环);

3、因为Dijkstra算法复杂度很低,所以助教和老师必然会让该算法在一个较大的网络上跑,所以不能在Kruskal算法结束后便开始该算法(其实也可以,如果助教比较耐心,而且验收的时候不怕尴尬的话),而是应该在知道了包的源和汇才进入算法;

4、举个栗子:如果这个包的源是h22,汇是h33,那么调用Dijkstra算法后可以算出h22 ~> h33的最短路。先把这条路保存下来,以便之后再次使用。把路反过来,就能找到h33 ~> h22的最短路了。这个做法可以减小运算时间,降低丢包率;

5、这里同样可以使用 --link=tc来推测链路是否配置出错哦。

一些我遇到的坑

1)在python中对列表用append之后,append进列表的是变量的地址,当变量的值改变后,对应的,列表中的值也会变。当想某个值并入列表后不被修改,应该使用S.append(copy.deepcopy(A)) (注:需要导入copy包。S表示某个被操作的列表,A为你想并入S的变量,deepcopy在某些情况可以改用copy,即S.append(copy.copy(A)),至于这个“某些情况”是个啥,感兴趣的xdm可以自己百度一下。这个语句是python2的语法,python3的话,好像是S.append(copy(A)))。

2)PacketIn事件处理的一些细节。在datapath.ports中有一个端口为4294967294。这个端口似乎是用不上的。递包时需注意。

通信网实验_DFS算法_Dijkstra算法_Mininet_Ryu相关推荐

  1. dijkstra算法_Dijkstra算法详细(单源最短路径算法)

    介绍 对于 dijkstra 算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解 bfs和dfs ,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原 ...

  2. 计算机网络rsa算法,计算机网络安全实验新报告--非对称密码算法RSA.doc

    计算机网络安全实验新报告--非对称密码算法RSA 网络安全实验报告 学院 网络工程专业 班 学号 姓名 成绩评定_______ 教师签名 实验 2 题目 非对称密码算法RSA 课程名称 网络安全 PA ...

  3. 大林算法计算机控制实验报告,大林算法

    南京邮电大学自动控制实验报告 实验六 大林算法 一.实验目的 1.掌握大林算法的特点及适用范围. 2.了解大林算法中时间常数T对系统的影响. 二.实验仪器 1.EL-AT-III型计算机控制系统实验箱 ...

  4. c语言 k最近邻分类算法代码,实验二 K-近邻算法及应用

    实验二 K-近邻算法级应用 一.实验目的 1.理解K-近邻算法原理,能实现算法K近邻算法: 2.掌握常见的距离度量方法: 3.掌握K近邻树实现算法: 4.针对特定应用场景及数据,能应用K近邻解决实际问 ...

  5. python算法实验是什么_PCA 算法实验代码(python)

    [实例简介] 本实验,利用PCA 算法,对据人脸数据集进行特征提取,选择少量特征便能得到理想的结果,实验验证采用欧式距离 [实例截图] [核心代码] pca算法实验 └── pca算法实验 ├── a ...

  6. 智能优化及其应用——课程实验(粒子群算法)

    目录 前言 一.粒子群算法原理 二.粒子群算法建模 三.Python编程实现 0.优化问题 1.定义PSO类 2.定义适应度函数 3.定义迭代运行函数 4.定义结果输出函数 5.编写main函数 6. ...

  7. 大林算法计算机控制实验报告,实验二 大林算法实验报告

    实验二 大林算法实验 1. 实验目的 (1)理解大林算法的基本原理. (2)掌握大林算法的设计过程. 2. 实验仪器 (1) MATLAB 6.5软件 一套 (2) 个人PC机 一台 3. 实验原理 ...

  8. 20172328 蓝墨云实验——三种查找算法练习

    20172328 蓝墨云实验--三种查找算法练习 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:2018年10月1 ...

  9. 广州大学2020操作系统实验二:银行家算法

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

最新文章

  1. SharePreference工具类
  2. 备份与恢复oracle,oracle 备份与恢复
  3. 姿态估计开源项目汇总
  4. 记:返回方法参数的值(或多个值),
  5. spring6:bean的生命始末方法
  6. Google官方下拉刷新组件---SwipeRefreshLayout
  7. 分摊、分配、定期重过账
  8. Nsis 使用1-- 依条件显示自定义页面 custom page on condition
  9. leetcode - 70. 爬楼梯
  10. 数据从机房迁移到阿里ECS弹性云
  11. Window+Anaconda3+TensorFlow少挖坑安装
  12. imx8qm HDMI-TX调试
  13. 高斯求积分公式matlab,matlab高斯积分公式
  14. java程序员挣外快_Java程序员如何赚外快
  15. C语言回溯算法求幂集,回溯法与树的遍历 - 求幂集
  16. kali linux暴力破解攻击
  17. 怎么调出全局搜索_eclipse全局搜索快捷键是什么
  18. 2022年陕西最新建筑八大员(质量员)模拟考试题库及答案解析
  19. 机器学习中baseline,benchmark,backbone的学习记录
  20. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)A——完全k叉树

热门文章

  1. 基于Sharfetter-Gummel和改进的Sharfetter-Gummel计算对流扩散方程的通量(Matlab代码实现)
  2. dubbo分布式日志调用链追踪
  3. 高数数学——多元函数微分学
  4. 相册型PPT制作指导
  5. 最新修复H5抑云熬夜打卡定制版对接微信登录+免签支付源码+
  6. 大数据最佳实践-kafka
  7. The 2021 ICPC Asia Regionals Online Contest (II)
  8. 全球及中国无钥匙启动系统芯片行业研究及十四五规划分析报告
  9. SkyWalking--使用/教程/实例
  10. 网络团购商业模式如何运作才能成功