首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分DTLS数据包与TCP、UDP数据包

如何区分DTLS数据包与TCP、UDP数据包
EN

Stack Overflow用户
提问于 2014-12-08 05:03:34
回答 1查看 1.7K关注 0票数 0

来自RFC 5764

代码语言:javascript
复制
               +----------------+
               | 127 < B < 192 -+--> forward to RTP
               |                |
   packet -->  |  19 < B < 64  -+--> forward to DTLS
               |                |
               |       B < 2   -+--> forward to STUN
               +----------------+

其中B是数据包的第一个字节。因此,对于DTLS数据包标识,我们在将数据转换为无符号字符*之后执行以下操作

代码语言:javascript
复制
if(packet[0] > 19 && packet[0] < 64)

这只适用于RTP、DTLS和STUN数据包。但是对于UDP、TCP等,如果我发送的UDP数据包的第一个字节在20到63之间,那么上述条件将它视为DTLS数据包。从google的源代码DTLS数据包识别是这样做的,

代码语言:javascript
复制
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数据包。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 05:51:32

RFC 5764只关心RTP、STUN和DTLS,而不关心其他数据。在这种情况下,区分这些格式的算法就足够了。如果您想将DTLS与一般的UDP/TCP区分开来,您必须知道

  • DTLS是一种数据报协议,因此通常根本不在TCP之上使用。在TCP上,通常可以找到TLS。
  • 由于DTLS通常在UDP之上使用,所以任何DTLS数据包都是有效的UDP数据包,而不是其他方式。

要区分DTLS数据包和其他UDP数据包,您应该查看RC 6347中描述的数据包格式。检测的质量取决于所使用的检查技术,也就是说,如果您限制自己只匹配一些字节(如版本或类型字段),如果您获得了更多的上下文(长度是否合理),或者您甚至还为其他协议设置了检测引擎,以便更好地确定它是DTLS而不是其他什么东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27351714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档