写给NS新手的话(rong111)

昨天完成了毕业答辩.想想看自己从对ns一无所知到写出一个千行以上的协议,虽然谈不上什么了不起的成就,但毕竟自己是曾经在一个星期之内每天睡3个小时写程序的(当然,这也是因为作者临阵抱佛脚的坏习惯所致),当程序运行通过的一刹那,当波型出来的时候,还是有一种想大叫的冲动.回忆自己曾经走过的路,想告诉初学者一些东西,也算是对自己的一点交代吧.

首先,我选定ns2作为毕业设计题目是很早的,当时是指导老师指定的题目,但因为时间不紧,也没看太多.糗的是,指导老师突然出国了,虽然当时就有一种ft的感觉,但还没有意识到ns2的恶心性,选新的指导老师时还是做的ns2,而新的老师自己并不懂ns,且下面曾经的一个做ns的师兄已经工作,只留下一篇论文.这样,我赫然发觉我是专业里唯一一个做ns的,问的人都没有.

于是当然走了不少弯路.譬如为了掌握otcl,找到tcl语言的英文几百页的pdf,看了一半发觉不知所云,更恶心的是我那时还没意识到tcl对ns其实基本没用,浪费了许多时间.诸如此类.以下是一些经验之谈,给初学者.如果你是一个老油子,可以不用看了.

首先是教材的问题.第一本当然是<ns与网络模拟>,我认为学ns的中国人应该人手一本.倒不是说这本书有多好,它上面大部分东西都是直接翻译自ns官方手册.   而是,第一,这好象是唯一本能买到的中文ns书籍.如果我们不顶一下,以后就可能根本没有ns的中文书可看了.    第二,即使你英文很好(我英文应该不差了,GT都考过),牵涉到对ns2概念的一些理解,全看英文难保没有偏差,而且我们都知道,凡外国人写的程序教材,尤其是那些被称为经典的教材,c也好,c++也好,中国人看了总觉得有点怪,因为我们的思维方式好象是有些差异的.所以就象c的初学者要看谭浩强一样,这本书还是看看吧.   第三,这本书有些地方还是很有帮助的,如mflood协议,很简单的算法,却把添加协议的要素讲得很清楚,对入门而言,比自己去看一个ns自带协议要好.另外,这本书最有价值的可能是第六章对相关工具的介绍,非常有针对性,你基本上不用去找另外的介绍了.

但是,如果因为英语不好而只看中文.ns2是学不好的.也就只能按照示例运行几个tcl脚本.脚本还可以复制粘贴.如果这也称得上"研究",那也太水了.要深入了解ns2,自己写协议是应该的.而要写对协议,就必须看ns官方手册和源程序.基本上,你总能找到和你做的东西类似的源程序,有很大的参考价值.如果你找不到,如果你不是很牛,那建议你换个题目.因为ns2中很多的封装类如果没有相似的例子,你根本就不会知道怎么用.至于手册,由于中文书翻译得不错,所以更多时候是作为有问题时的查阅工具而不是教材可能会比较方便一些(当然这并不是说官方手册可以不看,这个查阅工具是你绝对需要的).

资料除了以上提到的以外,还有一些,在论坛里有.自己搜搜吧.有些还是很有用的.

对于初学者而言,ns2是一种很恶心的语言.原因是,ns2强大的原因在于它封装了很多针对网络的类,而对于学习的人来说,这也是困难所在.很多的变量类型和函数根本就不知道从哪里来,有什么用.为此,再次强调,有针对性地看源程序是必须的.另外.如果有些你认为和算法本身无关的东西,却在许多程序里面出现,那你最好照般下来.command函数的写法是一个最好的例子.另外.recv()函数是出发点,这一点对理解协议很有帮助.

下面说说网上帮助的问题,第一,ns官方的mail我没有用过,因为我做协议的时候时间已经比较紧,等不起,有谁用过不妨说一下效果好不好.第二,这个论坛好象是国内问题回复率最高的论坛了(感谢大侠们),我也是在网上胡搜搜到的.但是对于提问者来说,在提问之前你最好确定两件事: 一,你已经仔细翻过了ns手册,在论坛中搜索过你问题的关键字且没有答案.二,你的问题不是很白痴(我见过有人用语法问题来问的,而我在刚来的时候也问了几个令现在的我汗颜的问题),那样很不礼貌,也没人会理你. 另外,如果问题没有回答,即使很急,也不用发贴再催,更不要骂娘.要知道,论坛上其实没人有义务回答你的问题.好心人只是根据自己的经验指出你问题解决可能的方向,不可能去调试你的程序.如果没有回答则意味着你的问题每人遇到过.这样解决问题只能靠你自己.毕竟,学ns2自己不花时间是不行的.

最后,我是做路由协议的,因此给同样做这个的人一些建议.看协议除了mflood之外,aodv一般就够了.如果是传感器网络,diffusion中sink的描述也是不可少的.(diffusion3就算了,太长了),另外的协议比较繁,如果你不是从事这个协议的研究,没必要深入了解.就这些了.

posted on 2011-05-29 20:04  心月  阅读(605)  评论(1编辑  收藏  举报