我是靠谱客的博主 跳跃金针菇,最近开发中收集的这篇文章主要介绍36、拥塞控制(传输层),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引言

  • 如果机器上的传输实体以太快的速度发送太多的数据包,就会使得网络变得拥塞,从而导致网络性能的严重下降。避免这个问题是网络层和传输层的共同责任。拥塞发生在路由器上,因此在网络层检测拥塞。然而,拥塞终究还是要传输层注入到网络的流量引起,因此控制拥塞的唯一途径是传输层放缓往网络中发送数据包的速度。
  • 本节将学习传输层的拥塞控制机制,然后将描述主机如何调节它们发往网络的数据包速率。Internet的拥塞控制严重依赖于传输层,特殊的算法被嵌入到TCP和其他协议中。

1、理想的带宽分配

  • 拥塞控制算法的目标是更易于避免拥塞,即为使用网络的传输层找到一种好的带宽划分方法。
1.1、效率和功率

-为整个传输实体有效分配带宽应该利用所有可用的网络容量。然而,假设存在一条100Mbps的链路,5个传输实体共同使用这条链路,每个传输实体获得20Mbps,如果想要获得更好的性能,它们获得的带宽应该小于20Mbps。其中的原因在于流量通常呈现突发性。在前面章节我们描述过实际吞吐量(或到达接收端的有用数据包速率)是提交负载的函数。图中给出了这条曲线以及延迟曲线,与正常输出一样,延迟也是提交负载的函数。在这里插入图片描述

  • 在图a中,随着负载的增加实际吞吐量最初以相同的速度增加,但随着负载接近网络容量,实际吞吐量的上升逐渐增多。由于突发流量可能导致网络内缓冲区偶尔被充满并造成一些数据包丢失,因而出现实际吞吐量的衰减。如果传输协议设计不恰当,重传的数据包依然会被延迟但并未丢弃,此时网络内的数据包越积越多最终拥塞崩溃。在这种状态下,发送端拼命发送数据包,但完成的有益工作只有一点点。
  • 图b中给出了响应的延迟变化情况。最初的延迟是固定的,表示穿过整个网络的传播延迟。随着负载接近网络容量,延迟逐步上升。这也是因为突发流量在高负荷下被堆积起来的缘故。数据包在经历了大量的缓冲延迟后被路由器丢弃。
  • 对于实际吞吐量和延迟,在拥塞出现时性能开始下降。如果我们逐步加大分配的带宽(这里应该指发送数据的速度),将从网络获取最佳的性能,直到延迟迅速攀升的那点。而这一点恰好低于网络容量,为了标识它,Kleinrock提出了功率的度量,其中:功率=负载/延迟。功率最初将随着提交负载的上升而上升,延迟仍然很小并且基本保持不变;随着延迟快速增长功率将到达最大(也就是说开始时,负载的斜率是大于延迟的斜率的,斜率即使增长速度,寒注),然后开始下降。达到最大功率的负载表示了传输实体放置在网络上的有效负载。
