1-persistent-CSMA仿真
前言:本次仿真的实验是针对以下的题目,设计出一种CSMA协议的仿真,这是大三时的一次课程系统仿真!本次课程设计五月初开始,一直持续到考试结束(我们是7月12号结束考试,7月15号全校放假),历时两个多月。(一个学分的课我们搞了两个多月,这就可以看出其中的难度)7月15号之前都还有人在检查,不过代码能力强的人不需要花费这么多时间,一个班中好学生和差生都有,后面检查的肯定是那种没怎么弄的。好一点的一个月内还是能弄完的。大概就说这么多!下面看题:是不是题目一模一样呢! 为什么题目不会改变呢,因为老师知道你们百度不到,网上没有答案,你们得自己做。O(∩_∩)O哈哈~ 但这篇博客可能是个意外!
题目如图所示:(本来想用文字上传的,觉得文字上传太容易百度了,改用picture上传)
代码详情请见:
细节各位看代码,应该好懂,不懂就留言,if I have time,I will give you an answer,but that is rarely impossible。
So God bless for you!(自求多福)
以下是本文的最终结果图:
①当使用的退避机制为 随机指数退避时
②当使用的退避机制为 二进制指数退避时
再说一说故事的由来,也就是为什么要设计这个仿真。
本人本科学的是通信工程专业,在大三的时候,有一门通信系统仿真的课,这是这门课当中的一个课题。一个学分花了我两个多月的时间,不过我们班所有人都是这样,同样的课程,不一样的老师带,隔壁班最多两星期完事。为什么呢?因为我们老师要求严格,名师出高徒,咱们班在这个系统仿真课上学到的东西绝对要比隔壁班多!(但是苦逼的事咱们班大部分人以后不从事此专业相关的工作)。
具体讲一下我的故事:
当初我在网上找了一个代码,觉得很合适这个题目,但是要完成以上题目的要求,得认真看懂代码并做修改。看懂这个代码我花了两个星期左右的时间,最终看懂了之后并做修改,发现无论怎么改变覆盖范围的值结果不同节点仿真出来的都是一条一样的曲线。我把代码看懂后,看着有点结果了,(当时觉得这个结果可让我两个星期的时间打了水漂,出来这结果已经很不容易了,一个学分不想浪费太多的时间)就去找老师检查,想着老师可能会让我过,或者会给我一些修改意见。检查的时候我以为他会问我代码,跟他解释代码,谁知他问我为什么是相同的曲线,不同的覆盖范围结果应该是怎样的?我还以为他会给我建议,指导我。就这样回答不出来,当场就挂了。(不过还有第二次机会)当时我就懵逼了,担心他第二次会更严格,既然第一次没过那第二次就是不想让你过。后面连续的半个月不敢懈怠,别人每天日思夜想的是情郎或倩女,而我日思夜想的确是老师的课程系统仿真,做梦都被吓醒。哎,这半个月当中我有多次想换题目,因为代码结果始终不正确,其中了也看了看ALOHA协议的相关内容,ALOHA是最初的版本,CSMA或CSMA/CA协议都是ALOHA的后代。也找了ALOHA的一些代码,但是代码不是很符合题目的要求,要重新看又要花大量的时间,最后就定下心来写找个简单的CSMA协议来写,也就是1-persistent-CSMA协议,改代码我起码改了不下9个版本,因为感觉有bug,最终的版本肯定也有一些bug,但是只要完全弄懂,面对课程设计还是OK了的,下图是我的每一个版本的文件夹(看上去是不是很害怕,要改这么多次,下次我多创几个文件夹,假装自己改了很多次(#^.^#),其实这都是真正改过的版本)。CSMA/CA 协议的逻辑关系太复杂了,对于啥都没学过的我太难了。什么暴露站隐蔽站问题都要考虑,这个一考虑,基本所有的代码都要重写,并且其中的关系过于复杂,学识尚浅的我根本理解不过来。故事到此差不多就结束了。
下面讲一下我的感想:
通过这个过程,我不说我学到了多少的专业知识,我学到的东西对于我而言更重要的是其他方面的能力。比如说应对挫折的能力,这个能力对人一生的成长都是非常重要的。我不是说在这一次系统仿真就学到了应对挫折的能力,而是在这一过程中又经受到这个能力的训练,能力是一点一点的增强的。在此感谢某老师,我很敬佩您,在这个时代,真心全意为学生着想的老师并不多,老师这样做是为了让我们多学点知识,老师是为了我们的未来,但大部分人根本理解不到老师的这一点,虽然我也不能理解(因为我也想早点过啊,不想花太多的时间在这一个学分上面)。但是从老师的角度来看,他培养的是通信专业的学生,那么这个学生就必须具备这样的素质,所以就必须经受这样的历练,不然培养出来的学生没这个能力,那这个老师是怎么当的!所以说感谢某老师,您带出来的学生绝对是真刀真枪干出来的。特别是您的研究生,在多年之后会非常感谢您的。
下面给某学校的通信工程专业的某老师带的通信系统仿真的同学的建议:
如果你选择的也是此题目,如果你没有很强的代码能力,或者网上找不到合适的代码的,你最好选择ALOHA协议进行仿真,CSMA协议和CSMA/CA协议都是由ALOHA协议升级进化的版本。选择ALOHA相对比较简单些,但也不是那么简单的。也需要花点时间进行学习的,如果是某老师带的话,你必须学到你的脑海里,完全的弄懂它,不然你很难拿到这个学分。我的这个代码那,你们在网上都能找到,但是如果你们同时都用这个代码的话,那后面检查的人基本上会gg,你们自己看着办吧!
如果我哪天有时间或许会继续更新此文章,给大家讲解代码,but I think that is rarely impossible。
还是那句话 God bless for you!