Как отличить пакет DTLS от пакета TCP, UDP

От RFC 5764:

               +----------------+
| 127 < B < 192 -+--> forward to RTP
|                |
packet -->  |  19 < B < 64  -+--> forward to DTLS
|                |
|       B < 2   -+--> forward to STUN
+----------------+

Где B — первый байт пакета. Поэтому для идентификации пакетов DTLS мы делаем следующее после приведения данных к unsigned char *,

if(packet[0] > 19 && packet[0] < 64)

Это работает только для пакетов RTP, DTLS и STUN. Но происходит сбой для UDP, TCP и т. Д. Если я отправляю пакет UDP, который имеет первый байт между 20 и 63, то указанное выше условие рассматривает его как пакет DTLS. Исходя из исходного кода Google, идентификация пакета DTLS выполняется следующим образом:

static bool IsDtlsPacket(const char* data, size_t len) {
const uint8* u = reinterpret_cast<const uint8*>(data);
return (len >= 13 && (u[0] > 19 && u[0] < 64));
}

Но это также не идентифицирует пакеты DTLS должным образом. В Wireshark я вижу, что он может правильно отличать пакеты DTLS от пакетов UDP / TCP. Как мне это сделать?

0

Решение

RFC 5764 заботится только о RTP, STUN и DTLS, а не о других данных. В этом контексте достаточно алгоритма, чтобы различать эти форматы. Если вы хотите отличить DTLS от общего UDP / TCP, вы должны знать, что

  • DTLS является протоколом дейтаграмм и поэтому обычно вообще не используется поверх TCP. В TCP вы обычно находите TLS.
  • Поскольку DTLS обычно используется поверх UDP, любой пакет DTLS является действительным пакетом UDP, но не другим способом.

Чтобы отличить пакеты DTLS от других пакетов UDP, вы должны посмотреть на формат пакета, как описано в RC 6347. Качество вашего обнаружения зависит от используемой технологии проверки, то есть если вы ограничиваете себя совпадением только с некоторыми байтами (например, полями версии или типа), если вы получаете больше контекста (имеет ли длина смысл) или если у вас даже есть обнаружение движки для других протоколов, так что вы можете быть более уверены, что это DTLS, а не что-то еще.

1

Другие решения


По вопросам рекламы [email protected]