ns-3_ Day 10

ns-3的分组Packet

ns-3的分组由header、payload、trailer组成。Packet定义了分组的存储结构,内部维护一个字节数组 Packet::m_buffer,header、payload、trailer存储在这个字节数组中。

  • 传输层和网络层的ns-3 Packet Header具有完全相同的存储结构
  • Packet使用虚拟payload,ns-3只会记录payload的大小(单位是Byte)而不为其分配内存。

创建

使用Create模板函数,返回指向Packet对象的Ptr

Header和Trailer

Header和Trailer是分组头和分组尾的基类分组尾携带的都是帧检测序列FCS。派生类包括:

  • TcpHeader
  • Ipv4Header
  • WifiMacHeader
  • ……
  • EthernetTrailer
  • LrWpanMacTrailer 低功率广域网络分组尾
  • WifiMacTrailer

分组头尾从C++类到字节数组需要通过序列化Serialize()来完成。Header类只负责定义一个通信协议分组头的信息结构,在网络中实际传输的是Packet对象。以TcpHeader为例:
image.png

分段和重组

ns-3使用Packet::CreateFragment()函数进行分段,参数指定起始字节和长度,返回新分段的Ptr;重组通过Packet::AddAtEnd()完成。

Tag

ns-3分组除了携带header和trailer以外,还可以携带若干tag。例如可以把一些底层协议参数(如跨层QoS设置)存储在应用层Packet的tag列表,当底层协议处理这个Packet的时候就可以读取对应的设置。
Tag有分组tag和字节tag两种:

  • 分组tag 分段后,每个分段都将拥有该tag的拷贝
  • 字节tag 只属于被添加时分组的所有字节,后续添加的头尾和负载都不拥有该tag

posted on   LeewayTang  阅读(87)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示