05 2013 档案

(转)关于TCP的一个跨层设计的 具体实现思路 (兼讨论 tcl.eval与Tcl_Eval的区别)
摘要:老师要求为他的一篇关于跨层相关论文做仿真验证,其中有一个如下需求,描述如下:每个节点既可以是TCP 发端,也可以是TCP收端,两个身份可以同时兼职,也可以只任其一。在本需求中,发端的TCP的下层MAC IFQ队列向下放行一个数据包以后,需要及里依次通知上层的路由及TCP层下放一个包,以便提高网络的反应速率。 当路由层没有待下行的数据包时,便通知上层的TCP下放包。原先已经实现了,当TCP发端 的下层MAC发送成功一个TCP包以后,可以通过回调机制,再通知本节点的TCP发端再次下放数据(回调函数传入当前发送TCP Agent的对象指针 this)后来,发现有一种情形没有考虑到:那就是当一个节点既 阅读全文

posted @ 2013-05-07 12:21 原来... 阅读(661) 评论(0) 推荐(0) 编辑

NS2常用C++以及TCL命令(转)
摘要:在NS2的仿真中,经常需要重复地用到一些TCL命令或者固定的C++用法。现初步汇总如下:TCL 命令:$ns at time task$ns simple-link$ns duble-linkC++:获得当前TCL解释器: TCL& tcl=TCL::instance();在C++中执行指定命令: tcl.EvalC()获得当前时间: double cur=Simulator:instance().clock();与节点处理相关的命令: 1. 获得指定包头: 方法1. hdr_*::access(packet); 方法2:宏 HDR_* (packet)#define HDR_CMN( 阅读全文

posted @ 2013-05-07 12:18 原来... 阅读(824) 评论(0) 推荐(0) 编辑

ubuntu10.04 安装问题(转)
摘要:1. 输入法fcitx的安装发现很多人说安装fcitx后无法使用。我也碰到过这个问题。安装比较简单:$ sudo apt-get install fcitx安装后,可以利用 im-switch切换$im-switch -s fcitx实际上,系统默认安装了一个输入法,ibus,但是在安装fcitx后,无法调出fcitx。删除掉ibsu后,即可解决:$sudo apt-get remove ibus另外一个问题,即是fcitx的乱码,显示方块,可以在~/.fcitx/conf文件中,修改支持的字体:$ sudo geit ~/.fcitx/conf将其中的下面一行显示字体由*改为WenQuanY 阅读全文

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

tcl debug 常用命令(转)
摘要:Tkcon最新版本2.5.在NS2中调试TCL/OTCL脚本了。设断点的方法是,直接在脚本文件中相应的位置加上debug 1。一些基本的命令如下:s 单步执行(进入进程)n 单步执行(不进入进程)c 继续r 继续执行直到从过程中返回u 转至上级作用域d 转至下级作用域w 列出调用栈b 设置,清除或显示断点h 帮助运行脚本,就会在相应的断点位置停下来,可以使用puts命令来打印输出各种变量的值。info也是一个我常用的命令。info exists <variable><variable> info class //查询一个对象的类名<variable> inf 阅读全文

posted @ 2013-05-07 12:14 原来... 阅读(1523) 评论(0) 推荐(0) 编辑

NS2下实现MAC跨层设计(转)
摘要:在传感器网络的协议设计中,考虑到节能的需要,设计协议时通常需要不同的协议层进行交互,比如Agent层调用MAC层或者PHY层的函数,计算传输或者接收数据消耗的能量,这种设计思想称为cross-layer。理论上讲,我们常规上一般要求网络协议分层设计,以达到简化网络模型的目的。这个例子从Wangbo网站上转载而来,很有启发意义。该例子是在Aodv的Agent中调用MAC层协议。具体步骤:1.修改aodv/Aodv.h文件[cpp]view plaincopy#include<mac.h>classAODV:publicTap,publicAgent{public:voidtap(co 阅读全文

posted @ 2013-05-07 12:13 原来... 阅读(699) 评论(0) 推荐(0) 编辑

在Ubuntu下给NS2配置GUI调试环境(转)
摘要:在早期的NS2中,支持Windows下的VC调试环境,但是貌似NS2.27后就不支持了。因此使用NS2最好在Linux下,那么在NS2下有没有图形调试环境呢?环境:Eclipse 3.5.1 + CDT (参见前一篇安装)1. 启动Eclipse, 建立C++ Project;工程类型选用Makefile,编译器选择Linux C++(不太清楚它与Cross C++区别),工程路径选择ns-2.3*;2. 编译,提示错误:G++ not found。但是我明明已经安装了build-essential。没办法,重新安装一篇,发现提示要安装g++.$sudo apt-get install bui 阅读全文

posted @ 2013-05-07 12:12 原来... 阅读(383) 评论(0) 推荐(0) 编辑

NS2脚本中如何使用God(转)
摘要:在无线网络模拟中,借助God可以获得整个网络的一些全局性信息。在有些情况下,这些信息非常必要,比如要判断两个相邻无线节点是否在传输范围之类。NS2对God的支持在C++空间中主要是God类,该类分别声明和实现在ns-2.30/mobile/god.h文件和ns-2.30/mobile/god.cc文件中(我使用的是ns-2.30版)。如果在仿真脚本里使用God,需要以下几个基本设置:在node-config命令的选项中要开启能量模型,如果不开启能量模型,God将认为所有的节点之间都不相邻,其他信息也无从获得,这显然不是我们想要的。$ns_ node-config-....../ -energ. 阅读全文

