此文为转载,原文出处没有查询。。。有待添加

2009年05月11日

  NS2中调试Multi-channel and Multi-interface 基于NS2的多信道多接口的底层环境已经调试出来了,我们调试出了"Hyacinth"以及"Ramon A.C & Jesus P.C"的Multi-Channel & Multi-Interface两种方案。这两种方法也是MIMONS2比较适用的两种。

  前期我们找到的相关资料如下:

  1.TENS:这是基于NS2.1b9的,http://www.cse.iitk.ac.in/users/braman/tens/

  2.“Hyacinth”的Multi-Channel & Multi-Interface 方法 for ns2.29:http://www.cse.msu.edu/~wangbo1/ns2/nshowto8.html基于NS2.29

  3. NOAH & Hyacinth : Multi-Channel & Multi-Interface Extension in NS2:http://dobbymmlab.blogspot.com/2008/07/multi-chann el-multi-interface-extension.html

  4.这篇文章介绍了一个Multi-interface实现方法:Adding Multiple Interface Support in NS-2″(http://personales.unican.es/aguerocr)

  5.“MW-Node” path for ns2 to support multiple interfaces & multiple channels:http://www.q2s.ntnu.no/~paquerea/ns.php

  6.Aguero.C.R’s “Adding Multiple Interface Support in NS-2″:http://personales.unican.es/aguerocr/

  7.NS-MIRACLE: Multi-InteRfAce Cross-Layer Extension library for the NS2:http://www.dei.unipd.it/wdyn/?IDsezione=3965

  一些连接:

  1.An IEEE 802.11-based Multi-channel Wireless Mesh Network:http://www.ecsl.cs.sunysb.edu/multichannel/

  2.Extend ns2 to support multi-channle multi-interface for wireless network:http://my.opera.com/greenw/blog/show.dml/27506

  3.Multi-channel Multi-interface Simulation in NS2 (2.29):http://www.cse.msu.edu/~wangbo1/ns2/nshowto8.html

  柯老师也提供了这个修改的下载: http://140.116.72.80/~smallko/ns2/ns-allinone-2.29 multichan.rar

  4.A new one for hyacinth for NS-2.29:http://my.opera.com/HenryFD/blog/show.dml/270422

  5.Multichannel MAC Protocols for Wireless Networks:http://www.wings.cs.sunysb.edu/%7Eritesh/multichan nel-mac.html

  6.Adding Multiple Interface Support in NS-2:http://personales.unican.es/aguerocr/files/ucMulti IfacesSupport.pdf

  7.802.11 Multi-Channel, Multi-Flow and Multi-Hop in NS-2:http://www.wretch.cc/blog/mystylevisu/21319840

  下面我就分别说一下。

  一、"Hyacinth"的Multi-Channel & Multi-Interface方法for ns-2.29

  这个方案详情见http://www.cse.msu.edu/~wangbo1/ns2/nshowto8.html,我使用的版本是ns-2.29.3,因此建议大家也用这个版本。此外这个方案在台湾柯老师的主页上也有源码下载http://140.116.72.80/~smallko/ns2/ns-allinone-2.29 multichan.rar

  "Hyacinth"的方案优势在于信道分配的清晰明了,仿真环境tcl文件中会很清晰的添加信道,tag,数据流no.。但另一方面,该方案也有很多劣势:只能支持静态路由协议manual协议;tcl编写时需要手工添加路由表(十分痛苦);拓展性不高等。

  手工添加路由表很繁琐。我举例说明:

  # Add routing tag

  $node(0) add-route-tag 2 02

  $node(1) add-route-tag 2 02

  # Add next hop

  $node(0) add-next-hop 2 02 1 2

  $node(1) add-next-hop 2 02 2 2

  如上述tcl文件,拓扑为0—>1—>2,0如果要经过1路由给给2就要在0上加去2的route tag,以及1去2的tag,相同的tag.其实也就是和实际的routing table上的标识一样. 然后做好tag后,增加nexthop. 0去2要走1通过nic2,1去2要走2通过nic2. nic可改。

  网上还有以下内容也许对你会有帮助:

  # Add routing tag 这个function要有4个input 分别为 Newentry, add-route-tag, entry.dsy, entry.tag

  以第一个entry来看 $node(0) add-route-tag 1 999 对照一下不难发现就是增加一条route table是从node0 传到 node1 并且tag 设为 999

  #Add next hop 这个function要有6个input 分别为 fixedrtableent, add-next-hop, dst, tag, next hop, nic

  其中 nic 代表是使用的频道数 对照一下第一个entry $node(0) add-next-hop 1 999 1 2

  也不难理解就是一条 node0透过hop(node1), 传给node1, tag为999, 使用第二频道就在我当我都了解他在干麼时,我想试著增加一个node做Multi-hop时却一直无法成功传递最后成功的设定的route table如下

  # add route tag #new entry , add-route-tag , entry.dst , entry.tag

  $node(0) add-route-tag 1 999

  $node(4) add-route-tag 1 999

  $node(2) add-route-tag 3 8

  # Add next hop #fixedrtableent newentry , add-next-hop , entry.dst , entry.tag , entry.hop , entry.nic

  $node(0) add-next-hop 1 999 4 4

  $node(4) add-next-hop 1 999 1 5

  $node(2) add-next-hop 3 8 3 3

  我新增了一个 node4在原先4个node的正中间 topology 像这样

  Node 1 Node3

  Node4

  Node0 Node2

  然后设定封包 routing为node0先传给node4再转传给node1 如下

  # add route tag

  $node(0) add-route-tag 1 999 ;#new entry , add-route-tag , entry.dst , entry.tag

  $node(4) add-route-tag 1 999

  # Add next hop

  $node(0) add-next-hop 1 999 4 4 ;#fixedrtableent newentry , add-next-hop , entry.dst , entry.tag , entry.hop , entry.nic

  $node(4) add-next-hop 1 999 1 5

  在add route tag里面要先设一条route是从 0 -> 1 并将tag设为999必需还要有一条是 4->1 的routing且 tag 必需一样

  在add next hop里 也是一样

  要先设定一条 0->1 的路径

  $node(0) add-next-hop 1 999 4 4

  node0 欲传给 dst为1 , tag 为999, next-hop node4为转传点, 并且使用channel 4收送 第二条entry

  $node(4) add-next-hop 1 999 1 5

  node4 的dst为node1, tag是999, next-hop 因为没有下一个节点了,於是便设为成接收点为1, 使用channel 5 来传送

  "Hyacinth"方案的拓展:

  由于传统的"Hyacinth"方案只支持静态manual路由协议,但依然可以对其进行拓展。

  Hyacinth的扩展不仅能在tcl里指定manual路由,它的multi-interface还可以被ns2其他路由在内部调用,比如在aodv里调用. 如下:

  Then in routing protocol or whereever the packet will be sent to different NIC, define coresponding downtarget for each interface to send out packet like (in header file):

  NsObject *downtarget1;NsObject *downtarget2;NsObject *downtarget3;NsObject *downtarget4;NsObject *downtarget5;

  Then get the corresponding objects from Tcl from command(int argc, const char*const* argv), for example in AODV:

  aodv/aodv.cc:

  int AODV::command(int argc, const char*const* argv) {if(argc == 2) {Tcl& tcl = Tcl::instance();...else if(argc == 3) {...// multi-channel supportelse if (strcasecmp (argv[1], "down-target-1") == 0) {downtarget1 = (NsObject *) TclObject::lookup(argv[2]);return TCLOK;}else if (strcasecmp (argv[1], "down-target-2") == 0) {downtarget2 = (NsObject *) TclObject::lookup(argv[2]);return TCLOK;}else if (strcasecmp (argv[1], "down-target-3") == 0) {downtarget3 = (NsObject *) TclObject::lookup(argv[2]);return TCLOK;}else if (strcasecmp (argv[1], "down-target-4") == 0) {downtarget4 = (NsObject *) TclObject::lookup(argv[2]);return TCLOK;}else if (strcasecmp (argv[1], "down-target-5") == 0) {downtarget5 = (NsObject *) TclObject::lookup(argv[2]);return TCLOK;}...

  When send out the packet to different interface, just call one of them:

  downtarget1->recv(p, (Handler *)0);downtarget2->recv(p, (Handler *)0);downtarget3->recv(p, (Handler *)0);downtarget4->recv(p, (Handler *)0);downtarget5->recv(p, (Handler *)0);

  Then, everything is ok. It seems simple…

  最后我把几张仿真图贴出来:

  

  

  二、"Ramon A.C & Jesus P.C"的Multi-Channel & Multi-Interface方法

  Romon的方法我在各个论坛中查资料的时候,发现调成功的人并不多甚至没有。我师兄和Ramon同志发了很多邮件讨论过,最终Ramon进行了在Adding Multiple Interface Support in NS-2:(http://personales.unican.es/aguerocr/files/ucMulti IfacesSupport.pdf)基础上的修改,最终调成功了。我们用的ns版本为ns-2.33,不过据Ramon说,ns的后几个版本都是支持的。

  Ramon的方案拓展性很好,很实用。不想说太多了,说以下做的仿真结果吧,cbr-200s仿真。

  吞吐量:

  单信道:recv:16328 throughput:347

  多信道(设置为2信道):recv:32834 throughput:698

  协议开销:

  单信道:cbrbytes:8686496, routebytes:556, routecosts:6.400739722898623334426217429905e-5

  多信道(设置为2信道):cbrbytes:17467688, routebytes:710, routecosts:4.0646478228830283664329246091412e-5

  延迟:

  

  恩,不多说了。总体就是这样,和几位师兄一起做的很愉快。现在我正在想办法把DSDV添加进来。

  参考:

  1 http://greenw.blogspot.com/2006/06/extend-ns2-to-s upport-multi-channle.html

  2 http://www.wretch.cc/blog/mystylevisu/21319840

[转]NS2添加多接口相关推荐

  1. 微信jssdk批量添加卡券接口(踩坑经验)

    1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.0861973 ...

  2. mfc工程中添加com接口支持

    在普通的mfc工程中常常需要添加com接口支持.最典型的应用就是使用 com中的连接点机制时,需要在客户端实现事件接受器.简单说来,就是要实现在com服务器端声明的事件接口.这个接口由server端暴 ...

  3. 【Node.js】关于Node.js接口的详解和案例--restful风格接口。案例:添加商品接口,添加员工接口,删除员工接口

    1.首先我们需要知道,接口是什么? 接口是后端为前端提供的数据--动态资源:Node.js通过每一个路由就可以实现接口 2.RESTful接口:是一种接口的架构风格 1.请求的URL(资源) 在资源前 ...

  4. 怎样给手机网站添加支付接口

    推广效果 Q.q:1⑨⑨⑦〇⑦④⑥ 怎样给手机网站添加支付接口** 个 人 网 站 如 何 开 通 在 线 支 付 商 家 账 户 ( 我 们 有 出 售 的 企 业 商 户 账 号 有):支 付 宝 ...

  5. STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输

    目录 项目场景 硬件准备 实现过程 实现缘由 原理展现 成果展现 USB-TTL模块有线数据展示 ZigBee模块远程传输数据展示 最后总结 项目场景 本人在做STM32硬件开发项目中,传输数据这一块 ...

  6. Ubuntu20.04交叉编译Vlc3.0.16,并添加录像接口

    准备工作 1.准备好ubuntu20.04的编译环境,虚拟机.云服务器都可 2.去官方网站查询一下指定编译步骤This page will help you to compile VLC media ...

  7. Android STB 添加系统接口

    文章目录 一.知识准备 1.1.电视机屏幕宽高的获取 1.2.电视机屏幕尺寸的计算 1.3.Binder通信 二.在原生Service中添加 三.实现定制的Service 3.1.SystemServ ...

  8. dashboard添加公网接口配置流程、网卡修改默认路由流程【我这系公有云】

    文章目录 说明 创建公网流程 定位到虚拟机 添加公网接口 修改网卡名称 ip设置 删除默认路由 添加指定路由 测试 说明 登陆进来以后如图 需求: 1.添加一个公网卡,需要能上公网: 2.现有的内网依 ...

  9. WIN7添加loopback接口

    用GNS3等模拟器搭建拓扑可能需要使用到loopback接口,下面与大家分享在win7创建loopback接口! 1.打开[设备管理器] 2.选择[添加硬件] 3.选择安装我手动从列表选择的硬件 4. ...

最新文章

  1. Python 赋值运算符
  2. 溯因推理:人工智能的盲点
  3. CYQ.Data 轻量数据层之路 使用篇五曲 MProc 存储过程与SQL(十六)
  4. python使用界面-python 可视化界面
  5. Linux iptables
  6. 盘点2021:数据中心行业迎来转折点
  7. 把tensor转为numpy_如何在TensorFlow中将张量转换为numpy数组?
  8. Idea中内置Translation插件报“翻译错误”,解决方式!!!
  9. typescript 怎么表示当前时间减一个月_TypeScript 入门知识点总结
  10. 偶对称离散余弦变换 EDCT
  11. 编写歌唱比赛评分_营造园区浓厚文化氛围 三亚崖州湾科技城“最强音”歌唱比赛落幕...
  12. gson Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
  13. 使用 Google Guava 美化你的 Java 代码
  14. [C++]踩坑日记:内存别名
  15. 【信息学奥赛】1005:地球人口承载力估计(C++)
  16. 计算机rom分类,一文看懂ROM的结构、特点及其分类-控制器/处理器-与非网
  17. 1399元千元真旗舰,360手机N5“能耐”在哪?
  18. 微信小程序云开发之云数据库
  19. 网页播放器自定义倍速播放
  20. VDD、VBAT、VDDA、VREF+区别

热门文章

  1. 【Python 13】分形树绘制1.0--五角星(turtle库)
  2. adb 相关问题总结
  3. 《结对-结对编项目作业名称-开发环境搭建过程》
  4. 【JavaEE】WebService到底是什么?
  5. [MySQL]命令行工具和基本操作
  6. ios开发入门篇(四):UIWebView结合UISearchBar的简单用法
  7. Pycharm 配置autopep8到菜单
  8. Facebook 对 Memcache 伸缩性的增强
  9. Windows XP硬盘安装Ubuntu 12.04双系统
  10. git远程仓库和分支