问题描述
UDP和TCP数据的标题不同。我有一个用例,我想在其中传输RTP媒体流。首选是UDP,然后是TCP。
现在想象一下,RTP数据包已接收到本地UDP端口。 此本地计算机首先尝试使用UDP与服务器建立连接。如果成功,则无需进一步查询。
但是,如果无法使用UDP,则我们建立TCP连接。 我可以中继 TCP上本地UDP端口的数据吗?假设,它最终将被馈送到对等UDP端口。我们的兴趣仅在于中继。
切换UDP端口和TCP连接,反之亦然。还有可能吗?
解决方法
当然,您可以创建一个显式中继应用程序,该应用程序接受UDP数据并在TCP连接中转发这些数据。然后,对等方中的另一个中继将从TCP连接中提取消息并将其作为UDP转发。这样,您基本上可以创建隧道。
或者您可以更改您的应用程序,以便它检测到UDP不起作用并直接使用TCP,而无需涉及任何中继。就开销和所需的基础结构而言,这可能是更好的方法。但是,这必须明确地编码到您的应用程序中,即,发送方和接收方都需要不同的套接字,并且根据协议,您可能需要附加的消息封装,因为TCP只是没有消息边界的字节流,而UDP具有对于RTP:对于通过TCP等协议使用的RTP消息,已经存在一种框架化标准,请参见RFC 4571。