NS3 Packet类
来源:互联网 发布:linux 启动matlab 编辑:程序博客网 时间:2024/06/17 00:40
关于Packet类的详解和成员函数的介绍:https://www.nsnam.org/docs/release/3.12/doxygen/classns3_1_1_packet.html#details
以下为部分翻译:
Detailed Description
network packets
每个网络包包含一个字节缓冲区,一组字节标签(bytes tags),一组数据包标签(packet tags)和元数据(metadata)。
1、字节缓冲区以序列化内容的形式存储着一个数据包的头和尾。 这些头部的序列化表示被期待和实际网络数据包的位数匹配(尽管没有强制您这样做),这意味着包缓冲区的内容相当于真实数据包的内容。(注:也就是说,字节缓冲区里存储的是packet的头部和尾部)
2、元数据描述了在字节缓冲区中序列化的头部和尾部的类型。 默认情况下,元数据的维护是可选的和禁用的。 要启用它,您必须调用Packet:: EnablePrinting,这将允许您从Packet :: Print和Packet :: Print获取非空输出。如果您只想启用检查元数据,并且不需要任何打印功能,您可以调用Packet :: EnableChecking:其运行时代价低于Packet ::EnablePrinting。
3、该标签集包含不能存储在数据包字节缓冲区中的特定仿真信息,因为协议报头或报尾没有此信息的标准字段。所谓的“字节”标签用于标记分组字节缓冲区中的字节的子集,而“分组”标签用于标记分组本身。这两种标签之间的主要区别是当数据包被复制,分段和重新组合时会发生什么:'byte'标签跟随字节,而'packet'标签跟随数据包。这两种标签之间的另一个重要区别是,字节标签不能被删除,并且预期被写入一次,并且读取多次,而数据包标签预期被写入一次,读取多次,并且完全移除一次。“byte”标签的一个示例是一个FlowIdTag,它包含一个流ID,由应用程序生成流量设置。“分组”标签的示例是由应用设置并由较低级MAC层处理的跨层qos类id。
为新协议实现新类型的头部或者尾部非常简单——创建ns3 :: Header或ns3 :: Trailer基类的子类,并实现它们各自的API文档中描述的方法。
实现一种新类型的Tag需要大致相同的工作量,这个工作在ns3 :: Tag API文档中有描述。
Packet API中讨论了Packet API的性能方面。
Constructor & Destructor Documentation
1、ns3::Packet::Packet()
Createan empty packet with a new uid (as returned by getUid).
创建一个uid标识(由getUid获得)的空包。
2、ns3::Packet::Packet(uint32_t size)
创建一个用零填充有效负载的数据包。 没有分配有效负载所需的内存:如果您尝试对该数据包进行分片或访问零填充字节,它将在任何时间点分配。数据包被分配一个新的uid(由getUid返回)。
参数:size,用0填充的负载的size
3、
ns3::Packet::Packet
(
uint8_t const *
buffer,
uint32_t
size,
bool
magic
)
从序列化缓冲区创建一个新的数据包。 这个新数据包与缓冲区中包含的序列化数据包相同,并为您神奇地反序列化
参数:
buffer:将要创建的序列化的packet
size:反序列化的包的尺寸
magic:是否允许包反序列化;当设置为false时assert。
4、
ns3::Packet::Packet
(
uint8_t const *
buffer,
uint32_t
size
)
创建一个包含buffer的内容的数据包。复制输入数据:输入缓冲区不变。
参数:
buffer:要存储到包的数据
size:输入buffer的size。
Member Function Documentation
1、void ns3::Packet::AddAtEnd
(
Ptr< const Packet >
packet
)
在当前数据包的末尾连接输入数据包。 这不会改变任何一个数据包的uid。
参数:
packet:要连接在当前包末尾的packet
2、voidns3::Packet::AddByteTag(const Tag & tag)const
参数:
tag:要添加到包的新tag
3、void ns3::Packet::AddHeader(const Header & header)
将头添加到此数据包。 该方法调用Header ::GetSerializedSize和Header :: Serialize方法来在缓冲区中保留空间,并请求头部在数据包缓冲区中对其进行序列化。
4、voidns3::Packet::AddPacketTag(const Tag & tag)const
向此数据包添加标签。 此方法调用Tag ::GetSerializedSize,然后调用Tag :: Serialize。
注意这个方法是const,也就是说,它不会修改这个数据包的状态,这是非常不直观的。
- NS3 Packet类
- NS3(2)---ns3中的packet类
- NS3中的Ptr类
- NS3的ObjectFactory类
- NS3
- NS3
- NS3
- NS3
- NS3
- NS3
- NS3
- NS3
- NS3 中 ObjectBase类学习
- NS3 的Application类运行机制
- 浅析ns3之OnOffApplication类
- NS2中的Packet类
- packet
- NS3 仿真器 之 typeid 类知识学习
- 河南省第十届ACM赛题
- 最速下降法
- (Mac-使用问题)Mac升级到 10.12后,下载的一些安装包提示损坏。
- spring IOC
- C++primer学习笔记-----6.2参数传递
- NS3 Packet类
- java 解决split分割空值不能得到的问题
- Java终结方法的使用(终结守卫者)
- 数据库-存储过程、触发器详解
- iOS NSObject
- HEVC多次进行熵编码的原因
- centOS配置VNC Viewer
- 安装linux系统,支持双系统
- 个人模板 Manacher求最长回文字串