1.2、最大-最小公平性
  • 均等给每个传输实体划分带宽值得商榷。首先,网络无法为每个流或者链接执行严格的带宽预留。如果网络支持服务质量,那么它们将为某些流预留带宽,但是许多连接将寻求可用的任何带宽,或者被网络合并在一起共同分配带宽。例如IETF的区分服务就将流量分成两类,每个类中的连接竞争带宽的使用。IP路由器通常让所有的连接竞争相同的带宽。在这种情况下,拥塞控制机制为每个竞争的各个连接分配带宽。
  • 其次关于公平性。如果N个流使用一条链路,在这种情况下,它们都应该有1/N的带宽(由于流量通常呈现突发性,效率决定了它们能使用的要略微少一些)。但是一个流可能穿过三条链路,其他流可能跨越一条链路。走三条链路的流将消耗更多的资源,给它分配的带宽少于只走一条链路的流获得的带宽可能在某种意义上更公平。
  • 不过我们采取的公平概念不依赖于网络路径的长度。公平的形式是最大-最小公平,通常表示理想的网络使用情况。最大-最小公平分配指的是,如果分配给一个流的带宽在不减少分配给另一个流带宽的前提下无法得到进一步增长,那么将不给这个流更多的带宽(这不就是经济学中的帕累托最优吗!!)。
  • 图中显示了最大最小公平分配方法,在这个网络中存在4个流,分别标识为A、B、C、D。路由器之间的每条链路具有相同的容量,用1个单位表示,虽然在一般情况下链路的容量是不相同的。3个竞争流左下角位于路由器R4和R5之间的链路。因此,这些流中的每一个都得到1/3的链路容量。其余的流,A与B竞争从路由器R2到R3的链路。由于B已经分配得到1/3,A得到剩余的2/3的容量。如果把路由器R2和R3之间的带宽给B分配得多一些,那必定要降低流A 的容量,这对于拥有更多带宽的A来说是合理的,然而流C或D的容量必须减少才能给流B更多的带宽,这些流的带宽将小于B。因此这种分配方法是最大-最小公平的。在这里插入图片描述
  • 只要获取网络的全局信息就可以计算出最大-最小分配。一种直观的思考是想象所有的流从速率0开始,然后缓慢地增加速率。当任何一个流的速率遇到瓶颈,就停止该流的速率增加;所有其他流继续增加各自的速率,平等共享可用的容量,直到它们也到达各自的瓶颈。
  • 最后要考虑在什么程度上考虑公平性。一个网络的公平性可以体现在连接上、每一对主机之间的所有连接上,或者每个主机的所有连接上。在前述的加权公平队列时,得出过这样的结论:每种定义方法都存在着自己的问题。例如,针对每个主机定义公平性,难道是想要繁忙游戏服务器获得的带宽与你的安卓手机等同吗?然而,对每个连接定义公平性,实际上又鼓励主机打开更多的连接效果。鉴于没有明确的答案,经常把公平性视为针对每个连接,确切的公平不予考虑。(小寒觉得这种情况只存在于非商业性质的环境,或者商业环境中公平付费服务的情况。你难道指望ISP把你打开的100个浏览器窗口连接都分配相同的带宽吗?ISP会没钱的)。实际上,连接得不到带宽远比所有的连接得到精确的相同数量的带宽要重要得多。事实上,有可能用TCP打开多个连接,并且更积极参与竞争带宽,这种战术通常用于那些需要高带宽的应用,比如对等文件共享系统BitTorrent。
1.3、收敛
  • 最后一个标准是拥塞控制算法能否快速收敛到公平而有效的带宽分配上。以上讨论假设了一个静态的网络环境,然后,网络中的连接总是来来去去,而且一个特定连接也会随着时间变化,例如一个用户浏览网页会偶尔下载大的视频。由于需求的变化,网络的理想操作点也随着时间改变。良好的拥塞控制算法应该迅速收敛到理想的操作点并跟踪。
  • 图中给出了一个例子,它能跟随时间变化快速收敛。最初流1拥有全部带宽,一秒钟后流2启动,带宽分配算法迅速改变分配,给每个流总带宽一半的份额。第4秒第三个流加入,它只需要20%的带宽,流1和2迅速调整到40%。在第9秒,第二个流离开,但三个流保持不变,所以第一个流获得80%的带宽。在这里插入图片描述

2、调整发送速率

  • 我们需要调整发送速率以便获得一个理想的带宽分配。发送速率可能受两个方面因素的限制。首先是流量控制,在接收端没有足够缓冲区的情况下,必须进行流量控制。第二个因素是拥塞控制,在网络容量不足的情况下必须进行流量控制。图a中,一根粗粗的管道连接到一个小容量的接收器,这是流量控制限制的情况。在图b中,限制因素不是桶的容量,而是管道的承载能力,如果水太多,它就会回流。在这里插入图片描述
  • 类似的情况可能会出现在发送端,由于传输速度过快导致数据包丢失。我们已经讨论过采用一个可变大小窗口的流量控制方案。现在我们考虑拥塞控制解决方案。由于上述问题都可能发生,传输协议一般需要同时运行流量与拥塞控制方案。传输协议调节发送速率的方式依赖于网络返回的反馈形式。不同的网络层可能返回不同类型的反馈。反馈可能是显式的,也可能是隐式的;而且反馈信息可能不精确。
  • 一个显式并精确的设计例子是路由器告诉数据包的源端,它们能以多大的速率发送数据包。在文献中,显式拥塞协议(XCP)就是以这种方式工作的。另一个显式但不精确的设计例子是使用TCP的显式拥塞通知(ECN)。在这个设计方案中,路由器在经历拥塞的数据包中警告发送端放慢速率,但不告诉源端减少多少。在其他设计方案中,没有明确的信号。FAST TCP测量端到端往返时延,并用该指标作为避免拥塞的信号。在今天的Internet上最流行的拥塞控制形式是带有尾丢包的TCP或RED路由器,数据包的丢失要通过推断得出,并且丢包被当做网络是否变得拥挤的信号。这种形式的TCP有许多变种,包括Linux系统下采用的CUBIC TCP。组合信号也有可能,如Windows的Compound TCP同时使用了丢包和延迟作为拥塞的反馈信号。表中给出了这些设计思想的概括。
