首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

P2P通信原理

因为消息并不是直接从我手机发送到你的手机,而是从我手机先发送到微信的服务器服务器再转发到你的手机上(当然,转发给你之前,还会把数据存到服务器),像下边这样: ? P2P 是这样: ?...同时,只有锥型 NAT 才能进行 P2P,原因是由 P2P 连接的建立过程决定的。 P2P 连接建立过程 P2P 连接的建立首先需要一个拥有公网 IP 的中间服务器 S,两个结点 P1 和 P2。...也就是说,P1 与服务器通信使用的 NAT 地址和 P2 与 P1 通信使用的 NAT 地址是不同的(一般情况都是端口不同)。甚至 P1 与服务器通信使用的 NAT 地址都在不断的发生变化。...这样让我们没办法拿到隐藏在 NAT 后边内网设备的 NAT 入口,也就没办法进行 P2P 通信了。 P2P 也用到了一个服务器,跟微信一样。...但是不同的是,P2P 中的服务器只作为结点地址的中转站,而微信的服务器是数据的聚宝盆。P2P 让我们的数据仅通过 P2P 连接发送,而不经过任何第三方的服务器

4.4K10

P2P通信原理与实现

通信技术 根据客户端的不同,客户端之间进行P2P传输的方法也略有不同,这里介绍了现有的穿越中间件进行P2P通信的几种技术....中继(Relaying) 这是最可靠但也是最低效的一种P2P通信实现. 其原理是通过一个有公网IP的服务器中间人对两个内网客户端的通信数据进行中继和转发....现在假设A和B打算建立直接P2P链接,用一般的方法(通过Server S来打洞)自然是没问题的,那能不能优化呢?...具体实现 一般的网络编程,都是客户端比服务端要难,因为要处理与服务器通信同时还要处理来自用户的事件;对于P2P客户端来说更是如此,因为P2P客户端不止作 为客户端,同时也作为对等连接的服务器端....例如A想要与B建立 通信链路,先给服务器发送punch命令以及给B发送数据,服务器接到命令后给B发送punch_requst信息以及A的端点信息,B收到之后向A发送数据打通通路,然 后A与B就可以进行P2P

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

P2P通信标准协议(三)之ICE

P2P通信标准协议(二)中,介绍了TURN的基本交互流程,在上篇结束部分也有说到,TURN作为STUN协议的一个拓展,保持了STUN的工具性质,而不作为完整的NAT传输解决方案,只提供穿透NAT的功能....初学者可能会将其与网络编程的ICE弄混,其实那是不一样的东西,在网络编程中,如C++的ICE库,都是指Internate Communications Engine, 是一种用于分布式程序设计的网络通信中间件...address) 虽然潜在要求任意一个L的候选地址都能用来和R的候选地址进行通信.但是实际中发现有许多组合是无法工作的.举例来说,如果L和R都在NAT之后而且不处于同一内网,他们的直接地址就无法进行通信...即对等端的反射地址.如果有匹配,则终端会构造一个可用候选地址对(valid pair).通常很可能地址对不存在于任何检查列表中,检索检查列表中没有被服务器反射的本地地址,这些地址把它们的本地候选转换成服务器反射地址的基地址...后记 本文介绍了一种完整的NAT环境通信解决方案ICE,并且对其中涉及到的概念SDP和offer/answer模型也作了简要介绍.

1.1K11

p2p文件服务器,P2P文件传输

在C-S体系中,服务器承担着巨大的责任,需要处理大量的客户端请求,如文件下载请求,这种体系之间**客户端不能直接通信**,而是通过服务器传达。...# P2P体系 P2P,即peer-to-peer,意思是对等网络。P2P区分于C-S的就是这种体系下**客户端可以直接通信**,而通信的双方称为对等方。而对等方之间可以共享资源,如文件。...这样客户端不仅是Bit的消费者,也是Bit的生产者,大大减轻了服务器的负担。应用如:迅雷、BT。 # P2P和C-S文件分发的比较 为什么文件分发适用于P2P体系呢?看一个例子。 !...在P2P体系下,若服务器要向客户端发送一个大文件,服务器先将文件分片,再向网络中的客户端分发文件片段,而该客户端接收文件的同时,同样也可以将文件的任何部分发送到另一个客户。...之后就是这些存在文件片段的客户端相互通信,这样就减轻了服务器的发送负担。甚至服务器理想情况下负担为**L**。 而在科学计算下得到,C-S体系文件的分发时间和客户端数量N成正比。

1.5K10

基于p2p的底层通信(上篇)

由于以太坊中p2p通信相关代码量较大,打算分为上下两篇文章来加以详解:上篇主要介绍管理p2p通信的核心类ProtocolManager内部主要流程,以及通信相关协议族的设计;下篇主要介绍ProtocolManager...一般意义上的p2p网络 在开始介绍以太坊的p2p通信机制之前,不妨先来看看一般意义上的p2p网络通信的一些特征,以下部分内容摘自peer-to-peer_wiki peer-to-peer(p2p)...p2p网络通信是如何完善并实现的。...3. p2p通信协议族的结构设计 在上文的介绍中,出现了多处有关p2p通信协议的结构类型,比如eth.peer,p2p.Peer,Server等等。这里不妨对这些p2p通信协议族的结构一并作个总解。...下列UML图描绘了上述三层p2p通信协议族中的一些主要结构,希望对于理解以太坊中p2p通信相关代码有所帮助。 ? 小结: 诸如以太坊这种去中心化的数字货币运行系统,天生适用p2p通信架构。

