如何确定 sctp 包中的块数?

How can I determine number of blocks in sctp package?

SCTP协议的包格式如下: - 源端口号 - 目标端口号 - 验证标签 - 校验和 - N 块

我正在尝试编写协议的低级别解析器,但我不知道如何确定 SCTP 包中的块数。 谢谢!

您需要解析块头。每个都包含一个 16 位长度字段,在 8 位类型和 8 位标志字段之后。请记住,SCTP 中的所有数值均采用网络字节顺序(大端)。

块字段记录在RFC 4960 section 3.2:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Chunk Type  | Chunk  Flags  |        Chunk Length           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   \                                                               \
   /                          Chunk Value                          /
   \                                                               \
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

块在 SCTP Common Header Field Descriptions 之后开始。

通过读取块长度字段,您可以跳过其有效负载并找到下一个块的开始。重复此操作,直到到达 IP 数据包的末尾。

块的长度包括构成类型、标志和长度字段的四个字节。