当前位置: 首页 > news >正文

大型网站建设入门曲靖网站制作公司

大型网站建设入门,曲靖网站制作公司,建设医院官方网站,关于书店电商网站建设的心得网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题#xff0c;它对网络传输的质量有严重的影响#xff0c; 网络拥塞是导致网络吞吐降低#xff0c; 网络丢包等的主要原因之一#xff0c; 这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果…网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题它对网络传输的质量有严重的影响 网络拥塞是导致网络吞吐降低 网络丢包等的主要原因之一 这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果。特别是在通信领域 网络拥塞导致的丢包 延迟 抖动等问题 严重的影响了通信质量 如果不能很好的解决这些问题 一个通信产品就无法在现实环境中正常使用。 在这方面WebRTC中的网络拥塞控制算法给我们提供了一个可供参考的实现这篇小文会尽量详细的介绍WebRTC中的拥塞控制算法---GCC的实现方式。1.WebRTC简介WebRTC是一个Web端的实时通信解决方案 它可以做到在不借助外部插件的情况下 在浏览器中实现点对点的实时通信。 WebRTC已经由W3C和IETF标准化最早推出和支持这项技术的浏览器是Chrome, 其他主流浏览器也正在陆续支持。Chrome中集成的WebRTC代码已全部开源 同时Chrome提供了一套LibWebRTC的代码库 使得这套RTC架构可以移植到其他APP当中提供实时通信功能。2.GCC算法概述本文主要介绍的是WebRTC的拥塞控制算法 WebRTC的传输层是基于UDP协议 在此之上 使用的是标准的RTP/RTCP协议封装媒体流。RTP/RTCP本身提供很多机制来保证传输的可靠性比如RR/SR, NACK PLI FIR, FEC REMB等同时WebRTC还扩展了RTP/RTCP协议 来提供一些额外的保障 比如Transport-CCFeedback, RTP Transport-wide-cc extension RTP abs-sendtime extension等 其中一些后文会详细介绍。GCC算法主要分成两个部分 一个是基于丢包的拥塞控制一个是基于延迟的拥塞控制。 在早期的实现当中 这两个拥塞控制算法分别是在发送端和接收端实现的 接收端的拥塞控制算法所计算出的估计带宽 会通过RTCP的remb反馈到发送端 发送端综合两个控制算法的结果得到一个最终的发送码率并以此码率发送数据包。下图便是展现的该种实现方式从图中可以看到 Loss-Based Controller在发送端负责基于丢包的拥塞控制它的输入比较简单 只需要根据从接收端反馈的丢包率 就可以做带宽估算 上图右侧比较复杂 做的是基于延迟的带宽估计 这也是本文后面主要介绍的部分。在最近的WebRTC实现中 GCC把它的两种拥塞控制算法都移到了发送端来实现 但是两种算法本身并没有改变只是在发送端需要计算延迟 因而需要一些额外的feedback信息 为此WebRTC扩展了RTCP协议 其中最主要的是增加了Transport-CC Feedback该包携带了接收端接收到的每个媒体包的到达时间。基于延迟的拥塞控制比较复杂 WebRTC使用延迟梯度来判断网络的拥塞程度延迟梯段的概念后文会详细介绍其算法分为几个部分到达时间滤波器过载检测器速率控制器在获得两个拥塞控制算法分别结算到的发送码率之后 GCC最终的发送码率取的是两种算法的最小值。下面我们详细介绍WebRTC的拥塞控制算法GCC。3、基于丢包的带宽估计基于丢包的拥塞控制比较简单 其基本思想是根据丢包的多少来判断网络的拥塞程度 丢包越多则认为网络越拥塞 那么我们就要降低发送速率来缓解网络拥塞如果没有丢包这说明网络状况很好 这时候就可以提高发送码率 向上探测是否有更多的带宽可用。实现该算法有两点一是获得接收端的丢包率 一是确定降低码率和提升码率的阈值。WebRTC通过RTCP协议的Receive Report反馈包来获取接收端的丢包率。Receive Report包中有一个lost fraction字段 包含了接收端的丢包率如下图所示。另外 WebRTC通过以下公式来估算发送码率式中 As(tk) 即为 tk 时刻的带宽估计值fl(tk) 即为 tk 时刻的丢包率简单来说 当丢包率大于10%时则认为网络有拥塞 此时根据丢包率降低带宽丢包率越高带宽降的越多 当丢包率小于2%时则认为网络状况很好 此时向上提高5%的带宽以探测是否有更多带宽可用 2%到10%之间的丢包率 则会保持当前码率不变 这样可以避免一些网络固有的丢包被错判为网络拥塞而导致降低码率 而这部分的丢包则需要通过其他的如NACK或FEC等手段来恢复。4、基于延迟梯度的带宽估计WebRTC实现的基于延迟梯度的带宽估计有两种版本最早一种是在接受端实现评估的带宽结果通过RTCP REMB消息反馈到发送端。 在此种实现中 为了准确计算延迟梯度WebRTC添加了一种RTP扩展头部abs-send-time, 用来表示每个RTP包的精确发送时间 从而避免发送端延迟给网络传播延迟的估计带来误差。这种模式也是RFC和google的paper中描述的模式。在新近的WebRTC的实现中所有的带宽估计都放在了发送端 也就说发送端除了做基于丢包的带宽估计 同时也做基于延迟梯度的带宽估计。 为了能够在接受端做基于延迟梯度的带宽估计 WebRTC扩展了RTP/RTCP协议 其一是增加了RTP扩展头部 添加了一个session级别的sequence number, 目的是基于一个session做反馈信息的统计 而不紧紧是一条音频流或视频流 其二是增加了一个RTCP反馈信息transport-cc-feedback 该消息负责反馈接受端收到的所有媒体包的到达时间。接收端根据包间的接受延迟和发送间隔可以计算出延迟梯度从而估计带宽。关于如何根据延迟梯度推断当前网络状况 后面会分几点详细展开讲 总体来说分为以下几个步骤到达时间滤波器过载检测器速率控制器其过程就是 到达时间滤波器根据包间的到达时延和发送间隔计算出延迟变化 这里会用到卡尔曼滤波对延迟变化做平滑以消除网络噪音带来的误差延迟变化会作为过载检测器的输入由过载检测器判断当前网络的状态有三种网络状态返回overuse/underuse/normal检测的依据是比较延迟变化和一个阈值 其中该阈值非常关键且是动态调整的。最后根据网络状态的变化 速率控制器根据一个带宽估计公式计算带宽估计值。5、到达时间滤波器前面多次提到WebRTC使用延迟梯度来判断网络拥塞状况 那什么是延迟梯度为什么延迟梯度可以作为判断网络拥塞的依据我们在这里详细介绍 首先来看以下 延迟梯度是怎样计算出来的\1. 延迟梯度的计算如上图所示 用两个数据包的到达时间间隔减去他们的发送时间间隔 就可以得到一个延迟的变化 这里我们称这个延迟的变化为单向延迟梯度one way delay gradient 其公式可记为那么为什么延迟梯度可以用来判断网络拥塞的呢如下面两图所示左边这幅图的场景是理想状况下的网络传输 没有任何拥塞 按我们上面提到的公式2来计算这种场景下 所计算到的延迟梯度应该为0。而右边这幅图的场景则是发送拥塞时的状况当包在t2时刻到达时 该报在网络中经历过一次因拥塞导致的排队 这导致他的到达时间比原本要完 此时计算出的延迟梯度就为一个较大的值通过这个值 我们就能判断当前网络正处在拥塞状态。在WebRTC的具体实现中 还有一些细节来保证延迟梯度计算的准确性总结如下由于延迟梯度的测量精度很小 为了避免网络噪音带来的误差利用了卡尔曼滤波来平滑延迟梯度的测量结果。WebRTC的实现中 并不是单纯的测量单个数据包彼此之间的延迟梯度 而是将数据包按发送时间间隔和到达时间间隔分组计算组间的整体延迟梯度。分组规则是发送时间间隔小于5ms的数据包被归为一组 这是由于WebRTC的发送端实现了一个平滑发送模块 该模块的发送间隔是5ms发送一批数据包。到达时间间隔小于5ms的数据包被归为一组 这是由于在wifi网络下 某些wifi设备的转发模式是 在某个固定时间片内才有机会转发数据包 这个时间片的间隔可能长达100ms 造成的结果是100ms的数据包堆积 并在发送时形成burst 这个busrt内的所有数据包就会被视为一组。为了计算延迟梯度 除了接收端要反馈每个媒体包的接受状态同时发送端也要记录每个媒体包的发送状态 记录其发送的时间值。在这个情况下abs-send-time扩展不再需要。\2. transport-cc-feedback消息该消息是对RTCP的一个扩展 专门用于在GCC中反馈数据包的接受情况。这里有两点需要注意该消息的发送速率如何确定 按RFC[2]中的说明可以是收到每个frame发送一次 另外也指出可以是一个RTT的时间发送一次 实际WebRTC的实现中大约估计了一个发送带宽的5%这样一个发送速率。如果这个数据包丢失怎么办 RFC[2]和WebRTC实现中都是直接忽略 这里涉及的问题是忽略该包对计算延迟梯度影响不大 只是相当于数据包的分组跨度更大了 丢失的包对计算没有太大影响 但另一个问题是 发送端需要计算接受端的接受速率当feedback丢失时会认为相应的数据包都丢失了 这会影响接受速率的计算 这个值在后续计算估计带宽中会用到 从而导致一定误差。具体消息格式如下如上图所示 红框之前的字段是RTCP包的通用字段 红框中的字段为transport-cc的具体内容其中前四个字段分别表示base sequence number当前包携带的媒体包的接受信息是从哪个包开始的packet status count当前包携带了几个媒体包的接受信息reference time一个基准时间计算该包中每个媒体包的到达时间都要基于这个基准时间计算fb pkt. count第几个transport-cc包在此之后 是两类信息多个packet chunk字段和多个recv delta字段。其中pcaket chunk具体含义如下如下两图所示 表示媒体包到达状态的结构有两种编码方式 其中 T 表示chunk type0表示RunLength Chunk, 1表示Status Vector Chunk.1Run LengthChunk这种表示方式是用于 当我们连续收到多个数据包 他们都有相同的到达状态 就可以用这种编码方式。 其中S表示的是到达状态 Run Length表示有多少个连续的包属于这一到达状态。到达状态有三种00 Packet not received01 Packet received, small delta 所谓small detal是指能用一个字节表示的数值10 Packet received, large ornegative delta large即是能用两个字节表示的数值2) Status Vector Chunk这种表示方式用于每个数据包都需要自己的状态表示码 当然还是上面提到的那三种状态。但是这里的S就不是上面的意思 这里的S指的是symbol list的编码方式 s 0时 表示symbollist的每一个bit能表示一个数据包的到达状态 s 1时表示每两个bit表示一个数据包的状态。s 0 时0 Packet not received1 Packet received , small detals 1 时同 Run Length Chunk最后 对于每一个状态为Packet received 的数据包的延迟依次填入|recv delta|字段 到达状态为1的recv delta占用一个字节 到达状态为2的recv delta占用两个字节。可以看出以上编码的目的是为了尽量减少该数据包的大小 因为每个媒体包都需要反馈他的接受状态。6、过载检测器到达时间滤波器计算出每组数据包的延迟梯度之后 就要据此判断当前的网络拥塞状态 通过和某个阈值的比较 高过某个阈值就认为时网络拥塞低于某个阈值就认为网路状态良好因此如何确定阈值就至关重要。这就是过载检测器的主要工作它主要有两部分 一部分是确定阈值的大小 另一部分就是依据延迟梯度和阈值的判断估计出当前的网络状态一共有三种网络状态: overuse underuse normal我们先看网络状态的判断。\1. 网络状态判断判断依据入下图所示其中m(t i)表示的是计算出的延迟梯r(t i)表示的是一个判断阈值 这个阈值是自适应的 后面还会介绍他是怎么动态调整的这里先只看如何根据这两个值判断当前网络状态。从上图可以看出 这里的判断方法是这样计算的依据是 网络发生拥塞时 数据包会在中间网络设备中排队等待转发 这会造成延迟梯度的增长 当网络流量回落时网络设备快速消耗转发其发送队列中的数据包而后续的包排队时间更短 这时延迟梯度减小或为负值。这里了需要说明的是在实际WebRTC的实现中虽然每个数据包组前面提到了如何分组的到达都会触发这个探测过程 但是使用的m(ti)这个值并不是直接使用每组数据到来时的计算值 而是将这个值放大了60倍。这么做的目的可能是m(ti)这个值通常情况下很小理想网络下基本为0 放大该值可以使该算法不会应为太灵敏而波动太大。在判断是否overuse时不会一旦超过阈值就改变当前状态 而是要满足延迟梯度大于阈值至少持续100ms 才会将当前网络状态判断为overuse。\2. 自适应阈值上节提到的阈值r(t i)值 它是判断当前网络状况的依据所以如何确定它的值也就非常重要了。虽然理想状况下网络的延迟梯度是0 但是实际的网络中 不同转发路径其延迟梯度还是有波动的 波动的大小也是不一样的这就导致如果设置固定的 r(t i)太大可能无法探测到拥塞 太小又太敏感 导致速率了变化很大。同时 另外一个问题是实验中显示固定的值会导致在和TCP链接的竞争中自己被饿死的现象TCP是基于丢包的拥塞控制因此WebRTC使用了一种自适应的阈值调节算法具体如下1 自适应算法上面的公式就是GCC提出的阈值自适应算法 其中 每组数据包会触发一次探测 同时更新一次阈值 这里的意义就是距上次更新阈值时的时间间隔。是一个变化率或者叫增长率当然也有可能是负增长增长的基值是当前的延迟梯度和上一个阈值的差值---。其具体的取值如下其中ku 0.01; kd 0.00018从这个式子中可以看出 当延迟梯度减小时 阈值会以一个更慢的速率减小 延迟梯度增加时 阈值也会以一个更慢的速度增加不过相对而言 阈值的减小速度要小于增加速度。7、速率控制器速率控制器主要实现了一个状态机的变迁 并根据当前状态来计算当前的可用码率 状态机如下图所示速率控制器根据过载探测器输出的信号overuse underusenormal驱动速率控制状态机 从而估算出当前的网络速率。从上图可以看出 当网络拥塞时 会收到overuse信号状态机进入“decrease”状态 发送速率降低当网络中排队的数据包被快速释放时 会受到underuse信号状态机进入“hold”状态。 网络平稳时 收到normal信号状态机进入“increase”状态开始探测是否可以增加发送速率。在Google的paper[3]中计算带宽的公式如下其中 1.050.85。 从该式中可以看到 当需要Increase时 以前一次的估算码率乘以1.05作为当前码率 当需要Decrease时 以当前估算的接受端码率Rr(ti)乘以0.85作为当前码率Hold状态不改变码率。最后 将基于丢包的码率估计值和基于延迟的码率估计值作比较 其中最小的码率估价值将作为最终的发送码率。8、结尾以上便是WebRTC中的拥塞控制算法的主要内容 其算法也一直还在演进当中每个版本都有会有一些改进加入。其他还有一些主题这里没有覆盖到比如平滑发送 可以避免突发流量 padding包等用来探测带宽的策略。应该说WebRTC的这套机制能覆盖大部分的网络场景 但是从我们测试来看有一些特殊场景 比如抖动或者丢包比较高的情况下 其带宽利用率还是不够理想但总体来说效果还是很不错的。原文https://zhuanlan.zhihu.com/p/454893807★文末名片可以免费领取音视频开发学习资料内容包括FFmpeg webRTC rtmp hls rtsp ffplay srs以及音视频学习路线图等等。见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.sczhlp.com/news/165650/