1.6K70

P2P通信标准协议(一)之STUN

前一段时间在P2P通信原理与实现中介绍了P2P打洞的基本原理和方法,我们可以根据其原理为自己的网络程序设计一套通信规则,当然如果这套程序只有自己在使用是没什么问题的。...可是在现实生活中,我们的程序往往还需要和第三方的协议(如SDP,SIP)进行对接,因此使用标准化的通用规则来进行P2P链接建立是很有必要的。...本文就来介绍一下当前主要应用于P2P通信的几个标准协议,主要有STUN/RFC3489,STUN/RFC5389,TURN/RFC5766以及ICE/RFC5245。...STUN 通信过程 1....我本来打算一篇文章把P2P通信的所有协议都介绍完不过现在看来似乎篇幅过长了, 所以关于TURN和ICE就放在下一篇介绍好了。

1.5K20

P2P通信标准协议(二)之TURN

上一篇P2P通信标准协议(一)介绍了在NAT上进行端口绑定的通用规则,应用程序可以根据这个协议来设计网络以外的通信。...但是,STUN/RFC5389协议里能处理的也只有市面上大多数的Cone NAT(关于NAT类型可以参照P2P通信原理与实现),对于Symmetric NAT,传统的P2P打洞方法是不适用的。...因此为了保证通信能够建立,我们可以在没办法的情况下用保证成功的中继方法(Relaying),虽然使用中继会对服务器负担加重,而且也算不上P2P,但是至少保证了最坏情况下信道的通畅,从而不至于受NAT类型的限制...实例 在上一章也提到过,因为RFC是标准协议,因此实现上往往有良好的兼容性和拓展性.现存的开源P2P应用程序, 如果按照标准来设计,可以很容易与之对接.其中比较著名的就是PJSIP,PJSIP是一个开源的多媒体通信库...TURN协议因为是STUN的拓展,当然也沿袭了STUN的工具性质,只为穿越NAT提供方法,而不作为P2P通信的完整解决方案.一个比较适合研究的TurnServer源代码我也放到这里了,而客户端的实现则根据每个人的具体需求而不同

1.3K30

P2P通信标准协议(四)之SIP

