Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102946
  • 博文数量: 35
  • 博客积分: 1845
  • 博客等级: 上尉
  • 技术积分: 394
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-17 17:06
文章分类

全部博文(35)

文章存档

2013年(2)

2012年(2)

2011年(24)

2010年(3)

2009年(4)

我的朋友

分类:

2011-05-24 19:37:07

http://happywh583.blog.sohu.com/67413384.html 

为了理清楚NS底层源码的实现原理以及给后来人一些借鉴,我打算近期把NS底层的东西用图示的方式表达出来。为了便于入手和理解,我将从最底层开始画起:

第一篇

Channel(信道)
    信道在通信系统中算是比较底层的东西了,你可以把它看作是通信的介质(声音通过空气才可以传播,信道的作用类似于空气)。无线通信中的信道具体可以指频率或者CDMA中的码道。
    程序中的信道,我宁愿把它想像成管道之类的东西,毕竟它的作用就是连接通信的两端。言归正传,我们来看看NS2中的有线信道吧,对应代码在channel.hchannel.cc中,大致的结构如下图: 

它对外的主要接口是向上层发送sendUp和接受recv
   
我们再来看一下无线信道,对于的源码也在channel.{h,cc}中。大致的结构如下图:

主要的接口同上。Channel应该提供基础设施来支持Mac的载波侦听、竞争和冲突检测,不过ns2.29中,这部分代码都被注释掉了。说明:上图并未列出无线信道的所有属性,只是把主要属性和接口示意出来,下面的图示也是如此。

Phy (物理层)

     在介绍Phy之间,先介绍一个通用连接“上下”的连接器BiConnector,大致的示意图如下:

它起到了“承上启下”的连接作用,它是一个虚基类,所有有上下层次关系的构件都可以继承它,Phy就是其中之一。BiConnector拥有指向上和指向下的指针uptargetdowntarget,通过它们可以迅速的地找到“上面”和“下面”的构件。此外,它还有向上通信(发送)和向下通信(发送)的接口sendUp、sendDown,以及接收接口recv;
     Phy继承了BiConnector,自然具有BiConnector的所有属性和接口,但是它也有自身的一些特别重要的属性,请先看示意图:

为了突出重点,图中省略了一些从BiConnector继承的属性。注意图中的chnl_link_node_link_都是结构体类型。chnl_link_的定义如下:
struct {                                                    
      
 Phy *le_next; /* next element */       
      
Phy **le_prev;     /* address of previous next element */
}
chnl_link_的作用是把连在同一条信道(channel)上的Phy都串起来,
node_link_的作用是把连在同一个节点上的Phy都串起来。其它的两个属性node指向节点,channel指向信道。
物理层的主要作用是控制信道的访问,同时也能够设置带宽和计算传输时间等。
ChannelPhy合在一起可以看作我们通常所说的物理层,这样Channel就负责模拟数据包在物理层上的传输,Phy负责控制Channel传输。

阅读(499) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~