任何关于算法、编程、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)网络的原理相关推荐

  1. Peer to Peer ( P2P ) 综述

    1 绪言 1.1 Peer-To-Peer 介绍 最近几年,对等计算( Peer-to-Peer,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项 ...

  2. P2P对等网络技术原理整合

    P2P(Peer to Peer)对等网络 P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式.在C/S模式中,数据的分发 ...

  3. P2P通信原理与实现(C++),NAT,网络穿透原理

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  4. 解析一下p2p网络的原理?

    P2P 全称是 Peer to Peer ,翻译成中文"地位对等的两个节点之间",亦或者"点对点".区别于现在诸多 "C/S"(客户端/服务 ...

  5. P2P如何助力音视频传输,彻底熟悉P2P丨NAT的作用丨网络穿透原理到实战

    P2P如何助力音视频传输,一次课通透P2P 1. NAT的作用 2. 网络穿透的原理 3. 网络穿透实战 [技术分享篇]P2P如何助力音视频传输,彻底熟悉P2P丨NAT的作用丨网络穿透原理到实战 内容 ...

  6. 【技术篇】详解,网络穿透,P2P,打洞的核心原理丨NAT,穿透的原理丨实现网络穿透

    [技术篇]详解,网络穿透,P2P,打洞的核心原理丨NAT,穿透的原理丨实现网络穿透 那些你肯定不理解的技术,网络穿透,P2P,打洞的核心原理 1. NAT的原理 2. 穿透的原理 3. 实现网络穿透 ...

  7. 以太坊闪电网络实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 以太坊闪电网络实现原理 线上直接转账需要一定的费用,如果存在大量小额交易的情况下,费用会变的难以承受,因而以太坊引入了微交易支 ...

  8. CDN及P2P技术在流媒体网络中的应用

    新疆电信有限公司信息业务分公司 闫卫东 [ 来源:<新疆通信> 上传时间:06-10-16 ] 摘 要: 随着宽带网络的日益普及,流媒体成为了重要的互联网业务之一,完成实时流媒体的分发的主 ...

  9. P2P之UDP穿透NAT的原理

    关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...

  10. UDP 构建p2p打洞过程的实现原理(持续更新)

    UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...

最新文章

  1. DeepMind提出基于视觉的强化学习模型,十八般兵器对机器人不在话下
  2. OpenCASCADE绘制测试线束:拓扑命令之扫掠Sweeping
  3. 编程书籍阅读随谈(第四篇)
  4. 控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序
  5. hadoop之文件管理基本操作
  6. php 长剑设计模式,PHP设计模式(创建型)
  7. python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
  8. 使用phantomjs将网页转换成pdf或者长图片
  9. 【微信小程序】解决Echarts在微信小程序tab切换时的显示问题
  10. Unity3D 游戏摄像机的环绕与拉近
  11. 智能和弦生成工具-Plugin Boutique Scaler 2 v2.3.1 WiN-MAC
  12. VC安装产生eula.1028.txt等文件的问题
  13. 大数据项目实战——电信业务大数据分析系统
  14. 工业级加固固态硬盘产品性能-领存2.5 寸 R-SATA SSD介绍
  15. 乐视账号服务器关闭,乐视手机重置后无法登录账号 官方给出解决方案
  16. 机制设计专栏(2)-说一说IC机制
  17. Android模拟器检测体系梳理
  18. nodejs下载及安装(windows)
  19. win10安装CP2102(STM32串口通信)驱动
  20. U盘损坏如何修复,三个方法任你选!

热门文章

  1. 跳转的两种方式(转发与重定向)
  2. Entity Framework技巧系列之七 - Tip 26 – 28
  3. EasyUI DataGrid 添加排序
  4. java线程冲突问题——不安全的线程例子
  5. Sharepoint2010 From 认证常见问题
  6. SpringBoot 入门篇(二) SpringBoot常用注解以及自动配置
  7. 4——编码规则以及vim的使用和虚拟环境
  8. 【Java TCP/IP Socket】UDP Socket(含代码)
  9. 分享我的iOS app 开发杂谈3
  10. 判断 wp 是否是活跃页面