在前面几篇文章中我们介绍了建立p2p通信的一般协议(簇),以及一种完整的NAT传输解决方案ICE, 但是对于多用户的通信情况,还有一些通用协议来实现标准化的管理,如之前讲过的SDP和SIP等,SIP(Session...首先,Alice在其PC上使用了SIP终端(假设是软件电话), 并且通过互联网打给Bob....通信完成之后,假设Bob先挂断电话,并产生一个BYE报文,直接发送给Alice, Alice收到后确认请求,并返回200(OK)响应,从而结束此次会话.注意这里没有发送ACK,因为ACK只有在确认INVITE...Content-Type: 消息体(message body)的格式, 如SDP信息则为"application/sdp”,关于SDP可以参考前一篇博客P2P通信标准协议(三)之ICE....至此, P2P通信系列的介绍也就告一段落了. P2P的去中心化,一直是个很令人振奋的话题,无论是在信息技术上,还是在金融,政治上,都有无限潜力.

87620

用 Peer.js 愉快上手 P2P 通信

WebRTC 是什么 WebRTC(Web Real Time Communication)也叫做 网络实时通信,它可以 允许网页应用不通过中间服务器就能互相直接传输任意数据,比如视频流、音频流、文件流...它逐渐也成为了浏览器的一套规范,提供了如下能力: 捕获视频和音频流 进行音频和视频通信 进行任意数据的通信 这 3 个功能分别对应了 3 个 API: MediaStream (又称getUserMedia...P2P 一大特点就是可以不需要中间服务器就能完成两点之间的数据传输。...不过也并不是所有情况都能 “完全脱离服务器”,在某些情况下,比如防火墙阻隔的通信,还是需要一个中介服务器来关联两端,然后再开始端对端的通信。...而 Peer.js 自己就实现了一个免费的中介服务器,默认下是连接到它的中介服务器上(数据传输不走这个 Server),当然你也可以使用它的 PeerServer 来创建自己的服务器

91910

【计算机网络】 网络体系结构分类: 客户机服务器体系和P2P

服务器主机是总是打开的, 客户机主机则并不总是打开 2. 服务器是处理所有逻辑的中心 3. 基于2的原因,两个客户机一般是不能直接通信的, 要进行通信必须经过服务器 4....P2P体系结构 和客户机/服务器体系结构截然不同的是P2P体系结构(对等结构), 在P2P中,进行通信的的并不是客户机/服务器,而是两台客户机。...进行通信的可能是两台用户的电脑,两个手机,或者一台电脑和一个手机,总之,进行通信的任意一对都被称为“对等方” 我们结合以下这副图来说明P2P体系结构讨人欢喜的优点 1.客户机间的直接通信使得P2P有了强大的自扩展性...假设上面这幅图是一个发送文件(上载/下载)文件的过程,我们可以看到,从上至下,接收文件的主机的数量是指数递增的,系统的服务能力在逐渐增强,而且越来越强。...我们假设在上图的P2P结构中增加一个服务器,并且要求在客户机/服务器结构和P2P结构间做一个发送文件的能力的对比: 要求是每个客户机都成功下载一个文件,那么 在客户机/服务器结构上,一个服务器要向7台客户机上载这个文件

2.4K100

asp dotnet core 简单开发P2P中央服务器

在做P2P的时候,如何让设备发现是整个开发里面最重要的部分。可以采用的方式有组播、扫描局域网、追踪服务器发现等方法。其中效率最高,发现效果最好的也就是使用中央服务器了。...本文告诉大家如何使用 ASP.NET Core 写一个简单的 P2P 追踪服务器P2P 里面的追踪服务器最重要的功能就是告诉设备,他周围有哪些设备,或告诉设备他需要的资源在哪些设备。...对比资源方式的优点在于,现在很多 BT 服务器都因为访问量太大而难以使用,原因是客户端每个资源都需要在服务器端注册,假设有1w个客户端,而每个客户端有100个资源,假设每10分钟需要注册一次。...,需要客户端将自己的内网 IP 告诉服务器端,这样服务器端就将这个内网 IP 记下。...假设每个客户端需要 1kb 的内存,那么 1G 的内存足够 100w 客户端,如果有这么多客户端,我就可以去打广告。

55310

P2P

P2P没有绝对的服务器和客户端之分。连接的双方分别作为临时的服务器和客户端。P2P通信的双方还可能更换IP地址。 P2P的一个最为流行的应用是BT种子,相信各位老司机对BT种子和迅雷都不陌生吧!...P2P的出现使得服务器在处理文件传输的时候,能够减少服务器的负载。在P2P中,每个对等方能够向任何其他的对等方重新分发它收的的该文件的任何部分。...现在,假设有一个文件,它的大小是F,有N个用户在请求它。假设第i个用户的下载速率是di。那么有下面的结果存在。 在客户端服务器结构中,没有对等方的存在。...服务器对N个请求就必须传输N个文件的副本;因此总共需要传输NF这么大。假设服务器的上传速率是Us,那么分发文件的时间是NF/Us。假设N个用户中最慢的下载速率是s。...因此,最短上传时间是F/Us.同时假设N个用户中最慢的下载速率是s,第i个用户的上传速率是Ui.那么我们可以得到P2P架构中最快的文件分发时间。

2.3K10

完整的 P2P 应用需要包含哪些功能

本文告诉大家一个 P2P 传输的应用程序需要有哪些核心的功能,特别是作为一个下载器需要包含的功能 核心的 P2P 的功能包含了发现设备、连接设备进行通信的功能 ?...核心功能 发现设备 连接和通信 基础功能 文件管理 上传 下载 发现设备 在 P2P 里面最核心也是最有技术含量的就是发现设备机制,这个机制做的好不好就影响到程序在发现过程的速度 发现机制里面有带中央服务器的发现和不带中央服务器的发现...关系维护 介绍 心跳 无论是中央服务器发现本地局域网发现都需要在发现之后做关系维护,例如使用中央服务器的发现,在连接上中央服务器之后,需要定时和中央服务器通信,这样中央服务器才能确定这个设备是活跃的,...当连接上的设备介绍了他的连接上的设备的时候,也就是本地设备就多发现了其他的设备 很难做到在没有中央服务器的前提下进行广域网发现,因为假设没有一台在广域网固定的设备,也就是 P2P 设备在第一次运行的时候不知道可以从哪里找到其他的设备...透传 中间服务器透传 中间设备透传 负载平衡 最短路径 链路发现 透传这个功能是假设我有三个设备,其中 A 和 B 可以相互连接,而 B 和 C 可以相互连接,但是 A 无法连接上 C 此时需要 A 和

97930

一天一个开发技巧:如何基于WebRTC建立P2P通信

webrtc及时性、低延时的优势可以让视频输出行业达到一个新高度,本文我们主要是和大家分享一下开发过程中webrtc建立P2P的流程,流程主要分为两个部分,一个是发起端,一个是接收端,下面就这两个部分的运行详细讲解一下...e、PeerConnection的setLocalDescription方法把改SDP保存设置进去,在通过websocket服务器发送给接收端。...g、这样就可进行相互通信。 接收端 a、接收端创建websocket长连接。...并通过websocket服务器发送给发起端。 f、接收到发起端发送过来的SDP信息,并通过PeerConnection的setRemoteDescription方法保存设置进去。...这样就可以相互通信。 总结 1、a~c步骤是一样的; 2、相互设置对方的SDP和ICE信息; 3、监听PeerConnection的addstream来获取远端流; 4、以下是本人总结的主要流程图。

88210
领券