Fork me on GitHub

OPNET中的数据包总结

部分内容翻译自OPNET帮助文档

包结构:  数据包最常用的是一系列域,用于存储用户数据。包可以是有格式的/无格式的/value vector,有格式包可以通过名字来引用域,而无格式包需要通过numeric index(即引用时,使用数字表示域,如0,1,2等,而不是名字)。域中可以存储各类信息,如整型/浮点型等,也可以包裹另一个数据包(packet类型),还可以是structure类型,存储一种用户定义的数据结构。

  初了域之外,每个包都包含控制信息,如优先级/创建时间(地点)等,另外还包含信息用于支持包在链路上传递建模的支持。

包大小:  包的每个域都有大小,包的总大小(total size)是所有包的域在加上一个基础值(bulk data size)。注意包的总大小不是指包在内存中实际占用空间的大小,而是仿真中包的大小(用于计算延迟,误码率等)。

包的所有权:  包是作为一个物理实体处理的,即一个包在给定时间点只能处于一个位置,当包被发送出一个实体后,即无法获得包的内容,包的所有者可以是模块(modules)或包流(stream)。一个模块(或包流)可以以四种方式获得包的所有权:(1)自己产生包,通过调用KP:op_pk_ctreate(),op_pk_ctreate_fmt(),op_pk_ctreate_vvec()。(2)自己产生包的复制品,通过KP:op_pk_copy()。(3)通过从另一个包中解封装,通过KP:op_pk_nfd_get(),op_pk_fd_get()。(4)从其它模块得到数据包,通过KP:op_pk_get()。

  包流取得包的所有权是通过源模块发送数据包到另一个模块获得的(通过KP:op_pk_send(), op_pk_send_delayed(), op_pk_send_quiet(), or op_pk_send_forced().)。直到目的模块取得数据包或包流flush自己。

  由于无格式包在改变大小时非常简单,故对穿越网络时需要动态改变大小的数据包来说,采用无格式包更好。无格式包最基本的处理是KP:op_pk_get()和op_pk_send(),分别是取得和设置域中的值,注意op_pk_send()有几个重载函数,分别处理不同的参数。

posted on 2013-03-26 17:04  loopever  阅读(2932)  评论(0编辑  收藏  举报