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

Posted

技术标签:

【中文标题】libutp (µTP) 和 NAT 遍历(UDP 打孔)【英文标题】:libutp (µTP) and NAT traversal (UDP hole punching) 【发布时间】:2016-12-11 16:54:02 【问题描述】:

根据 Wikipedia 文章,Micro Transport Protocol 支持使用 UDP 打孔的 NAT 穿越。但是看着libutp's project page,我在头文件中找不到任何这样的参考。我错过了一些明显的东西吗?还是在其他地方实现了 NAT 穿越?

【问题讨论】:

如果你使用 Rust,你可能会对 github.com/canndrew/tokio-utp 和 github.com/ustulation/p2p crates 感兴趣。 p2p crate 对 TCP 和 UDP 进行 NAT 遍历(包括打孔)。然后你可以用 tokio-utp UtpSocket 包裹一个打孔的 UDP 套接字... 【参考方案1】:

UDP 打洞并不是真正特定于任何协议,甚至不需要需要穿越 NAT 的协议支持。 IE。它可能发生在带外或更高的协议层。

在 bittorrent-over-utp 的情况下,它是通过 BEP55 ut_holepunch extension message 协商和启动的。除了规范,您还可以阅读libtorrent's implementation。

【讨论】:

以上是关于libutp (µTP) 和 NAT 遍历(UDP 打孔)的主要内容,如果未能解决你的问题,请参考以下文章

.Net WCF NAT 遍历的最佳实践

UDP、NAT 和设置“连接”

NAT 后面的 UDP 打孔

如何通过 NAT 通过公共 IP 发送 UDP 数据包?

UDP 打孔在非对称 NAT 上失败

udp 隧道中的数据包丢弃和拆分