区分 STUN、RTP、DTLS 数据包 - java 程序

Differentiate STUN, RTP, DTLS packets - java program

我正在编写一个小型 UDP 服务器,它可能会在同一端口接收不同的 UDP 协议消息,如 STUN、RTP、RTCP、DTLS 数据包。

我首先应该能够区分各种协议消息,以便执行不同的逻辑。

我在哪里可以找到 java 的示例,最好是图书馆来帮助我解决这个问题。

I should first be able to differentiate each kind of protocol messages in order to execute different logic.

为什么?我会简单地 运行 并行逻辑;即,将此端口上的每个数据包传递给每个逻辑。

逻辑设计应忽略格式错误的请求(毕竟,如果它们要在开放的 Internet 上 运行,它们应该足够强大以处理甚至恶意制作的数据包)。

如果一些传入请求是-polyglots-;也就是说,它们在多个协议中有效,那么客户端将收到多个响应。在此设计中,由客户端代码处理不合法的响应。也许客户足够强大,可以忽略它们。或者客户端可能会从头开始重试协议,可能会选择一个新的序列号或不再是多语言的东西(纯属运气)。

我认为没有 "really good" 解决此问题的方法,因为 UDP 数据包太小而不能浪费 space 每个协议的唯一标识符。 UDP 协议旨在为不同的服务使用不同的端口。唯一的 "correct" 解决方案是将 运行 的服务放在不同 IP 地址的同一端口上。

这是一个 c++ 版本,我确信可以用 java 重写它,但它可以让您知道该怎么做。顺便说一句,缓冲区变量保存着最近收到的 udp 数据报。

 if((buffer[0]==0) || (buffer[0]==1))
      return stun; // STUN packet

 if((buffer[0]>=128) && (buffer[0]<=191))
      return rtp; // RTP packet

 if((buffer[0]>=20)  && (buffer[0]<=64))
      return dtls; // DTLS packet