@
tinyproxy 说真的,多花 1 分钟时间重新阅读一下 OP 的问题,很难吗?
如果真的很难,那我帮你总结一下 TL;DR 吧。
1. P2P 打洞有接触过的么
OP 的提问是关于 P2P 里打洞的技术,不是 P2P 里节点发现的技术。
2. QQ 是怎么实现的?
QQ 之间互相传送文件时,两个节点是互相知道对方的。 QQ 上互相发送信息,腾讯服务器必然有维护通讯链接,返回对方的 IP 地址根本不需要查分布式表, QQ 用户也不需要维护分布式节点表。 OP 问的是两个 QQ 用户在传送文件时如何通过 NAT 打洞来完成直接发送而不是服务器中转流量。
3. A 连接上 S , B 连接上 S , S 通过什么手段 可以让 A 与 B 直接通讯呢?
OP 最后的总结很明显的写了需求。 OP 从来没说过要做一个群 P 的通讯软件, OP 要做的是一个让两个不同内网的客户端能够互发数据的通讯软件。
4. 你我完全不在一个频道交流没有任何意义。
是的。回答问题首先要审题。 3 楼 dbfox 自己的回答其实已经是很标准的答案了。
如果你的回答是在一个问如何制作匿名 P2P 通讯软件的帖子里,那是很有用的回答, EM 的 KAD 和 BT 的 DHT ,现今著名的两大无服务器节点发现哈希网络。
但是回答的仍然不够准确,因为 DHT ·就·是·哈希表(而不是你所说的「别跟我扯 hashtable 」)。
BT 里的 DHT 是用来做 种子 Hash->[节点] 的列表映射的,也就是说 DHT 维护的并不是其他节点的列表,而是种子到节点的映射。你必须要有一个键,才能在 DHT 这个哈希表里找到这个键对应的节点列表。因此只能用在 多 P2P 的情况下,比如 BT 或者 EM 这样多人下载一个文件的场景下。两个人做 1P 2 1P 的单点传送, DHT 没有什么价值。
以及你一开始说的 Bootstrap 和 DHT 没什么关系。如果 A 和 B 互相不知道对方,只需要 Bootstrap 就行了,一丁点也不会用到 DHT 。
希望这篇阅读理解的分析能让你理解 OP 到底是在问什么。