Ns3Packet 学习笔记
每个网络数据包包含一个字节缓冲区、一组字节标签、一组数据包标签和元数据。
字节缓冲区存储添加到数据包的报头和尾部的序列化内容。这些报头的串行化表示 期望与真实网络分组逐位匹配(尽管没有什么强迫你这样做),这意味着分组缓冲器的内容反应了真实分组的内容。
元数据描述了字节缓冲区中序列化的头和尾的类型。元数据的维护是可选的,默认情况下是禁用的。要启用它,您必须调用数据包::启用打印,这将允许您从数据包::打印获得非空输出。如果您希望只启用元数据检查,并且不需要任何打印功能,您可以调用数据包::启用检查:其运行时成本低于数据包::启用打印。
这组标签包含模拟特定的信息,这些信息不能存储在数据包字节缓冲区中,因为协议头或尾没有符合标准的字段来存储这些信息。所谓的“字节”标签用于标记数据包字节缓冲区中的字节子集,而“数据包”标签用于标记数据包本身。这两种标签的主要区别在于当包被复制、分段和重组时会发生什么:“字节”标签跟在字节后面,“包”标签跟在包后面。这两种标签之间的另一个重要区别是,字节标签不能被移除,并且期望被写入一次,并且被读取多次,而分组标签期望被写入一次,读取多次,并且恰好被移除一次。
为一个新协议实现一个新类型的头或尾是非常容易的,创建ns3::Header或ns3::Trailer基类的子类,并实现它们各自的API文档中描述的方法就可以了。
实现一种新类型的标记需要大致相同的工作量,这项工作在ns3::Tag记应用编程接口文档中有所描述。
class Packet : public SimpleRefCount
{
public:
Packet (); //创新一个新的空数据包
Packet (const Packet &o); //copy数据包o
Packet &o