关于P2P(点对点)

P2P 是一种客户端与客户端之间,点对点连接的技术,在早前的客户端都是公网IP,没有NAT的情况下,P2P是较为容易实现的。

但现在的P2P,实现上面会略微有一些复杂:需要采取UDP打洞的技术,但UDP打出来的洞,是有持续时间的,因为ASN/ISP(运营商)对于P2P,存在较为严重的技术限制。

并且UDP能不能打洞,还需要取决于NAT的限制类型,可以参考下文了解NAT的类型及限制条件

关于NAT的几种类型_nat有几种-CSDN博客

P2P示意图:

上图为P2P的标准架构,即一个P2P中心服务器,用以为P2P发现其它P2P客户端提供支援,并可以实现UDP打洞。

P2P具体流程/NS为:

1、P2P Client 上线流程

     1.1、P2P Client 分配一个随机UDP端口并向中心服务器,发送 Hello 数据报

     1.2、P2P Center 收到来自P2P Client 的 Hello 数据报后,分配一个随机的临时UDP端口并反向该客户端的目的 IPEndPoint(地址端点;IP+PORT)发送数据,来等待测试 ACK 应答,这类似 TCP SYN/CONNECT 的三次握手的流程,其目的是为了确保NAT的类型是被支援P2P工作流的。

2、根据P2P业务类型的不同,当P2P Client 上线流程完成之后,则P2P Center,可能需要广播所有在线的 P2P Client 的IP+PORT(地址端点)

     当然,这也可能不需要,而是P2P Client 在上线后主动进行 “Discover(发现)”,在大多数的 P2P 工程及解决方案之中,并不需要在P2P上线后,主动广播并告知所有其它在线的P2P Client 链路信息。

3、当P2P Client 获取到其它 P2P Client 的链路信息之后,则需要向目的 P2P Client 进行双向握手,以确保双方之间建立所需的通信链路。

4、当第三条完成之后,P2P Client 之间便可以正常交换数据,但在一些P2P解决方案及场景之中并不需要握手这个过程,它们是直接投递并双向交换数据报。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值