0%

NS2 的介绍(五)—— 数据分组

在前面两篇文章中我们分别介绍了 NS2 中非常重要的两个组成——事件调度器网络组件,我们知道了 packet(数据分组)是如何在节点之间传递的,现在让我们来看看数据分组在 NS2 中是如何表示的。

一个 NS2 数据分组由一个头部信息的栈可选的数据空间组成,如下图所示。在简单仿真示例提到过,数据分组头格式在创建 Simulator 对象时被初始化,在 Simulator 对象中,一系列栈排列注册了的 header 头(有可能不可见)被定义,如 common 头(它通常被任何需要的对象使用)、IP 头、TCP 头、RTP 头(UDP 使用 RTP 头)和 trace 头,且每个 header 在栈中的偏移都会被记录下来。这意味着不管一个头有没有被使用,当一个 packet(数据分组)被代理分配时创建的栈中都会含有它,并且网络对象使用相应的 offset(偏移值)就可以获得数据分组的栈中的任意头。

packet 格式
通常,一个 packet(数据分组)只有一个特定的 head(头部)栈,尽管通过分配数据空间,packet(数据分组)可以携带实际的(来自 application)信息,很少有 application(应用)和 agent(代理)的实现会支持这种做法,这是因为在非实时的模拟中传递真实数据是没有意义的。但是如果你想实现一个可以跨过网络去和另一个 application 通信的 application 的话,你也许可以使用这个特性,不过需要在下层的代理实现中做一点改动,还可以为 application 创建一个新的 header,然后修改下层的代理向这个新建的 header 写入受到的数据。后面这种方法会在后面的一篇文章中讲到。


参考:WPI