UDP打孔可能吗?

Posted

技术标签:

【中文标题】UDP打孔可能吗?【英文标题】:UDP hole punch possible? 【发布时间】:2011-04-01 22:20:17 【问题描述】:

我正在尝试查看在某个 NAT 后面是否可以进行 UDP 打孔,但我发现当 NAT 后面的计算机将 UDP 数据包发送到同一个端口的两个不同 IP 并绑定到同一个端口时端口,NAT 分配两个不同的外部端口号。所以在这个特定的 NAT 背后,我认为 UDP 打洞是不可能的,这是正确的吗?

谢谢

【问题讨论】:

【参考方案1】:

不一定。路由器可能愿意回复IGD。

【讨论】:

谢谢,试过了,不行。毫不奇怪,它实际上是一个蜂窝数据连接。至少值得一试。我唯一想不到的另一件事是端口猜测,但它们似乎是随机分配的。坚果。【参考方案2】:

这意味着你的 NaT 是对称的,如果你的 NaT 是对称的,它会为每个连接提供不同的外部端口。并且不可能从两种方式连接打孔,但仍然可以连接 p2p。但只有在代理端使用圆锥 Nat 时才有可能。搜索那个。

但如果两个位置使用对称 NaT,则无法将 p2p 连接与 Udp 打孔连接。

    a:Symetric => b:symetric ---- 不可能 a:Conic => b:Conic ------------ 很容易实现 a:Symetric => b:Coinc --------- 可能/只有一种方式握手 4: a:Conic => b:symetric --------- 不可能/但可以连接一种方式握手

但是您仍然可以使用端口预测方法。这意味着您必须猜测可以在连接中使用的端口并尝试连接它(Tcp Hole Punch)

对于圆锥 NaT 可以看到关于 UDP 打孔请在https://github.com/turapulku/NaT-Traversal-UDP-Hole-punch.git查看示例

这仍在开发中,但现在我希望它会有所帮助

【讨论】:

【参考方案3】:

您可以使用此网站来确认此特定 NAT 的行为。

http://nattest.net.in.tum.de/test.php

它将检查您的 NAT 类型并测试是否可以进行 UDP/TCP 打孔。

但是由于您已经知道端口分配是随机的,所以 UDP 打孔是不可能的。使用 UPnP 是另一种方式,但不适用于嵌套 NAT。

【讨论】:

以上是关于UDP打孔可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

[VB.NET]Upnp/udp打孔聊天程序tcp/udp sockets

UDP 打孔 (c++/winsock)

UDP 打孔在非对称 NAT 上失败

1个端口上的UDP打孔?

libutp (µTP) 和 NAT 遍历(UDP 打孔)

NAT 后面的 TCP 连接