2013年5月6日

(转)记录队列长度的方法

摘要: 最近做实验需要记录DropTail和RED队列长度数据。书上的方法是:set q_ [[$ns link $r1 $r2] queue]set queuechan [open q-$par1-$par2.tr w]$q_ trace curq_$q_ attach $queuechan其中,$par1分别可以设置为DropTail和RED。但是只有RED能够顺利运行并且记录下当前队列长度,格式为Q 0.0342079 1Q表示为当前队列,第二列为time,第三列是对列长度,然而运行DropTail则提示$q_ attach $queuechan出错。上网搜了下,用别的记录队列的方法重新编写了, 阅读全文

posted @ 2013-05-06 16:23 原来... 阅读(287) 评论(0) 推荐(0) 编辑

(转)NS2无线网络遗失模型

摘要: 柯志恒的NS2仿真实验十八所作的是无线网络封包传输遗失模型的实验。1、目标 (1)介绍无线网络丢包模型 (2)了解群体广播(multicast)与单点传播(Unicast)的传输模式对于丢包率的影响 2、基础知识 (1)无线网络丢包模型 一般来说,当数据包在无线网络上传输时,会发生丢包的原因大致有两个: a、拥塞遗失(Congestion Loss),发生原因主要是当网络上的数据传输量过大,导致网络设备传送处理时不及时,使得设备中的队列(Queue)缓冲空间不足,而必须将部分的数据包丢弃。 b、无线遗失(Wireless Loss),发生的主要原因是无线网络的传输信道(Chann... 阅读全文

posted @ 2013-05-06 16:22 原来... 阅读(1029) 评论(0) 推荐(0) 编辑

Scheduler:Event UID not valid(转)

摘要: 今天做了柯志亨老师的实验23,比较不同的无线网络路由,DSDV/AODV/DSR。按照书上的要求写了脚本和AWK程序,测试一切顺利。但是到了实验二,做DSR实验的时候却出现了事件UID非法的提示。查看trace文件,发现确实停在了大概56s的位置。查了很多资料,解决方法没有找到。而且也不敢随便修改mac文件。不过看了一些解释,我怀疑可能是tcl脚本中的一项设置:Mac/802_11 set SlotTime_0.000020 ;#20us不合适。这里设置slot长度为20us。我尝试改了这个参数。把20us改成了10us。运行一遍,顺利通过! 虽然通过测试了,但是我还是不太能够理解其中原因,现 阅读全文

posted @ 2013-05-06 16:21 原来... 阅读(559) 评论(0) 推荐(0) 编辑

NS2中802.11代码深入理解—packet传输的流程 (转帖)

摘要: 如何传送一个封包(How to transmit a packet?)首先,我们要看的第一个function是在mac-802_11.cc内的recv( ),程式会先判断目前呼叫recv( )这个packet的传输方向,若是DOWN,则表示此packet是要送出去的,因此就会再呼叫send(p, h).所以接着,我们跳到send( ),此send( )首先会去检查energy model,若是目前这个node是在睡眠状态(sleep mode),则把此packet给丢弃.然后会把handler h设定给callback_.下一步,就是去呼叫sendDATA(p)和sendRTS(ETHER_A 阅读全文

posted @ 2013-05-06 16:20 原来... 阅读(556) 评论(0) 推荐(0) 编辑

NS2中Mac802_11定时器介绍(转帖)

摘要: 一. Mac802_11定时器相关类介绍类图如下:http://120.img.pp.sohu.com/images/blog/2007/12/3/16/16/1173b4c9ccf.jpg图1 NS2中Mac802_11定时器相关类结构图PS:在~ns\Common\Timer-handler.[h,cc]中定义了一个TimerHandler类,该类是ns中的通用定时器,不过MAC中并未使用它,而是自行定义一些功能和机制与其相似的timer。重要类介绍(以下类定义位置均在 ~ns\Mac\Mac-timers.[h,cc]):1. MacTimer : Handler作用概述:1)Mac80 阅读全文

posted @ 2013-05-06 16:19 原来... 阅读(518) 评论(0) 推荐(0) 编辑

(转)新建一个Agent/MyAgent详细过程

摘要: 一个简单的例子,但说明了Tcl和c++是如何映射的。程序的目的是创建一个新的网络对象类“MyAgent”,它是”Agent”的子类。 下面把我的ex-linkage.cc代码贴在这里://this is a simple agent just for show#include <stdio.h>#include <string.h>#include "agent.h"class MyAgent : public Agent {public:MyAgent();protected:int command(int argc,const char*cons 阅读全文

posted @ 2013-05-06 16:18 原来... 阅读(513) 评论(0) 推荐(0) 编辑

NS2源码图示---物理层 (转帖)

摘要: Channel(信道)信道在通信系统中算是比较底层的东西了,你可以把它看作是通信的介质(声音通过空气才可以传播,信道的作用类似于空气)。无线通信中的信道具体可以指频率或者CDMA中的码道。 程序中的信道,我宁愿把它想像成管道之类的东西,毕竟它的作用就是连接通信的两端。言归正传,我们来看看NS2中的有线信道吧,对应代码在channel.h和channel.cc中,大致的结构如下图:它对外的主要接口是向上层发送sendUp和接受recv; 我们再来看一下无线信道,对于的源码也在channel.{h,cc}中。大致的结构如下图:主要的接口同上。Channel应该提供基础设施来支持Mac的载波侦听、竞 阅读全文

posted @ 2013-05-06 16:09 原来... 阅读(267) 评论(0) 推荐(0) 编辑

NS2源码图示---数据链路层 (转帖)

摘要: MAC(媒介访问控制子层) Mac对象模拟媒介访问协议,由于网络中的发送和接收机制大部分与Mac层紧密联系,所以Mac对象必须是双工的。在发送端,Mac对象把数据包加上Mac头后传送到物理层(Channel)。在接受端,Mac对象从物理层异步接收数据包,在Mac协议处理之后,它把数据包传递给链路层(LL)。Mac层的示意图如下:当一个Mac对象通过recv方法接收到一个数据包后,它检查这个数据包是收到的还是要发送的,如果是收到的传给sendUp,如果是发送的传给sendDown。注意相应的Mac协议如802.11,TDMA,CDMA等,如果要实现,应该放在sendDown函数中实现。Mac中, 阅读全文

posted @ 2013-05-06 16:05 原来... 阅读(491) 评论(0) 推荐(0) 编辑

NS2中数据包Packet的分析 (转帖)

摘要: 1. NS2中数据包packet类结构图:packet类中的access函数如下:inline unsigned char* access(int off) const { if (off < 0) abort(); return (&bits_[off]);}struct hdr_cmn(即共用common头)中的access函数如下:inline static hdr_cmn* access(const Packet* p) { return (hdr_cmn*) p->access(offset_);}从以上的函数可以看出只要给出特定的报头在packet中的偏移量of 阅读全文

posted @ 2013-05-06 15:47 原来... 阅读(352) 评论(0) 推荐(0) 编辑

(转)添加一个新的应用和代理(一)

摘要: 目标: 建立一个影像媒体应用数据流,可以根据当前网络的拥塞状况,可以自适应的(分为0-4,共五个级别)调整发送的数据量的大小。应用描述: 发送方与接收方,共同定义了五组(0-4)方案,每一种方案有不同的编码与传输策略。在每一组方案和不考虑编码方案的下,传输的速率是不变的,且每个数据包的大小是固定的。 工作方式如下:(发送方为A,接收方为B) 例如:初始时,发送方A以组0方案进行发送数据,当接收方B认为网络的拥塞状况严重时,发送给A一个数据包,要求以组2方案发送数据,即是降低一倍。如果B认为网络又拥塞状况改善时,发给A一个数据包,要求以组1方案发送数据,即是提高一档。每隔一段时间,B会发送A一个 阅读全文

posted @ 2013-05-06 15:43 原来... 阅读(542) 评论(0) 推荐(0) 编辑

(转)添加一个新的应用和代理(二)

摘要: 接下来继续分析mm-app.h和mm-app.ccmm-app.h://Author;Vivian//File:mm-app.h//Written:08/25/10#include "timer-handler.h"#include "packet.h"#include "app.h"#include "udp-mm.h"//定义接收者接收的报信息度量struct pkt_accounting {int last_seq;//最新收到的mm报int last_scale;//最新收到的发送速率确认报int lost 阅读全文

posted @ 2013-05-06 15:42 原来... 阅读(416) 评论(0) 推荐(0) 编辑

(转)添加一个新的应用和代理(三)

摘要: 这里给出测试的脚本:#Author:Vivian#File:test-mmapp.tcl#Written:08-26-10set ns [new Simulator]set tracefd [open out.tr w]$ns trace-all $tracefdproc finish {} {global ns tracefd$ns flush-traceclose $tracefdexit 0}set node_(s1) [$ns node]set node_(s2) [$ns node]set node_(r1) [$ns node]set node_(r2) [$ns node]set 阅读全文

posted @ 2013-05-06 15:41 原来... 阅读(460) 评论(0) 推荐(0) 编辑

在ns2中实现一种新的报文头部(转帖)

摘要: 在ns2中实现一种新的报文头部在ns2中实现一种新的报文头部需要以下几步:1 用一个结构体定义这个协议,注意必须提供另外的几个方法,例如下面这个协议结构体:struct hdr_brcast {int hop;static int offset_;inline static int& offset() { return offset_; }inline static hdr_brcast* access(const Packet* p) {return (hdr_brcast*) p->access(offset_);}};其中 变量 hop是 这个协议的具体内容 ,而另外的变量 阅读全文

posted @ 2013-05-06 15:40 原来... 阅读(439) 评论(0) 推荐(0) 编辑

(转)关于Ping协议的添加

摘要: 这个协议网上有很多资料,在这里就不贴源码了,我想说说我在编译过程中遇到的问题,整理整理思路。首先,这个协议简单易懂,一个节点在设定的时间发包,接收结点收到后,计算rtt的值,并回传一个echo包给接收结点。最后rtt的值利用tcl.eval这个函数记录在out[]数组当中。那么我在编译过程中,遇到了两个问题,首先是说off_ip_未定义。这个错误的解决方法是,先定义off_ip_。即:int off_ip_=hdr_ip::offset();第二个问题是说no match for 'operator >>' in ' hdrip->src_>&g 阅读全文

posted @ 2013-05-06 15:37 原来... 阅读(309) 评论(0) 推荐(0) 编辑

带包头路由协议的创建过程(转帖)

摘要: 本协议共创建五个文件:protoname.h,protoname.cc,protoname_pkt.h,proto_rtable.h,proto_rtable.cc第一步:建立协议的数据包头。1.1 在protoname_pkt.h中声明。#ifndef __protoname_pkt_h__#define __protoname_pkt_h__#include <packet.h>#define HDR_PROTONAME_PKT(p)(hdr_protoname_pkt::access(p))struct hdr_protoname_pkt {nsaddr_tpkt_src_; 阅读全文

posted @ 2013-05-06 15:36 原来... 阅读(385) 评论(0) 推荐(0) 编辑

(转)关于target_解释,classfier_解释

摘要: 学习笔记,可能解释的不完全,先记录在这。。。target_是Agent所保存的其他实例对象的指针。例如,当应用层代理连接到传输层时,其类里面的target_便被赋值指向了这个传输层的实例指针。这样便可直接使用target_->recv或者target_->send等,来实现发送分组到协议栈的下一层。以上机制是n2中提供的机制,不是一定得使用target_来发送分组。关键点在于理解ns2发送分组的思路就是:想要发送给谁(对象),就调用谁(该对象)中的某个函数(ns2中一般是接收或者发送函数,因为莪这两个函数在Agnet基类中都有定义,且还是虚函数,用起来比较方便)。每个节点至少包含一 阅读全文

posted @ 2013-05-06 15:35 原来... 阅读(347) 评论(0) 推荐(0) 编辑

(转)NS2定时检测节点mac是否空闲

摘要: 目的:每隔0.0005秒检测某一无线节点mac的忙闲情况实现方案:方案一、用handler类循环进行打印is_idle()的值。 实现:参考season29,模仿dsr协议中的mobihandler类,在mac-802_11.h中建立一个IdleTimer类 class IdleTimer : public Handler { public: IdleTimer(Mac802_11 *I) { interval = 0.0005; Idle = I; } void start() { Scheduler::instance().schedule(this, &intr, 0.0005) 阅读全文

posted @ 2013-05-06 15:34 原来... 阅读(315) 评论(0) 推荐(0) 编辑

(转)NS2的离散事件驱动原理(Scheduler, Handler, Event, Timer)

摘要: NS2是离散事件驱动的仿真机制,这一点文献到处都在讲但却始终没有讲到点子上。本文试图从几个NS2的基本类出发探究一下离散事件驱动究竟是怎么回事。首先是Scheduler,Handler和Event类的关系。 在NS2中,事件(Event)是基本的调度单元,比如发送一个Packet、接收一个Packet等等。每个Event都有自己的处理工具,这个工具就是一个Handler类的对象handler_。Handler中仅包含一个函数,描述对Event的处理方法,即handle(Event *e)。 给定一个事件,Scheduler将调用schedule(Handler* h, Event* e, do 阅读全文

posted @ 2013-05-06 15:33 原来... 阅读(562) 评论(0) 推荐(0) 编辑

(转)修改flooding路由协议与mflood的比较

摘要: 最近一直都在做flooding的改进实验。两个星期了,终于有了进展,或许在大牛看来是微乎其微的修改,但是在我看来是一次成功。我也把我的心得总结在博客中。 首先,我学习了mflood的路由协议的修改,照写了一遍,感觉挺顺利的,所以就想心思小小改动下,争取效果有所优化。当时的想法就是利用节点之间的距离作为路由参数,如果节点收到比自己更远的节点的转发包时,直接丢包。一开始,我是在mflood上面修改的,实验之后发现居然没有变化。想了两天,才想明白原来节点没有机会去比较距离参数,因为大家都是一收到包就转发,而收到转发过的包,就会因为序列号旧而被丢弃,结果当然无法实现我自己距离参数的想法。 思考过后,我 阅读全文

posted @ 2013-05-06 15:32 原来... 阅读(818) 评论(0) 推荐(0) 编辑

(转)无线路由协议Mflood详解

摘要: 添加MFlood路由协议的实验1、协议分析MFLOOD洪泛协议是一个简单的无线路由协议,其中基本的思想是:节点根据一定的规则转发自己收到的数据包。该协议包括了Mflood.h, Mflood.cc, Mflood-packet.h, Mflood-seqtable.h, Mflood-seqtable.cc五个文件。(1)Mflood-packet.h定义了mflood的报头格式:这个新加的报头hdr_mflood通过定义offset_变量,使得能够得到访问。(2)mflood洪泛协议的实现过程主要在Mflood.cc中体现。在Mflood.cc中有三个主要的函数,rt_resolve用于建立 阅读全文

posted @ 2013-05-06 15:31 原来... 阅读(543) 评论(0) 推荐(0) 编辑

导航