夜光:计算机网络笔记(二十二)

夜光序言:

 

我从来不认为天才有多么了不起,最了不起的是那些对自己最狠的人。

 

 

 

 

正文:

 

TCP 拥塞控制

 

TCP 必须使用端到端拥塞控制而不是网络辅助的拥塞控制,因为 lP 层不向端系统提供显式的网络拥塞反馈。拥塞控制的过程是源主机不断试探网络传输能力的过程,它使用的算法也适用于很多其他控制过程。

 

TCP 采用的方法是让发送方根据所感知到的网络拥塞,来限制其向一个 TCP 连接发送数据的速率。如果一个 TCP 发送方没有感知到拥塞,它就会增加其发送速率;如果感知到拥塞,则降低其发送速率。

 

在大多数操作系统中使用 TCP Reno 拥塞控制算法。

TCP 连接的每一端都由一个接收缓存、一个发送缓存和几个控制变量组成。

TCP 拥塞控制机制使用一个控制变量,即拥塞窗口(congestion window)来表征网络的拥塞情况。拥塞窗口表示为 CongWin,它对一个发送方能发送的速率进行了限制。发送方这边通过限制未被确认的数据量,不超过 CongWin 与 RcvWin 中的最小值,来限制发送速率。

发送窗口=min{CongWin, RcvWin} 

 


 

因为 TCP 报文段的编号使用字节流顺序,拥塞窗口自然也就使用字节为单位。

 

在每一个往返时延(RTT)的起始点,上面的限制条件允许发送方发送 CongWin 个字节的数据,在该 RTT 结束时发送方接收到确认报文。因此,这时的发送速率大概是 CongWin 字节/秒。通过调节 CongWin 的值,发送方就能调整它向连接中发送数据的速率。


TCP 发送方通过“丢包事件”感知在它与目的地之间的路径上出现的拥塞。 


TCP 发送方的“丢包事件”定义为:要么出现超时,要么收到来自接收方的 3 个冗余 ACK。

 

当出现拥塞时,这条路径上的某台路由器的缓存会溢出,导致数据报丢弃。丢弃的数据报接着会引起发送方的丢失事件(要么超时要么收到 3 个冗余 ACK),发送方就认为在路径上出现了拥塞。

 


 

在没有出现丢包事件的情况下,TCP 的发送方将收到先前未确认报文段的确认.

TCP 将这些确认的到达作为一切正常的标志,并增加拥塞窗口的大小(及其传输速率)。

 

TCP 发送方在感知到拥塞时,为调节其发送速率采用了某种算法。这个算法就是拥塞控制算法,TCP 拥塞算法包括三个主要部分;

①加性增、乘性减,

②慢启动,

③对超时事件的反应。

 

算法对 CongWin 控制变量的调整是以 MSS(Maximum Segment Size,最大报文段长度)字节为单位进行的。 

1 加性增、乘性减


拥塞控制的基本思想是,当出现丢包事件时,让发送方降低其发送速率(通过减小拥塞窗口的大小)。因为通过该相同拥塞路由器的其他 TCP 连接也很可能出现丢包事件,所以它们也可能会通过减小其拥塞窗口值来降低其发送速率。整体作用结果是所有通过这一拥塞路由器的发送源来降低它们的速率,从而减轻了路由器的拥塞程度。

 

TCP 采用了一种 “乘性减”的方法,即每发生一次丢包事件就将当前的拥塞窗口值减半。CongWin 值的会减小,但是不会降到低于 1 个 MSS。

 

没有拥塞时,TCP 缓慢地增加其拥塞窗口的大小。

即每次它收到一个确认后就把 CongWin 增大一点,其目标是在每个往返时延内 Congwin

增加一个 MSS(在拥塞避免阶段这样工作)。无论何时一个新的确认到达,将它的 Congwin 增加一个 MSS 大小的字节数。


 

总之,当 TCP 发送方感受没拥塞时就加性地增加其发送速率,当觉察到拥塞时(通过丢包事件)就乘性地减小其发送速率。所以这个算法常常被称为加性增、乘性减算法。

 

TCP 拥塞控制协议的线性增长阶段被称为避免拥塞。Congwin 值重复地经历一种升降循环,即重复地线性增长,然后又突然降至其当前值的一半(当发生丢包事件时),这使得 TCP连接的 CongWin 变化呈锯齿形状。


 

2.慢启动


当一个 TCP 连接开始时,CongWin 的值初始置为 1 个 MSS,这就使得初始发送速率大约为 MSS/RTT。

 

TCP 发送方在初始阶段不是线性地增加其发送速率,在慢启动阶段,每当一个传输的报文段被确认后,CongWin 的值就增加 1 个 MSS,由于 TCP 一次发送多个报文段进入网络,从而使发送方的发送速率在经过一个 RTT 时间后成倍增长。TCP 发送方以指数速度增加其发送速率,直到发生一个丢包事件为止,此时 CongWin 将被降为一半,然后就会像上面所讲的那样线性地增长。

 

因此,在这个慢启动的初始化阶段期间,TCP 发送方以慢速率(因此叫慢启动〕发送,但是以指数增加的速度快速增加其发送速率。
 

 



3.对超时事件作出反应

 


即对因超时而检测到的丢包事件做出的反应与对因收到 3 个冗余 ACK 而检测到的丢包事件做当的反应是不同的。

 

收到 3 个冗余 ACK 后,TCP 将拥塞窗口减小一半,然后线性地增长。 

 

但是超时事件发生时,TCP 发送方进入一个慢启动阶段,即它将拥塞窗口设置为 1MSS,

然后窗口长度以指数速度增长。拥塞窗口持续以指数速率增长,直到 CongWin 达到超时事件前窗口值的一半为止。此后,CongWin 以线性速率增长,就像收到 3 个冗余 ACK 一样。

 


TCP 通过维持一个称为阈值(Threshold)的变量来确定慢启动将结束并且拥塞避免将开始的窗口长度。变量 Threshold 初始化时被设置为一个很大的值。每当发生一个丢包事件时,

 

Threshold 值就会被设置为当前 CongWin 值的一半。

 

TCF 发送方在一个超时事件发生后就进入慢启动阶段。在慢启动阶段中,CongWin 值以指数速率快速增长,直至 CongWin 达到 Threshold 为止。当 CongWin 达到 Threshold 时,TCP就进入拥塞避免阶段,在该阶段中,CongWin 如前所述线性地增长。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值