[英]How to tunnel TCP over reliable UDP?
假设我有一个可靠的UDP库,并希望通过它隧道任意TCP连接。 这是我目前的做法,但我觉得它可能效率不高。 任何建议都非常欢迎。
现在,这似乎适用于从浏览器发出简单的HTML请求,但由于服务器没有直接连接到客户端,因此无法判断客户端何时终止连接。 有一个更好的方法吗?
编辑:不,这不是功课。 如果你不了解可靠的UDP库的优点,或者就此而言,之前没有听说过它们,请不要打扰回复。 谢谢。
最有效的方式是两个端点直接相互通信。 如果他们使用不同的协议进行通信,则至少需要一个代理/网关/流量转换器/等等。 在这种情况下,无法绕过其中两个转换器,因为您现在涉及3个部分:端点客户端,网络流量,端点服务器。 我不知道如何在特定情况下提高效率。
对于已终止的连接,如果您使用隧道,则将其用于所有流量,即将客户端和服务器的各种请求传递给另一方。 如果终止无法传送到服务器,则问题出在客户端 - 客户端端点不会将其终止传递给客户端隧道条目。 如果可以,那么您可以将此终止转移到服务器。
您将不得不通过UDP隧道将服务器端的客户端TCP连接丢失(相反,如果服务器应该首先关闭连接)。
否则,除了HTTP服务器不知道客户端已断开连接之外,您将在未启动连接关闭的一侧泄漏连接。
一种方法是保留32位连接ID字段的特殊值 - 比如0x00000000
或0xffffffff
- 表示控制数据包而不是连接数据。 接下来是另一个表示连接ID的4字节字段,然后是操作码字段。 您可以定义的第一个操作码是“Connection terminated”。
并且类似于隧道的服务器端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.