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

P2P通信原理

P2P 就是端到端 我发一条微信给你,这不是 P2P。...P2P 是这样: ? P2P 技术要解决的问题 目前使用的终端设备(如手机),绝大部分都仅仅拥有特定网络下的内网 IP,而处在不同内网环境中的设备并不能够使用内网 IP 直接进行通信。...P2P 的知识点 我们的终端设备(比如手机),一定是存在于某个内网环境下边的,当设备与内网之外的其他设备进行通信时,需要将内网 IP 转换为一个可以被全球任意设备访问到的公网 IP,这种技术叫做 NAT...这样,之后的通信就可以正常进行了。 刚才之所以说只有锥型 NAT 才可以进行 P2P,原因在第三步可以看出来。...这样让我们没办法拿到隐藏在 NAT 后边内网设备的 NAT 入口,也就没办法进行 P2P 通信了。 P2P 也用到了一个服务器,跟微信一样。

4.6K10

P2P通信原理与实现

通信技术 根据客户端的不同,客户端之间进行P2P传输的方法也略有不同,这里介绍了现有的穿越中间件进行P2P通信的几种技术....中继(Relaying) 这是最可靠但也是最低效的一种P2P通信实现. 其原理是通过一个有公网IP的服务器中间人对两个内网客户端的通信数据进行中继和转发....很多当前的P2P系统都实现了这种技术,但其局限性也是很明显的,只有当其中一方有公网IP时链接才能建立. 越来越多的情况下, 通信的双方都在NAT之后,因此就要用到我们下面介绍的第三种技术了....UDP打洞(UDP hole punching) 第三种P2P通信技术,被广泛采用的,名为“P2P打洞“....具体实现 一般的网络编程,都是客户端比服务端要难,因为要处理与服务器的通信同时还要处理来自用户的事件;对于P2P客户端来说更是如此,因为P2P客户端不止作 为客户端,同时也作为对等连接的服务器端.

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

    实时通信与socket

    在很久之前浏览器要实现一个与服务端的实时双端通信(比如聊天系统)只能通过http轮询来做 当然,除此之外也有利用了flash实现一个socket来作为中转的方式。...后来随着web应用的越发成熟,html5推出了webSocket协议,webSocket协议的出现大大的提高了浏览器与服务端实时通信的效率与性能。...随着浏览器设备的不断更新升级,webSocket的逐渐成为了实时通信的主流方式 那么webSocket的优势在哪里呢?...要想通过http建立实时通信,必须每隔一段时间发起一个请求询问服务器一次。 当然http也可以开启长链接,增长tcp断开的时间,一定程度上减少http建立连接的耗时。...这是一种新提出的 API,用于从服务端单向将数据推送给 Web App. 3)WebSocket 在需要接近实时双向通信的领域,很有用武之地。

    93710

    WebRTC 前端实时通信技术

    接下来,本文将从实战的角度来介绍如何使用 HTML5标准中 WebRTC相关 API 来实现 P2P 功能。...WebRTC WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer...上述过程基本上就是进行实时通信需要经历的过程,整个过程说起来很简单,但实际上端与端之间通常存在有很多层的防火墙和 NAT 设备阻隔着,需要经过一系列繁琐的信令交换,网络地址转换、打洞等过程。...本文出现的初衷也正是为了了解这些库在实现 P2P 功能上有无独到之处,通过前文的描述我们知道,P2P 的核心要求就在于穿透 NAT 设备,只有穿越了它才能真正建立起端对端的连接,目前 NAT 设备有两种类型...:对称型和锥型,而 P2P 需要的是锥型 NAT。

    4.6K20

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

    P2P通信标准协议(二)中,介绍了TURN的基本交互流程,在上篇结束部分也有说到,TURN作为STUN协议的一个拓展,保持了STUN的工具性质,而不作为完整的NAT传输解决方案,只提供穿透NAT的功能....初学者可能会将其与网络编程的ICE弄混,其实那是不一样的东西,在网络编程中,如C++的ICE库,都是指Internate Communications Engine, 是一种用于分布式程序设计的网络通信中间件...+-------+ +-------+ ICE的基本思路是,每个终端都有一系列传输地址(包括传输协议,IP地址和端口)的候选,可以用来和其他端点进行通信...转换的传输地址,即反射地址(server reflective address) TURN服务器分配的中继地址(relay address) 虽然潜在要求任意一个L的候选地址都能用来和R的候选地址进行通信...后记 本文介绍了一种完整的NAT环境通信解决方案ICE,并且对其中涉及到的概念SDP和offer/answer模型也作了简要介绍.

    1.2K11

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

    在前面几篇文章中我们介绍了建立p2p通信的一般协议(簇),以及一种完整的NAT传输解决方案ICE, 但是对于多用户的通信情况,还有一些通用协议来实现标准化的管理,如之前讲过的SDP和SIP等,SIP(Session...SIP不是一个垂直集成的通讯系统,而是作为一个组件与其他协议共同运作,如RTP等实时传输协议等.另外SIP不提供服务, 只提供可以用来实现各种服务的原语.比如,SIP可以定位用户并且传输一个不透明的对象到其当前地址...收到ACK之后,Alice和Bob就可以互相通信了....Content-Type: 消息体(message body)的格式, 如SDP信息则为"application/sdp”,关于SDP可以参考前一篇博客P2P通信标准协议(三)之ICE....至此, P2P通信系列的介绍也就告一段落了. P2P的去中心化,一直是个很令人振奋的话题,无论是在信息技术上,还是在金融,政治上,都有无限潜力.

    94220

    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.4K30

    基于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.7K70

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

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

    1.6K20

    详解WebRTC——网页实时通信技术

    | 导语 WebRTC相关技术有很多可以创新的点,比如业界已有创业团队在做Web P2P,核心技术就是WebRTC + DASH协议,共享空闲资源,基于此可以做雾CDN,节点都在用户侧,去中心化 详解WebRTC...——网页实时通信技术 简介 全称是: Web browser Real Time Communication 特点如下: 是基于浏览器的实时音视频(数据)通信技术 免插件 开源 已被W3C纳入HTML5...标准 跨平台,跨浏览器,跨移动应用 Mac OSX、Windows、iOS、Android、Linux 应用场景 适用于网页间音视频实时通信,点对点数据共享,QQ、腾讯视频已有应用 优势 方便。...对于用户来说,在WebRTC出现之前想要进行实时通信就需要安装插件和客户端,但是对于很多用户来说,插件的下载、软件的安装和更新这些操作是复杂而且容易出现问题的,现在WebRTC技术内置于浏览器中,用户不需要使用任何插件或者软件就能通过浏览器来实现实时通信...缺点 传输质量难以保证,比如跨地区、跨运营商、低带宽、高丢包、P2P连接率、呼叫成功率。 设备端适配,如回声、录音失败等问题层出不穷。这一点在安卓设备上尤为突出。

    3.6K80

    实时通信技术大乱斗

    现代应用程序的很多功能依赖于实时数据通信: • 聊天• 实时股票更新• 现场拍卖• 体育/新闻实时更新• 多人游戏• 位置服务• 进度条 HTTP通信的核心一直没变,依旧是请求/响应模型,这给实时通信带来了根本性挑战...长轮询是轮询的一种高级形式,可满足实时通信的需要。 客户端向服务器发出信息请求,服务器hold请求,直到发生值得关注的事情(或请求即将超时)。...---- 以上技术可以解决HTTP障碍并促进实时通信。问题在于,大多数这些技术都需要开发人员的大量工作。 如果有一些框架可以消除通信的复杂性,让开发人员可以专注于构建实时应用程序,那岂不是很好吗?...SignalR是.NET技术栈成熟的实时通信框架。 SignalR为服务器和客户端之间的双向远程过程调用(RPC)提供API,消除了实时通信的复杂性。...SignalR使用服务器端集线器的概念来帮助已连接客户端的实时通信和管理。服务器和客户端可以无缝地相互调用方法,这种交互方法是强类型的。

    98710

    实时通信框架 Socket.IO

    动手开发一个小示例 Socket.IO 简介 Socket.IO 可以实现实时双向基于事件的通信,专注于速度和可靠性,官方称其是最快的和最可靠的实时引擎 Socket.IO 支持非常全面的通信机制,包括...根据浏览器的支持情况自动选择最佳方式 Socket.IO 完全由JavaScript实现,基于Node.js,浏览器中引用Socket.IO的JS文件,服务器中使用Node.js创建一个server,只需很少的代码就可以实现实时通信...的适配器 socket.io-redis Redis的适配器 应用案例 浏览器中的 Linux 终端 - tty.js tty.js 可以让我们在页面中操作Linux服务器,就像使用正常的SSH客户端一样实时执行命令...tty.js就是基于 socket.io 实现,体验非常顺畅,也很稳定 起步实践 目标 在页面中实时动态显示server的时间 实现 安装 socket.io npm install socket.io...小结 socket.io 的应用非常广泛,很可靠,如果有实时通信的需求,可以考虑下 官网地址:http://socket.io

    2.4K50

    用 Peer.js 愉快上手 P2P 通信

    WebRTC 是什么 WebRTC(Web Real Time Communication)也叫做 网络实时通信,它可以 允许网页应用不通过中间服务器就能互相直接传输任意数据,比如视频流、音频流、文件流...它逐渐也成为了浏览器的一套规范,提供了如下能力: 捕获视频和音频流 进行音频和视频通信 进行任意数据的通信 这 3 个功能分别对应了 3 个 API: MediaStream (又称getUserMedia...P2P 一大特点就是可以不需要中间服务器就能完成两点之间的数据传输。...不过也并不是所有情况都能 “完全脱离服务器”,在某些情况下,比如防火墙阻隔的通信,还是需要一个中介服务器来关联两端,然后再开始端对端的通信。...', port: 9000, path: '/myapp' }); WebRTC API 在安全性方面也有很多限制: 总之,端对端技术在某些要求实时性很强的场景下是很有用的

    97010

    详解WebRTC-网页实时通信技术

    简介 全称是: Web browser Real Time Communication 特点如下: 是基于浏览器的实时音视频(数据)通信技术 免插件 开源 已被W3C纳入HTML5标准 跨平台,跨浏览器...,跨移动应用 Mac OSX、Windows、iOS、Android、Linux 应用场景 适用于网页间音视频实时通信,点对点数据共享,QQ、腾讯视频已有应用 优势 1.方便。...对于用户来说,在WebRTC出现之前想要进行实时通信就需要安装插件和客户端,但是对于很多用户来说,插件的下载、软件的安装和更新这些操作是复杂而且容易出现问题的,现在WebRTC技术内置于浏览器中,用户不需要使用任何插件或者软件就能通过浏览器来实现实时通信...缺点 1.传输质量难以保证,比如跨地区、跨运营商、低带宽、高丢包、P2P连接率、呼叫成功率。 2.设备端适配,如回声、录音失败等问题层出不穷。这一点在安卓设备上尤为突出。...Demo 代码分析 以Demo为例,分析Web P2P创建、通信、传输数据等流程,具体分析API中各个关键属性、方法、事件的含义和标准操作姿势 完整源码见Github function createConnection

    3.2K30

    实时通信 | Pusher入门教程实战

    Pusher 是一种实时通信平台,提供了在Web应用程序中实现实时功能的技术。它可以帮助开发者轻松地添加实时数据到应用程序中,实现实时通信、通知、活动更新等功能。...Pusher 和 Websocket 区别 Pusher和WebSocket是两种不同的实时通信技术,它们都可以实现实时数据传输,但存在一些不同之处。...Pusher: 是一个实时通信平台,它提供了一种简单的方式来添加实时功能到Web应用程序中。Pusher通过建立一个持久连接,允许服务器向客户端推送数据。...但是,WebSocket也提供了更灵活和强大的实时通信能力,可以用于各种复杂的应用场景。...总结来说,Pusher和WebSocket都是实现实时通信的重要技术,它们都可以实现实时数据传输,但Pusher更侧重于提供简单易用的实时功能,而WebSocket则更加底层,需要开发者自行处理更多的细节

    67110

    chrome插件实时通信的几种方式

    插件开发中我们知道,background.js是独立于浏览器的,在background.js中主要负责popup与content.js的交互,在某些时候,也许你需要在一个插件的设置页与content进行实时通信...} if (type === "changeTheme") { console.log(request, "=request"); } }); 在一个插件的内部页面与content实时通信...比如现在有个场景,我在设置页需要设置content页面的主题,而且需要实时修改,那么怎么办呢?...总结 了解content.js与background.js的通信,或者是popup与content的通信,借助chrome.runtime.sendMessage实现 在插件的内部页面如何与其他页面通信...,比如一个插件的设置页与content.js实时通信,我们是借助先查询所有的tabs,chrome.tabs.query({}, callback),然后再向所有的tabs发送消息chrome.tabs.sendMessage

    2K10
    领券