什麽是P2P

P to P即对等联网,可让人们通过互联网直接交互,消除中间商。如Napster软件,虽面临起诉,但它带来的P to P模式影响巨大。P to P能改变互联网以大网站为中心的状态,让用户共享资源,还可能使互联网实时交流更普遍。
部署运行你感兴趣的模型镜像
什么是P to P?

  专业人士解释,P to P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。这样一来,P to P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。

  简单地说,P to P直接将人们联系起来,让人们通过互联网直接交互。P to P使得网络上的沟通变得容易、更直接,真正地消除了中间商。每个人可以直接连接到其他用户的计算机交换文件,而不是像过去那样连接到服务器去浏览与下载。目前在此概念下引起全球轰动的是Napster软件,Napster软件让音乐迷在自己的硬盘上共享歌曲文件,搜索其他用户共享的歌曲文件,并可以到其他也使用Napster服务的用户硬盘上去下载歌曲,但在Napster服务器上却没有一首歌曲。Napster在不到一年的时间里吸引了3800万用户,整个唱片业的生存就因这个软件的存在受到威胁。目前虽然Napster被几大唱片公司联合起诉的案子仍在进行,但人们认为,不管Napster案的结果如何,都不能改变Napster的最大创新:P to P(Peer-to-Peer,对等联网),给互联网带来的影响。

  不过更多的人认为,P to P看起来似乎很新,但是正如B to C、B to B是将现实世界中很平常的东西移植到互联网上一样,P to P并不是什么新东西。在现实生活中,我们每天都按照P to P模式交流和沟通,只不过是面对面或者是通过电话的方式。就像ICQ、OICQ目前是国内最流行的P to P应用一样,P to P的重要特点是允许用户互相沟通和交换讯息,从而改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户个人。这样人们通过P to P可以共享硬盘上的文件、目录甚至整个硬盘。这种能量是非常令人激动的,那些费心存储在自己的硬盘上的东西肯定是我们认为最有价值的东西,所有人都共享了他们认为最有价值的东西,避开了那些大型网站的信息控制,这将使互联网上信息的价值得到极大的提升。

  有人这样类比,互联网的出现和电话的发明是具有同样的意义的。但是互联网最开始的主要特征是非实时的,更类似于传真,而没有提供像电话那样的实时交流,现在P to P的即时讯息可能使得互联网上的实时交流变得和Web页面、E-mail那样普遍和不可或缺。目前人类在现实生活中的经验至今仍只有极少的部分被应用到网络上,而一旦人们最常使用的P to P被移植到了网络空间,将带来的能量可能是无穷的。

  

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

### P2P打洞技术概述 P2P打洞(P2P Hole Punching)是一种绕过NAT(网络地址转换)设备,实现内网主机之间直接通信的技术。它广泛应用于文件共享、视频通话等场景,能够显著减少服务器转发的依赖,提高通信效率[^3]。P2P打洞的核心思想是利用公网服务器作为中介,帮助两个内网客户端建立直接的通信通道。 ### P2P打洞的实现机制 在P2P打洞过程中,两个内网客户端(例如A和B)首先分别与公网服务器S建立连接。通过这种方式,服务器S能够获取到A和B各自的公网IP地址和端口信息。接下来,服务器S将这些信息传递给A和B,使得它们可以尝试直接向对方的公网IP地址和端口发送数据包,从而“打穿”各自的NAT设备[^2]。 #### UDP Hole Punching UDP Hole Punching是P2P打洞中最常见的实现方式。由于UDP协议是无连接的,它允许客户端在不建立正式连接的情况下发送数据包。A和B在与服务器S建立连接后,分别向对方的公网IP地址发送数据包。NAT设备会记录这些出站数据包,并允许来自相同IP和端口的入站数据包通过,从而实现A和B之间的直接通信。 #### TCP Hole Punching TCP Hole Punching相对复杂,主要受限于TCP协议的连接机制。与UDP不同,TCP是面向连接的协议,要求在通信前建立三次握手。由于标准socket API的限制,TCP的socket不允许多个连接绑定到同一个本地端口,这使得TCP打洞比UDP更加困难。尽管如此,TCP打洞仍然是可能的,但需要额外的技术手段来实现。 ### P2P打洞所使用的协议 P2P打洞技术主要依赖于UDP协议,因为其无连接特性使得打洞更容易实现。然而,除了UDP,还有一些协议和标准被用于增强P2P打洞的效率和可靠性。 #### STUN协议 STUN(Session Traversal Utilities for NAT)协议是一种用于检测NAT类型和获取公网IP地址的工具。通过STUN协议,客户端可以了解自己所处的NAT类型(如全锥形NAT、限制锥形NAT、端口限制锥形NAT或对称NAT),并获取自己的公网IP地址和端口号,这对于P2P打洞的成功至关重要[^1]。 #### ICE标准 ICE(Interactive Connectivity Establishment)是一种用于NAT穿透的标准,它结合了STUN和TURN(Traversal Using Relays around NAT)协议。ICE通过多种候选地址(包括主机地址、服务器反射地址和中继地址)来寻找最佳的通信路径,确保即使在复杂的NAT环境下也能建立可靠的P2P连接[^1]。 ### P2P打洞的应用场景 P2P打洞技术广泛应用于需要高效点对点通信的场景,如文件共享、在线游戏、视频会议等。例如,某些NAS(网络附加存储)设备的客户端在尝试从外网访问时,会优先尝试通过P2P打洞与内网设备建立直接连接;如果打洞失败,则会回退到通过服务器进行数据转发的方式[^3]。 ### 示例代码 以下是一个简单的UDP Hole Punching示例代码,展示了客户端如何与服务器通信以获取对方的公网IP地址,并尝试建立直接连接: ```cpp #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); inet_pton(AF_INET, "192.168.1.100", &serverAddr.sin_addr); // 向服务器发送注册消息 sendto(sock, "REGISTER", 8, 0, (sockaddr*)&serverAddr, sizeof(serverAddr)); // 接收服务器返回的对方地址 char buffer[1024]; sockaddr_in fromAddr; int fromAddrLen = sizeof(fromAddr); int recvLen = recvfrom(sock, buffer, sizeof(buffer), 0, (sockaddr*)&fromAddr, &fromAddrLen); if (recvLen > 0) { std::cout << "Received from server: " << buffer << std::endl; // 解析对方地址并尝试打洞 sockaddr_in targetAddr; targetAddr.sin_family = AF_INET; targetAddr.sin_port = htons(9999); inet_pton(AF_INET, "对方公网IP", &targetAddr.sin_addr); sendto(sock, "HELLO", 5, 0, (sockaddr*)&targetAddr, sizeof(targetAddr)); } closesocket(sock); WSACleanup(); return 0; } ``` ### 总结 P2P打洞技术通过利用公网服务器作为中介,使内网客户端能够直接通信,绕过NAT设备的限制。UDP Hole Punching是实现P2P打洞的主要方式,而STUN协议和ICE标准则为P2P打洞提供了更强大的支持。尽管TCP打洞相对复杂,但在特定条件下仍然可行。P2P打洞技术广泛应用于文件共享、视频通话等领域,极大地提高了通信效率[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值