use*_*711
5
networking
udp
tcp
udpclient
hole-punching
我正在尝试用打孔来实现P2P。这是流程:
- 两个节点(P1,P2)都会向服务器(S)发送 1 个数据包。
- 服务器回复并告诉其他人IP:PORT
- P1 和 P2 接收此 UDP 数据包,知道对方的外部/公共 ip:端口。
- P1、P2 开始向其他对等点公共 IP:PORT 发送数据包。
- 一旦对等点收到其他对等点的数据包,我假设该洞已被打孔并将此套接字提供给我的应用程序。
我在不同的路由器上进行了测试,结果如下:
- 当 P1 和 P2 都位于非对称 NAT(完全/受限锥体)时,我不会遇到任何问题。
- 当 P1=非对称且 P2=对称时:
- -----router-1(对称 NAT)+ router-2(非对称)= 成功
- ---- router-3(对称 NAT)+ router-2(非对称)= *失败*
直到第四步就可以了。但在第五步中,没有对等点收到其他对等点的数据包。我预计至少* “非对称 NAT 后面的对等点”会收到其他的数据包。*
有人知道发生了什么事吗?