【发布时间】:2012-07-18 10:50:32
【问题描述】:
我正在尝试使用打孔实现 P2P。这是流程:
- 两个 Peers(P1,P2) 将向服务器 (S) 发送 1 个数据包。
- Server(S) 回复两个告诉其他人 IP:PORT
- P1 和 P2 收到此 UDP 数据包,知道其他人的外部/公共 ip:port。
- P1、P2 开始向其他对等点发送数据包公共 IP:PORT。
- 一旦对等方收到其他对等方的数据包,我认为该孔已被打孔并将此套接字提供给我的应用程序。
我在不同的路由器上测试过,结果如下:
- 当 P1 和 P2 都在非对称 NAT(完整/受限锥形)上时, 我没有遇到任何问题。
- 当 P1=非对称且 P2=对称时:
- -----router-1 (Symmetric-NAT) + router-2 (non-Symmtric) = 成功
- ---- router-3 (Symmetric-NAT) + router-2 (non-Symmtric) = *失败*
直到第 4 步都可以。但在第 5 步中,没有一个对等方收到其他对等方的数据包。我期待至少 *'非对称 NAT 后面的对等方' 会收到其他人的数据包。*
有人知道发生了什么吗?
【问题讨论】:
-
我知道这是一个老问题,但是如果一个对等体是全锥体而另一个是对称的,我相信不会有任何问题,因为全锥体直接接收第一条消息并回复给它的端点已收到。然后将创建隧道。
标签: networking tcp udp udpclient hole-punching