协议信号显式精确
XCP使用速率
TCP with ECN拥塞警告
FAST TCP端到端延迟
Compound TCP数据包丢失&端到端延迟
CUBIC TCP数据包丢失
TCP数据包丢失
  • 如果给出一个显式和精确的信号,那么传输实体就可以利用该信号来调整发送速率到新的操作点。例如,XCP告诉发送端使用多大的发送速率,那么发送端只需要简单地采用该速率来发送数据包。然而,在其他情况下,设计一些猜测工作。在没有拥塞信号的情况下,发送端应该增加速率;但给出拥塞信号使,发送端降低速率。增加或减少速率的方式由控制法则决定,这些法则对性能有重大影响。
  • Chiu和Jain研究了二进制拥塞反馈的情况,他们得出的结论是假发递增乘法递减(AIMD)法则是达到有效和公平操作点的适当流量规则。他们构建了一个简单的示例图形,图中有两个流竞争单条链路的带宽。图中,分配给用户1的带宽用x轴表示,分配给用户2的带宽用y轴表示。当分配满足公平性时,两个用户将获得相同数量的带宽。这在图中用一条虚的公平线表示。当带宽总和为100%时,即达到链路容量时分配是有效的,图中仍用一条虚线表示,当两个用户分配的带宽综合超过这条线,网络就给两个用户发送一个拥塞信号。线的交点是理想操作点,此时两个用户具有相同的带宽,并且所有的网络带宽都被用上。在这里插入图片描述
  • 如果用户1和用户2随着时间按加法递增法则增加各自的带宽,例如两个用户以每秒增加1Mbps的速度增加各自的发送速率。最终,操作点穿过效率线,两个用户都收到一个从网络传过来的拥塞信号。然而,当他们以加法递减方法减少带宽时,只会沿着递增线震荡,如图。同样的,如果按乘法法则递增或递减10%的发送速率,也会在乘法线震荡。乘法的和加法的斜率不同(它指向原点,加法线呈现45°),在这两种情况下,它们都难以收敛到同时兼顾公平与效率的最佳发送速率。(注意,图中黑圆点是起点。加法与乘法的斜率的不变的,因为它们的递增或递减速度是相同的。之所以加法为45°,例如,y=x+25,x与y都是加上固定数字,表达式是不变的,x系数是1自然是45°;乘法指向原点是因为,同时以100%的速度递减,那么x与y的带宽都是0了,它们总是在原点聚合。寒注)
  • 当用户加法递减增他们的带宽,然后在收到拥塞信号时乘法递减,这种法则就是AIMD控制法则,如下图。这种法则可以兼顾公平与效率。在这里插入图片描述
  • AIMD是TCP采用的拥塞控制法则,它基于这个观点和另一个稳定性观点(即驱使网络拥堵非常容易而从中恢复却很难,所以递增应轻柔,递减应积极)。但这个法则不是那么公平,因为TCP连接根据每次的往返时间测量来调整窗口的大小,而不同的连接有不同的返回时间。这导致在所有其他条件都相同的情况下,接近主机的连接比远离主机的连接获得的带宽更多。(时间维度是很重要的,就像你不可能一直等待一个等不到的人,这一点其实是公平也有效率的。寒注)TCP实际上使用的策略并不是直接调整发送速率,而是调整滑动窗口的大小。如果窗口大小是W,往返时间是RTT,则等价的发送速率是W/RTT。这种策略很容易和流量控制机制结合起来,因为流量控制机制已经使用了一个窗口。同时这种策略还有个优点,发送端可以通过确认来测定数据包的速度,而且如果它停止接收数据包离开网络的报告那么还可以放缓RTT。(停止接收确认包吗?)
  • 最后一个问题是关于多协议的竞争。网络中可能存在许多不同的传输协议,都往网络发送流量。为了避免拥塞,不同的协议采用了不同的控制法则,如果这些不同的协议竞争时会发生什么?那就是带宽分配不平等。由于TCP是Internet拥塞控制的主要形式,因此设计新的传输协议必须与TCP进行公平竞争。在TCP友好的拥塞控制概念中,TCP与非TCP传输协议可以自由混合,而没有影响。

