Как определить количество блоков в пакете sctp? - PullRequest
0 голосов
/ 10 января 2019

Протокол SCTP имеет следующий формат пакетов: - Номер порта источника - Номер порта назначения - Проверочный тег - Контрольная сумма - N кусков

Я пытаюсь написать низкоуровневый парсер протокола, но я не знаю, как определить количество порций в пакете SCTP. Спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Вам нужно разобрать заголовки чанков. Каждый из них содержит поле длиной 16 бит после полей 8-битного типа и 8-битных флагов. Помните, что все числовые значения в SCTP имеют сетевой порядок байтов (big-endian).

Поля чанков задокументированы в RFC 4960, раздел 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 .

Прочитав поле Длина фрагмента, вы можете пропустить его полезную нагрузку и найти начало следующего фрагмента. Повторяйте это до тех пор, пока не достигнете конца IP-пакета.

Длина фрагмента включает четыре байта, которые составляют поля типа, флагов и длины.

...