小议TCP的拥塞控制技术探讨

时间:2022-07-01 07:03:00

导语:小议TCP的拥塞控制技术探讨一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

小议TCP的拥塞控制技术探讨

摘要:tcp协议在控制数据流拥塞机制方面有一些不足,本文通过探讨网络拥塞出现的原因及TCP拥塞控制的基本策略,论述了TCP拥塞控制的改进方案,并提出了针对这种缺陷的改进方向。

关键词:TCP拥塞控制重传重传超时

中图分类号:文献标识码:文章编号:

TCP是Internet上通用的传输层协议之一,是目前应用最广泛的传输控制协议,其核心是拥塞控制机制。INTERNET采用交换机作为不同网络之间传送信息的中介,以次来达到整个网络资源的共享。这样的方式便于在网络中查找某个特定的主机,但随着主机数量的增多和数据传输量的增大,就容易产生资源竞争,如果不及时处理,这样的竞争就会导致网络拥塞。TCP协议的一个组成部分就是为了解决这样的拥塞问题,并提供了一个算法来最大限度地利用网络带宽。传统的TCP中的拥塞控制机制主要是基于VanJacobson提出的“慢启动”算法,“拥塞避免”算法和一个用于估计周转RTT(roundtriptime)的算法。

“慢启动”算法的核心思想就是:通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestionwindow),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的ACK时,拥塞窗口就增加为4,这是一种指数增加的关系。在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。

“拥塞避免”算法是一种处理丢失分组的方法。该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:发生超时和接收到重复的确认。但是当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来作到这一点。在实际中这两个算法通常在一起实现。

慢启动(slowstart)算法通过逐渐增加cwnd的大小来探测可用的网络容量,防止连接开始时采用不合适的发送量导致网络拥塞。然而有时该算法也会浪费可用的网络容量,因为慢启动算法总是从cwnd=l开始,每收到一个ACK,cwnd增加l,对RTT时间长的网络,为使cwnd达到一个合适的值,需要花很长的时间,特别是网络实际容量很大时,会造成浪费。为此可采用大的初始窗口,大的初始窗口避免了延迟ACK机制下单个报文段初始窗口的等待超时问题,缩短了小TCP流的传输时间和大延迟链路上的慢启动时间。

在慢启动阶段,在每个RTT时间内,cwnd增加一倍,这样当cwnd增加到一定的值时,就可能导致以网络能够处理的最大容量的2倍来发送数据,从而淹没网络。Hoe建议使用packet-pair算法和测量RTT来为ssthresh估计合适值,以此来适时地结束慢启动阶段。但是由于受各方面干扰,估算合理的ssthresh值并不容易,因此这个方法的效果是有限的。而Smooth-start较为平滑地从慢启动过渡到拥塞避免阶段,减少了报文段丢失和突发通讯量,提高了TCP拥塞控制的性能。

为了避免不必要的重传超时,有人提出了一种受限传输机制:如果接收方的广播窗口允许的话,发送方接收到一个或者两个重复的ACK(acknowledgment)后,继续传输新的数据报文段。受限的传输机制允许具有较小窗口的TCP连接进行错误恢复,而且避免了不必要的重传。

如果TCP的发送方在重传数据报文段一个RTT后发现接收方接收到了重传数据报文段的两个拷贝,则可以推断重传是不必要的。这时,TCP的发送方可以撤销对拥塞窗口的减少。发送方可以通过将慢启动门限增加到原始值,调用慢启动规程使拥塞窗口恢复原先值。除了恢复拥塞窗口,TCP发送方还可以调整重复确认门限或者重传超时参数来避免由于多次不必要的重传而浪费带宽。

对公平性的改进:在拥塞避免阶段,如果没有发生丢包事件,则TCP发送方的cwnd在每个RTT时间内大约可以增加一个报文段大小,但这样会造成具有不同RTT时间或窗口尺寸的多个连接在瓶颈处对带宽竞争的不公平性,RTT时间或窗口小的连接,相应的cwnd增长速度也相对缓慢,所以只能得到很小一部分带宽。

对此,可以考虑从一下几个方面去加以改进:

1、如果使用了路由器,可以使用公平队列和TCP友好缓存管理来进行控制以增加公平性。

2、如没有使用路由器,就要求TCP发送端的拥塞控制进行改变,在拥塞避免阶段是共享同一资源的TCP连接以相同速度发送数据。

3、可以考虑引入发送优先级的概念,拒绝大范围的同时发送同一共享资源,而是按照优先级有先后次序的逐个发送,优先级的使用可以仿造进程优先级的管理方式,动态变化,实时调整以加强有效利用率。