1.概念:
首先,说到拥塞控制,很多人就会和流量控制的概念混淆,所以我简单讲下两个机制的概念;
流量控制:流量控制是为了控制发送方发送速率,保证接收方来得及接收。(接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。)
拥塞控制:拥塞控制是作用于网络的,防止过多的数据注入到网络中,避免网络负载过大(拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。)。
2.TCP拥塞控制:
2.1 TCP拥塞控制原理:
TCP为运行在不同主机上的两个进程之间提供了可靠数据传输服务。
TCP的另一个关键部分就是其拥塞控制机制。
TCP必须使用端到端拥塞控制而不是网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈。
TCP所采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。?如果一个TCP发送方感知从它到目的地之间的路径上没什么拥塞,则TCP发送方增加其发送速率;如果发送方感知沿着该路径有拥塞,则发送方就会降低其发送速率。
2.1 TCP拥塞控制算法:
提到拥塞控制的解决方案,就离不开四个算法:(慢开始、拥塞避免、快重传、快恢复),先浅偷一张图描述一下拥塞避免的解决过程:
?
1.慢开始
当一条TCP连接开始时, cwnd 的值通常初始置为一个 MSS 的较小值,这就使得初始发送速率大约为 MSS/RTT。
由于对TCP发送方而言,可用带宽可能比 MSS/RTT 大得多,TCP发送方希望迅速找到可用带宽的数量。
因此,在慢启动(slow-start)状态,cwnd的值以 1 个 MSS 开始并且每当传输的报文段首次被确认就增加 1 个 MSS。
TCP向网络发送第一个报文段并等待一个确认。当该确认到达时,TCP发送方将拥塞窗口增加一个 MSS,并发送出两个最大长度的报文段。这两个报文段被确认,则发送方对每个确认报文段将拥塞窗口增加一个 MSS,使得拥塞窗口变为 4 个MSS,并这样下去。这一过程每过一个 RR,发送速率就翻番。因此,TCP发送速率起始慢,但在慢启动阶段以指数增长。
2.拥塞避免
设置一个慢开始门限?ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1,降低拥塞窗口的增长速度。如果出现了超时,则令 ssthresh = cwnd / 2 ,然后开始执行快恢复。
3.快重传
当发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
4.快恢复
当发送端收到连续三个重复的确认时,就会把慢开始门限 ssthresh 减半。
由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1 。而是将cwnd 当前值减半作为新的慢开始门限 ssthresh 值,并让cwnd 的值等于这个新的慢开始门限ssthresh 值。随后开始执行加法增大,使拥塞窗口缓慢地线性增大。?
|