gpt4 book ai didi

.net - UDP、NAT 和设置 "connections"

转载 作者:行者123 更新时间:2023-12-04 01:09:52 25 4
gpt4 key购买 nike

我知道在谈论 UDP 时“连接”这个词并不合适,但是......

服务器(具有已知 IP 的服务器)如​​何通过 Internet 将其 UDP 数据包发送到位于 NAT 后面的客户端?

例如:假设客户端使用一些通过 TCP 的消息传递连接到服务器并进行身份验证。此时,服务器已准备好开始通过 UDP 将数据流式传输到客户端,但是服务器如何知道在哪里寻址 UDP 数据包,以便它们可以通过任何 NAT 路由器找到客户端?

如果客户端通过 UDP 发送“我已准备好进行流式传输”消息,NAT 路由器是否会保持端口打开,以便服务器可以使用其 UDP 数据流进行响应?

或者我在这里偏离了轨道?

最佳答案

通常,位于 TCP 级别的客户端前面的 NAT 将能够确定已创建 UDP 的连接。话虽如此,客户端的 NAT 必须配置为接受来自 SRC 服务器端口的 UDP 数据包,然后将它们转发到内部目标 IP(客户端)。重要的是要记住,如果 NAT 是谁是主叫方,谁是被叫方。 NAT 在实现和能力方面有所不同,因此根据您的需要,您可能想要实现一个通用的易于实现的解决方案。

我认为,您的假设是正确的,在您的情况下,客户端将无法接收信息中的 UDP 流。在您的情况下,您的客户端必须将其 WAN IP 发送到您的服务器以启动 UDP 连接。查找您的客户端 WAN IP 可能很棘手,但有些网站可以通过在文本页面中返回来帮助您确定您的 WAN IP。

如果 UDP 连接是在 TCP 连接之后由服务器打开一个到客户端的套接字到一个已知的 UDP 端口而创建的,那么 UPnP 可能值得研究它允许您在 NAT 上自动设置您的端口转发,那只是如果您的 NAT 像 DSL 路由器一样支持 UPnP。

一个解决办法是让客户端同时打开 TCP 和 UDP 套接字到服务器。由于 NAT 背后的客户端发起了连接,因此 TCP 和 UDP 连接的状态都将添加到 NAT 的连接表中。

关于.net - UDP、NAT 和设置 "connections",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/716620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com