我正在编写一个P2P应用程序,希望避免用户手动设置端口转发。
我有点困惑,因为似乎有两种不同的协议来配置NAT,即UPnP / IGD和NAT-PMP。我应该使用哪个?它们都被所有NAT支持吗?或者我应该支持两者以确保至少有一个协议被NAT支持?
我正在编写一个P2P应用程序,希望避免用户手动设置端口转发。
我有点困惑,因为似乎有两种不同的协议来配置NAT,即UPnP / IGD和NAT-PMP。我应该使用哪个?它们都被所有NAT支持吗?或者我应该支持两者以确保至少有一个协议被NAT支持?
NAT-PMP(现在是PCP)是一个IETF草案,因此应该是您实现的草案。然而,为了兼容性,您应该允许您的应用程序静默地回退到UPnP / IGD,因为不是所有NAT设备都支持PCP / NAT-PMP,并且很多旧设备仅支持UPnP / IGD。
考虑使用STUN代替NAT-PMP或UPnP-IGD。它通常在任何地方都能正常工作,并且几乎肯定可以通过大规模服务提供商的NAT和NAT64。
坚持使用UDP打洞。它适用于几乎所有路由器,除非两个客户端都在4G LTE网络后面(这些网络通常具有随机端口分配)和阻止所有UDP流量的路由器。如果您需要可靠地发送数据,则可以使用可靠的UDP。