3、无线问题

  • 诸如TCP这样的传输协议实现拥塞控制应该独立于下面的网络层和链路层技术。理论上这是好的,但在实际的无线网络中却存在问题。主要问题是在于通常的传输协议一般把丢包视作拥塞发生的信号,包括TCP。而在无线网络中,丢包几乎都是由传输错误引起的。
  • 采用AIMD控制法则,较高的吞吐量要求非常小的数据包丢失。Padhye分析表明吞吐量作为丢包率的逆平方根上升。然而无线网络,比如802.11局域网,至少10%的帧丢失率是很常见的情况。这种差异意味着如果没有保护测量的措施,把丢包率作为一个信号的拥塞控制方案将运行在无线链路上的连接压制到非常低的速率,这显然是没有必要的。
  • 为了在无线网络中也能正常工作,拥塞控制算法观察到的丢包只能是那些因带宽不足造成的丢包,而不能把由于传输错误造成的丢包也算在内。一种解决方案是通过使用无线链路上的重传机制把无线链路的丢包掩盖起来。例如,802.11使用等停式协议来传递每个帧,在向上层报告丢包之前,如果需要会多次重传。在正常情况下,每个数据包的交付对高层是透明的。
  • 图中显示了一条由有线和无线链路组成的路径,传输层采用了屏蔽策略。有两个方面需要注意。首先,发送端并不一定要知道该路径包括一条无线链路,因为它所能看见的只是与它连接的有线链路。Internet上的路径是异构的,而且不存在一种通用的方法用告知发送端路径由什么链路组成。这样的现状加深了拥塞控制问题的复杂性,因为没有简单的方法使得无线链路采用一个协议而有线协议采用另一个协议。在这里插入图片描述
  • 第二个方面是一个迷。该图显示了由丢失驱动的两个机制:链路层的帧重传和传输层的拥塞控制。让人困惑的是这两种机制如何并存而不会混淆。毕竟丢失应该只引起一个机制采取行动,因为它要么是一次传输错误,要么是一个拥塞信号。如果两种机制都采取行动(重传帧并且减慢发送速率),那么我们由回到了原先的传输问题,即在无线链路上的运行过于缓慢。
  • 解决的办法是这两种机制作用在不同的时间尺度(从文章看,这里无线和有线链路采用统一的协议,寒注)。对于诸如802.11的无线链路,链路层的重传发生在微秒到毫秒级;而传输层的丢失计时器发生在毫秒到秒。区别就在于这三个时间尺度。这样的话,在传输层推测出丢包之前,无线链路已经检测出丢帧并重传帧,由此修复了传输错误。
  • 屏蔽策略足以让大多数传输协议在大多数无线链路上运行良好。但是这并不总是一个合理的解决方案。某些无线链路的往返时间很长,比如卫星。对于这些链路必须使用其他技术来掩盖丢包事实,比如前向纠错(FEC),或者传输协议在拥塞控制时必须使用一种非丢失信号。
  • 与无线链路上的拥塞控制有关的第二个问题是链路的容量可变。也就是说随着时间的推移无线链路的容量是会发生变化的,而且因为节点的移动或者信道条件的变化而引起的信噪比的变化,链路容量的变化有时候会非常突然。这点与有线链路有非常大的不同,有线链路的容量是固定不变的。传输协议必须适应无线链路容量的变化,否则将阻塞网络,或者无法使用可用的链路容量。这个问题的一个可能解决办法是不解决,也就是说不必担心。这种策略其实是可行的,因为拥塞控制算法早就应该能处理新用户进入网络或现有用户改变发送速率等这些情况。即使有线链路的容量是固定的,其他用户不断变化的行为本身也会对给定用户的可用带宽带来变化。因此在一条具有802.11无线链路上简单地运行TCP有可能获得合理的性能。然而,当存在太多的无线变化时,继续使用专为有线链路设计的传输协议可能会有麻烦,并且由此带来的性能比较差。在这种情况下,唯一的解决方法就是专门设计一个针对无线链路的传输协议。一个特别具有挑战性的环境是无线网状网。在这样的网络中,多个相互干扰的无线链路彼此交错,路由因移动性而不断变化,并且存在大量丢包。这方面的研究工作正在研究中。

最后

以上就是跳跃金针菇为你收集整理的36、拥塞控制(传输层)的全部内容,希望文章能够帮你解决36、拥塞控制(传输层)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部