我在使用c ++本机调用(epoll等)进行服务器客户端应用程序开发方面有一些经验,现在我正在尝试用p2p和netty做一些事情。但我无法在p2p和服务器 - 客户端设计之间做出明确的区分。 恕我直言,p2p就像一个服务器应用程序,但也将像客户端连接到其他对等(服务器),对吗?哪个协议tcp / udp在p2p设计中更常用?我见过的文件共享p2p应用程序都是tcp base。来自netty guide的p2p示例正在使用udt,我想这对于点对点游戏来说是一个很好的用例,我是对的吗?
答案 0 :(得分:3)
您认为P2P对等体是具有服务器和客户端功能的应用程序是正确的。服务器是它接收来自其他对等体和客户端的连接的事实,即它向外连接到其他对等体。
TCP是可能的,但是由于大多数家庭/企业/ ISP网络使用NAT,因此需要对等体在其路由器上设置端口转发。这对于普通计算机用户来说是不实际/可能的。使用称为UDP打孔的UDP的技术解决了这个问题(这可能仍然不适用于某些NAT)。
在UDP打孔中,对等体将联系第三方“跟踪器”/“协调”/“中继”服务器,该服务器将建立两个对等体之间的连接。假设您有两个对等体,A和B.对等体A会联系服务器并通过NAT“打孔”。服务器将收到打孔的详细信息(IP地址,UDP端口)。同行B也会这样做。然后,服务器将对等体A的IP地址和UDP端口发送给对等体B,反之亦然。现在两个同行可以直接沟通。
如果实施得当,P2P可以用于服务器 - 客户端可以做的所有事情。 P2P中感兴趣的领域包括确定对等体之间的信任,防止有人创建许多虚假对等体来推翻网络,建立身份等等。这些是客户端 - 服务器模型中众所周知的解决方案的问题。
P2P已被用于:
文件共享 - Bittorrent,Gnutella
货币兑换 - 比特币
市场 - OpenBazaar
消息 - Bitmessage
参考文献: