gpt4 book ai didi

udp - 选择 UDP 打洞的端口号

转载 作者:行者123 更新时间:2023-12-01 22:25:32 27 4
gpt4 key购买 nike

我有一个奇怪的问题。我有一个成功运行的 C++ (boost asio) P2P 应用程序,它可以在大多数 NAT 上运行。问题是,当我将初始启动端口号指定为 1000 时,它会检查 1000 是否空闲,否则加一并选择一个端口并开始握手。但是,当我有 10000、20000 或任何其他巨大端口号时,打洞在端口受限锥形 NAT 上不起作用。

这怎么可能?我很确定这与代码无关。最近,它在我的一位 friend 的全锥 NAT 上也不起作用,但它在许多其他全锥 NAT 上都有效。可能是什么原因?关于 NAT 的行为方式,我是否遗漏了什么?

最佳答案

  1. 在许多 NAT 实现中,都有适当的保护规则来防止一台主机占用 WAN 接口(interface)上的大部分端口,例如就像描述的那样here .

  2. 根据路由器的不同,NAT 表条目具有不同的生命周期,并且可以分配给单个客户端的端口数量始终存在限制(我见过从 128 到 4096 的数字)。

因此,我认为当您需要使用高端口时,源 IP 地址的 NAT 表已经满(或几乎满),其中包含来自旧连接或来自其他应用程序的连接的条目,因此路由器决定拒绝或无法适应您端口的新 NAT 条目。

但是,可以肯定的是,我会尝试在受控环境中重复这一过程,收集 NAT 两侧的 Wireshark 转储并分析数据包。如果可能的话,启用路由器日志并查看它们也会很有帮助。

我知道这不是“ Elixir ”,但希望它能对您有所帮助。

关于udp - 选择 UDP 打洞的端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834226/

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