【发布时间】:2016-05-03 08:56:36
【问题描述】:
我目前正在使用“打孔”方法在 C 中实现 (UDP) p2p 应用程序。我发现真的说明了 J. Selbie 以前的帖子,他解释了基础知识 并相应地进行(post1,post2)但可能我遗漏了一些东西,只有一个对等方正在接收数据,而另一个没有。
这是我正在采取的步骤:
-
设置:其中一个对等体连接到 4G 蜂窝加密狗 (NAT A),另一个连接到连接到 ISP 提供商 (NAT B) 的路由器。 这些是两个 NAT 的 stunclient(特技客户端)报告的结果。
NAT A: Binding test: success Local address: X1:48383 Mapped address: Y1:28265 Behavior test: success Nat behavior: Endpoint Independent Mapping Filtering test: success Nat filtering: Address and Port Dependent Filtering NAT B: Binding test: success Local address: X2:49158 Mapped address: Y2:49158 Behavior test: success Nat behavior: Endpoint Independent Mapping Filtering test: success Nat filtering: Address and Port Dependent Filtering
现在,根据这些结果,我的理解是,两个 NAT 都有合理的行为,打孔可能会成功(注意 NAT A 不做端口保留)。
- 打孔尝试: 两个客户端都通过 UDP 联系面向公众的服务器(STUN/集合点)以发现/交换 ip:port 对。当每个客户端收到来自服务器的响应时,它们会发送一个 UDP 数据报给另一个对等点(ip:port 被联系的公共服务器看到),然后继续发送更多信息并接收并回复该地址的消息它来自哪里。 我使用与公共服务器联系的同一套接字发送数据报,仅更改 sendto 函数上的目标 ip:port。
问题是,NAT A 后面的主机(连接到 4G 加密狗)总是会收到消息,尽管回复了正确的 ip 和目标端口,但后面的主机(NAT B)永远不会收到消息。有什么想法我在这里想念的吗?或者如何诊断问题??
提前致谢。
【问题讨论】:
标签: p2p nat stun hole-punching