posted @ 2013-05-07 12:11 原来... 阅读(393) 评论(0) 推荐(0) 编辑

NS2仿真中nam节点颜色设置(转)
摘要:NS2仿真中节点颜色设置2009-02-16 20:01NS中提供了配置节点与流量颜色标识的方法,给一条流“上色”是经常用的方法,但是在无线仿真的时候不好用,经常出现只有fid=0的流上了颜色,经过仔细研究源代码,发现有下面一段,[cmu-trace.cc] // A simple hack for scadds demo (fernandez's visit) -- Chalermek int pkt_color = 0;之后还有一些判断,好像是在802.15.4的情况下才有颜色,如果添上下面这段,颜色是都有了,但是很可能不太正确,期望有高手能解决。 hdr_ip* iph = hd 阅读全文

posted @ 2013-05-07 12:09 原来... 阅读(769) 评论(0) 推荐(0) 编辑

NS2中的随机数产生器(转)
摘要:1. 种子和分布 这里介绍了五种分布:Pareto(帕累托分布),Constant(常分布),Uniform(均匀分布),Exponential(指数分布),HyperExponential(超指数分布)。给出了各种分布使用时需要提供的参数。2. 测试随机数产生器 这一部分只有一个简单的例子,并没有详细介绍。下面是我从例子中试着总结出的取用一个随机数的步骤: 设置种子set rng [new RNG]$rng seed 1 设置分布set r1 [new RandomVariable/Pareto] #设置分布类型$r1 use-rng $rng #设置种子$r1 set avg_ 1... 阅读全文

posted @ 2013-05-07 12:08 原来... 阅读(337) 评论(0) 推荐(0) 编辑

NS2中DSR模拟可运行版本 转载
摘要:为了自己的MANET研究,最近一直做网络仿真。第一步就想做一个DSR路由协议的模拟。遗憾的是,例子中的代码实在是太简单了,根本没有实现多跳功能。网上找了不少版本,均有相应的问题,有的run起来数据通信太小,根本看不到多跳,有的压根就无法看到数据通信。综合了一下网上的版本,修改了其中的错误,把NS2安装目录下的wireless-mitf.tcl做一下修正,分享一个可以看到多跳的基于DSR路由的模拟脚本。相信对于刚入门想做这个的人会有帮助。脚本名字为multi-hop.tcl,生成的动画文件为multi_hop.nam。#Copyright (c) 1997 Regents of the Univ 阅读全文

posted @ 2013-05-07 12:07 原来... 阅读(586) 评论(0) 推荐(0) 编辑

(转) ns2/nam与nam实现相关的文件
摘要:首先是*.h/cc文件:./trace/basetrace.h, cc: baseTrace基类./trace/trace.h,cc: Trace类实现./trace/cmu-trace.h,cc: 特别是cmu-trace.cc中的nam_format函数.注: 以上三个类是继承关系,其中后继的类都包含一个Basetrace *pt_ 指针,用来实现对包的跟踪分析。这个类很重要许多场合,特另是C++代码实现中都要先检测其是否为空。如在Cmu-tracecommon/mobilenode.cc: 该文件是实现节点移动的主要类,其中有一个函数set_destination会记录下所有节点走... 阅读全文

posted @ 2013-05-07 11:27 原来... 阅读(750) 评论(0) 推荐(1) 编辑

(转) ns2之包结构解析
摘要:最近在做ns2的“反移植”工作,深入研究了一下NS2中包的结构,其定义主要在packet.h/cc中实现的,但是有许多代码是为了与TCL接口而设计的。其定义如下:class Packet : public Event {private:unsigned char* bits_;// header bitsAppData* data_;// variable size buffer for 'data'....};不得不说,上面两个字段域是Packet最重要的动动,其中bits_存储包头结构,而data_存储用户自定义的数据。但是,NS2其实是一个大而全的仿真平台,它在仿真时其实 阅读全文

posted @ 2013-05-07 11:25 原来... 阅读(407) 评论(0) 推荐(0) 编辑

(转)记录队列长度的方法
摘要:最近做实验需要记录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 原来... 阅读(1018) 评论(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 原来... 阅读(558) 评论(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 原来... 阅读(553) 评论(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 原来... 阅读(516) 评论(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 原来... 阅读(502) 评论(0) 推荐(0) 编辑

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

posted @ 2013-05-06 16:09 原来... 阅读(265) 评论(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 原来... 阅读(489) 评论(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 原来... 阅读(541) 评论(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 原来... 阅读(459) 评论(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 原来... 阅读(437) 评论(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 原来... 阅读(308) 评论(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 原来... 阅读(342) 评论(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 原来... 阅读(312) 评论(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 原来... 阅读(561) 评论(0) 推荐(0) 编辑

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

posted @ 2013-05-06 15:32 原来... 阅读(816) 评论(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 原来... 阅读(540) 评论(0) 推荐(0) 编辑

导航