Как определить количество блоков в пакете sctp?
Протокол SCTP имеет следующий формат пакетов: - Номер порта источника - Номер порта назначения - Тег подтверждения - Контрольная сумма - N чанков
Я пытаюсь написать синтаксический анализатор протокола, но я не знаю, как определить количество фрагментов в пакете SCTP. Спасибо!
1 ответ
Вам нужно разобрать заголовки чанков. Каждый из них содержит поле длиной 16 бит после полей 8-битного типа и 8-битных флагов. Помните, что все числовые значения в SCTP имеют сетевой порядок байтов (big-endian).
Поля чанков описаны в разделе 3.2 RFC 4960:
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.
Прочитав поле Длина фрагмента, вы можете пропустить его полезную нагрузку и найти начало следующего фрагмента. Повторяйте это до тех пор, пока не достигнете конца IP-пакета.
Длина фрагмента включает четыре байта, которые составляют поля типа, флага и длины.