P2P(Peer to Peer)网络的原理
任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~
最近在研究P2P技术,奈何相关资料不多,自己琢磨了一下,分享一下学习P2P的一些原理, 以及如何打造一个P2P聊天应用。
这里指的P2P是指peer to peer, 点对点的技术, 每个客户端都是服务端,没有中心服务器,不是websocket针对某个connection推送消息。
技术要点
- udp协议
- 节点之间的建立,连接和广播
- 内网穿透,如何能让两个处在内网的节点,相互发现自己的存在,并且建立通信
原理
首先解决的是内网穿透的问题,常见的底层协议tcp,udp,他们各自有优缺点,简单说明一下。 tcp:需要处理粘包问题,双工流通道,是可靠的链接。 udp: 每次发送的都是数据包,没有粘包问题,但是连接不可靠,只能传输少量数据
更加详细的请Google
这里选择udp协议,简单一些。
再下来是内网穿透,先说结论: 两个处于不同内部网络的节点,永远无法发现他们之间的相互存在,你就算是想顺着网线过去打他都不行。
所有的内网穿透原理无外乎需要一个有公网ip的中介服务器,包括虚拟货币像比特币之类的,所以首先要有一个创世节点
在NodeJS中,创建udp服务也很简单
const dgram = require("dgram");
const udp = dgram.createSocket("udp4");
udp.bind(1090, callback)
把服务部署要公网,那么其他所有的节点都能访问,通过中转服务器,能够使得两个节点可以建立连接
我们是要建立这样的P2P网络
假如现在只有3个节点: 创世节点, B节点, C节点, 创世节点有公网IP
我用对话的形式,阐述他们建立链接的过程:
B节点: hey,创世节点,我要加入到P2P网络里面,告诉其他兄弟,我来了 创世节点: 兄弟们,刚刚有个叫做B的节点加入网络了,你们也去告诉其他节点 其他节点: 刚刚收到来自 "创世节点"的通知,有个fresh meet加入网络了,叫做 “B”
… 至此,所有人都知道了B节点加入了网络,里面记载着B节点的相关信息,包括IP地址,包括udp端口号
此时C节点也要加入网络,并且想要和B节点对话:
C节点: hey,创世节点,我要加入到P2P网络里面,并且我要和B对话 创世节点: 兄弟们,刚刚有个叫做B的节点加入网络了,你们也去告诉其他节点,顺便看看有没有B这个节点 其他节点: 刚刚收到来自 "创世节点"的通知,有个fresh meet加入网络了,叫做 “C”,你们也看看有没有B这个节点 其他节点2: 收到通知,听说一个叫做C的节点在找一个B节点,我这里有它的信息,ip是xxxx.xxxx.xxx.xxxx, 端口10086 B节点: 有个C的家伙(ip: xxxx.xxxx.xxxx.xxxx, 端口1000)要找我
到这里,B获取到了C的信息,包括IP和端口,C也拿到了B的信息.
于是,他们两个就可以建立通信。消息流: B <----> C. 中间不经过任何服务器
用一张图来形容:
总结
在设计中,每个节点的功能都是一样的。如果需要加入到网络中,不一定跟创世节点链接
假设已存在的节点: 创世节点,A、B、C节点,此时有个D节点想要加入到网络。
那么D节点不一定非得链接到创世节点,可以链接到A、B、C中的任意一个节点,然后该节点再广播给其他节点说"Hey, 有个新人叫做D的加入了网络"。
这样所有人都知道,有个叫做D的节点存在,你可以和它通信,同时D节点和会同步已存在的节点。这样D节点也知道了其他节点的存在了。
P2P(Peer to Peer)网络的原理相关推荐
- Peer to Peer ( P2P ) 综述
1 绪言 1.1 Peer-To-Peer 介绍 最近几年,对等计算( Peer-to-Peer,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项 ...
- P2P对等网络技术原理整合
P2P(Peer to Peer)对等网络 P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式.在C/S模式中,数据的分发 ...
- P2P通信原理与实现(C++),NAT,网络穿透原理
1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...
- 解析一下p2p网络的原理?
P2P 全称是 Peer to Peer ,翻译成中文"地位对等的两个节点之间",亦或者"点对点".区别于现在诸多 "C/S"(客户端/服务 ...
- P2P如何助力音视频传输,彻底熟悉P2P丨NAT的作用丨网络穿透原理到实战
P2P如何助力音视频传输,一次课通透P2P 1. NAT的作用 2. 网络穿透的原理 3. 网络穿透实战 [技术分享篇]P2P如何助力音视频传输,彻底熟悉P2P丨NAT的作用丨网络穿透原理到实战 内容 ...
- 【技术篇】详解,网络穿透,P2P,打洞的核心原理丨NAT,穿透的原理丨实现网络穿透
[技术篇]详解,网络穿透,P2P,打洞的核心原理丨NAT,穿透的原理丨实现网络穿透 那些你肯定不理解的技术,网络穿透,P2P,打洞的核心原理 1. NAT的原理 2. 穿透的原理 3. 实现网络穿透 ...
- 以太坊闪电网络实现原理
2019独角兽企业重金招聘Python工程师标准>>> 以太坊闪电网络实现原理 线上直接转账需要一定的费用,如果存在大量小额交易的情况下,费用会变的难以承受,因而以太坊引入了微交易支 ...
- CDN及P2P技术在流媒体网络中的应用
新疆电信有限公司信息业务分公司 闫卫东 [ 来源:<新疆通信> 上传时间:06-10-16 ] 摘 要: 随着宽带网络的日益普及,流媒体成为了重要的互联网业务之一,完成实时流媒体的分发的主 ...
- P2P之UDP穿透NAT的原理
关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...
- UDP 构建p2p打洞过程的实现原理(持续更新)
UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55) 阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...
最新文章
- DeepMind提出基于视觉的强化学习模型,十八般兵器对机器人不在话下
- OpenCASCADE绘制测试线束:拓扑命令之扫掠Sweeping
- 编程书籍阅读随谈(第四篇)
- 控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序
- hadoop之文件管理基本操作
- php 长剑设计模式,PHP设计模式(创建型)
- python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
- 使用phantomjs将网页转换成pdf或者长图片
- 【微信小程序】解决Echarts在微信小程序tab切换时的显示问题
- Unity3D 游戏摄像机的环绕与拉近
- 智能和弦生成工具-Plugin Boutique Scaler 2 v2.3.1 WiN-MAC
- VC安装产生eula.1028.txt等文件的问题
- 大数据项目实战——电信业务大数据分析系统
- 工业级加固固态硬盘产品性能-领存2.5 寸 R-SATA SSD介绍
- 乐视账号服务器关闭,乐视手机重置后无法登录账号 官方给出解决方案
- 机制设计专栏(2)-说一说IC机制
- Android模拟器检测体系梳理
- nodejs下载及安装(windows)
- win10安装CP2102(STM32串口通信)驱动
- U盘损坏如何修复,三个方法任你选!