搜狐视频P2P技术揭秘 – 流程篇

搜狐视频P2P技术揭秘 – 流程篇本文介绍了搜狐视频P2P技术的整体业务流程,包括服务的调用,打洞等,比较详细。

大家好,又见面了,我是你们的朋友全栈君。

1 协议

无论哪种Peer,使用的P2P协议都是UDP,因为对NAT打洞来说,UDP的打洞成功率比TCP高。据闻有不信邪的尝试过TCP,最后还是回归UDP。也有说使用UPnP的,这个主要依赖于路由设备,可控性不够。

2 探测NAT类型

P2P Client使用STUN协议探测NAT类型,要准确探测NAT类型,需要在STUN Server上部署两个网卡,然后客户端按照RFC3489规定的标准流程执行探测。以下是P2P Client使用的NAT类型探测状态机,基本遵照RFC3489的流程。
Nat探测状态机

3 获取Proxy和RtmfpServer

搜狐视频P2P有以下几类Peer:

  • Windows端的搜狐影音,通过私有协议互通;
  • Flash Peer,包括页面的Flash播放器、第三方集成了librtmfp(我们激活成功教程了rtmfp协议后封装的库)的程序,通过rtmfp协议互通;
  • H5 Peer,目前Flash播放器基本被弃用,我们在H5播放器上增加了P2P模块,使用了WebRTC的数据通道,通过SCTP协议互通。

移动端的P2P Client只能作为下载端,没有开放上传,并且只能从搜狐影音Peer和Flash Peer获取数据,不能从H5 Peer获取。无论哪种Peer,文件与Peer的信息映射都由Tracker来管理,Tracker由Proxy来代理调用。Proxy还管理了影音Peer的连接,而Flash Peer的连接则由Rtmfp Server来管理,因此这一步需要从Gateway获取到Proxy和Rtmfp Server,这样才能调用P2P系统的接口。

4 登录Proxy和RtmfpServer

获取到Proxy和Rtmfp Server后,P2P Client将分别登录到这两个服务,并保持长连接,后续所有接口将通过这两个连接进行调用。如前面所述,请求Proxy是为了连接搜狐影音Peer,请求Rtmfp Server是为了连接Flash Peer。
登录Proxy的过程中会携带探测到的NAT类型,这样在请求某个文件的Peer时,Tracker将参考这个用户的NAT类型,按照指定的规则来匹配,这样将提高打洞成功率。
而登录Rtmfp Server时会将用户的candidates保存到Rtmfp-DB。

5 获取文件信息

P2P Client请求HotVrs获取文件信息,主要输入参数为vid和清晰度,vid是一个剧的唯一标识,HotVrs返回的文件信息主要包含:

  • 剧的mp4分段列表;
  • 调度地址。

分段信息中包含了每个分段的HashId,以该HashId为索引,可以向Tracker请求缓存了该mp4分段的Peer。通过vid和mp4分段索引,可以向调度服务获取CDN的下载链接。这样,向P2P系统、CDN系统的请求参数都已经准备充分。

6 获取Peer

P2P Client请求Proxy获取缓存Peer的Peer,输入参数是文件HashId、请求的Peer个数、种类,Proxy将通过一致性哈希表到命中文件的Tracker上查找NAT类型、地域、运营商匹配的Peer并返回给客户端。

7 打洞,搜狐影音

7.1 搜集Candidates

P2P Client使用了ICE协议进行打洞,需要先获取:

  • Local Candidate,本地地址/端口;
  • Mapped Candidate,出口映射地址/端口;

实际上ICE协议还有一种Relay Candidate,是用户的Relay服务(例如TURN)上的地址端口,主要用于双向的Relay交互,这里没有用到。

7.1 传递Candidates

P2P Client要向某个搜狐影音Peer打洞,需要请求Proxy转发搜集到的Candidates,Proxy将该消息投递到目标的Proxy并下发给搜狐影音Peer,这个请求实际上就是让Peer启动打洞的请求;

7.2 Peer搜集、响应Candidates

与下载端一样,上传端Peer收到启动打洞的请求后,先创建一个udp socket绑定一个本地端口,并用这个socket请求STUN获取外网地址,搜集完Candidates后,在启动打洞请求的响应中返回自己的Candidates。

7.3 探测

下载、上传端都获取到对方的Candidates后,开始向这些地址/端口发起探测,对方收到探测包,必须无条件返回响应,以先收到响应的地址为准,作为打通的通道的地址。
这里列举一下常见的NAT的类型:

  • Open类型,具有公网地址,没有NAT;
  • 全圆锥类型;
  • 地址限制型;
  • 端口限制性;
  • 对称型;

理论上除了以下两种配对基本无法打通外,其他的配对完全可以打通:

  • 端口限制性-对称型;
  • 对称型-对称型。

