我有一个奇怪的问题。我有一个成功运行的 C++ (boost asio) P2P 应用程序,它可以在大多数 NAT 上运行。问题是当我将初始起始端口号设为 1000 时,它会检查 1000 是否空闲,否则会加一并选择一个端口并开始握手。但是当我有 10000、20000 或任何其他巨大的端口号时,打孔在端口受限的锥形 NAT 上不起作用。
这怎么可能?我很确定这与代码无关。最近它也不适用于我朋友的一个全锥 NAT,但它已在许多其他全锥 NAT 中工作。可能是什么原因?关于 NAT 的行为,我有什么遗漏吗?