相关文章:

  • 官方网站建设 招标公告凡科建站是不是关闭企业网站
  • 宁波品牌网站设计价格wordpress文章竖线
  • 可视网站开发工具二维码生成器app下载安卓版
  • 网站自动采集更新脑白金网络营销方式
  • 京口区建设局网站项目网站建设
  • 网站代码需要注意什么html做电子书网站
  • js做示爱网站例子seo服务方法
  • 什么是网站开发流程网站与网页之间的区别是什么
  • 东莞网站建设(信科分公司)网站报价明细
  • 昆明做烤瓷牙哪去柏德L网站哈尔滨网站托管
  • 哪里有响应式网站企业济南网站建设免费
  • 北京南站地图医院网站建设的资料
  • 网站建设的软硬件环境专业制作行驶证
  • 莱芜区政协网站网站建设网站排行
  • 网站自适应宽度怎么使用网站服务器
  • 导航滑动整屏网站手机app开发技术
  • 广州黄埔建网站成都免费网站制作
  • 成都设计网站的公司哪家好WordPress会员月卡年卡
  • 江门网站建设junke100企业网页策划案
  • 文具网站建设合同书如何提高权重
  • 山东坤泰建设集团网站厦门模板网站
  • 个人网站域名选择怎么删除网站的死链
  • 网站后台实际访问地址与注册的域名地址不同网站开发到上线 多久
  • 温州优化网站方法庐江县建设局网站
  • 网站建设程序员招聘给公司做网站要多少钱
  • 寻找南京帮助做网站的单位搭建的wordpress没显示出来
  • 网站集约化建设 技术瀑布流网站后台
  • 东莞高端网站建设哪个好内蒙古建设工程信息网
  • 公司官网用什么建站程序网站备案号 查询
  • 我国档案网站建设邯郸之战