因此Tracker在搜索Peer的过程中会过滤掉这样的NAT配对,但是在Peer极少的情况下,也可能返回这样的配对。这个时候由于对称型NAT的特点,可以尝试探测目标端口周围若干的端口,有比较小的几率能够打通。为了避免猜测的端口是同一时间的其他请求启动的,需要在探测包中携带一次请求会话的唯一标识,如果偶然打通了,返回的标识可以辨别是不是本次请求的响应。
P2P打洞

8 打洞,flashp2p

Flash Peer直接调用librtmfp的连接接口,由librtmfp使用rtmfp协议完成打洞过程,其过程与搜狐影音的打洞过程比稍有不同。

  • P2P Client发送IHello消息给Rtmfp Server;
  • Rtmfp Server将请求Rtmfp-DB查询目标的candidates,放入Redirect响应中;
  • P2P Client收到Redirect响应后,会尝试连接收到的Candidates,并交互一系列探测包,进而完成打洞过程。

flashp2p打洞

9 请求数据

经过以上步骤,P2P下载端和上传端打洞成功,建立了一条UDP的通道,就可以开始传输数据。

9.1 数据传输单位

搜狐影音Peer以1KByte为一个传输单元,称为subpiece,这个主要考虑到UDP MTU。5分钟的mp4分段按照1KByte为单元进行编号,赋予一个id,每个请求携带subpiece id,搜狐影音Peer寻址到对应的数据,即可返回对应的数据。

9.2 数据校验

理论上UDP的错包率极低,并且大部分操作系统默认开启了CRC校验,错包自动丢弃,但是为了保险起见,数据包中应包含数据的校验和,以保证数据的正确性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151124.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据可视化软件在大数据时代的局限性「建议收藏」

    数据可视化软件在大数据时代的局限性「建议收藏」如今,数据可视化软件风靡起来,很多企业认为数据可视化软件是启用先进分析技术的入口。但对一些应用而言,情况并不是这样的。纽约市的非营利组织DonorsChoose致力于跟踪和分析当地学校获得的财务捐助。在它试图为学校管理者、当地国会议员和记者出具一份报告时,它意识到数据可视化软件并不是万能的。乍一看,数据可视化系统对这种非技术组织来说应该是最好的选择了,不过该组织的数据科学家VladDubovsk…

    2022年9月25日
  • 寻找大素数算法

    寻找大素数算法packageprimeNumber;importjava.util.Arrays;importjava.util.Scanner;/***本文系作者高中时候与同学讨论的结果生成结果是依据素数定理推倒而来依据此公式可以求出无限大的素数但非公理次计算结果虽然可以求无限大的素数但仍需验证**@author王伟2020-3-18**/publi…

    2022年6月18日
  • 运算放大器典型电路及原理

    运算放大器典型电路及原理1.运算放大器工作原理综述:  运算放大器组成的电路五花八门,令人眼花瞭乱,在分析运算放大器工作原理时倘没有抓住核心,往往令人头大。本文收集运放电路的应用电路,希望看完后有所收获。但是在分析各个电路之前,还是先回忆一下两个运放教材里必教的技能,就是“虚短”和“虚断”。“虚短”是指在分析运算放大器处于线性状态时,可把两输入端视为等电位,这一特性称为虚假短路,简称虚短。显然不能将两输入端真正短路。…

    2022年4月29日
  • 数据库的三大范式[通俗易懂]

    数据库的三大范式[通俗易懂]当你应聘后端岗位的时候,数据库的知识必不可少,今天给大家分享一下数据库三大范式的通俗理解第一范式:无重复的列第二范式:属性完全依赖于主键第三范式:属性不依赖于其他非主属性总结:第一范式(1NF)原子性:保证数据不可再分第二范式(2NF)前提:满足第一范式每张表只描述一件事情,就是主键对应着所有信息第三范式(3NF)前提:满足第一和第二范式第三范式需要保证表中的数据和主键直接相关,而不是间接相关注意:阿里巴巴要求关联查询的表不得超过3张,数据库的性能更加重要,适当考虑规范性就好其实目前关系数据库有六种范式:

    2022年9月16日
  • 跟我学在高德地图——标注我的位置

    跟我学在高德地图——标注我的位置在高德地图上展示当前位置

    2022年5月11日
  • 基于jena的知识推理机复现「建议收藏」

    基于jena的知识推理机复现「建议收藏」知识推理机复现因csdn语法支持与github不太一样,欢迎访问本文github版:https://github.com/JimXiongGM/KnowledgeBasedSearch/blob/master/知识推理机复现.md目录mysql8.0准备d2rq工具安装与使用Apachejena+jena-fuseki本文复现基于jena的知识推理机,并把详细过程整理如下。…

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号