在前面两篇文章中我们分别介绍了 NS2 中非常重要的两个组成——事件调度器和网络组件,我们知道了 packet(数据分组)是如何在节点之间传递的,现在让我们来看看数据分组在 NS2 中是如何表示的。
一个 NS2 数据分组由一个头部信息的栈和可选的数据空间组成,如下图所示。在简单仿真示例提到过,数据分组头格式在创建 Simulator 对象时被初始化,在 Simulator 对象中,一系列栈排列注册了的 header 头(有可能不可见)被定义,如 common 头(它通常被任何需要的对象使用)、IP 头、TCP 头、RTP 头(UDP 使用 RTP 头)和 trace 头,且每个 header 在栈中的偏移都会被记录下来。这意味着不管一个头有没有被使用,当一个 packet(数据分组)被代理分配时创建的栈中都会含有它,并且网络对象使用相应的 offset(偏移值)就可以获得数据分组的栈中的任意头。
通常,一个 packet(数据分组)只有一个特定的 head(头部)栈,尽管通过分配数据空间,packet(数据分组)可以携带实际的(来自 application)信息,很少有 application(应用)和 agent(代理)的实现会支持这种做法,这是因为在非实时的模拟中传递真实数据是没有意义的。但是如果你想实现一个可以跨过网络去和另一个 application 通信的 application 的话,你也许可以使用这个特性,不过需要在下层的代理实现中做一点改动,还可以为 application 创建一个新的 header,然后修改下层的代理向这个新建的 header 写入受到的数据。后面这种方法会在后面的一篇文章中讲到。
参考:WPI