流量控制
TCP 利用滑动窗口实现流量控制,流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
拥塞控制
在某段时间,若对网络中某⼀资源的需求超过了该资源所能提供的可⽤部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注⼊到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有⼀个前提,就是网络能够承受现有的网络负荷。
为了进行拥塞控制,TCP 发送方要维持⼀个拥塞窗⼝(cwnd)的状态变量。拥塞控制窗⼝的大小取决于⽹络的拥塞程度,并且动态变化。发送方让自己的发送窗⼝取为拥塞窗⼝和接收方的接受窗口中最小的⼀个。TCP的拥塞控制采⽤了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。
慢开始:
慢开始算法的思路是当主机开始发送数据时,如果立即把⼤量数据字节注⼊到⽹络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,更好的方法是先探测⼀下,即由小到大逐渐增⼤发送窗口,也就是由小到⼤逐渐增⼤拥塞窗⼝数值。
cwnd初始值为1,每经过⼀个传播轮次,cwnd加倍。
拥塞避免:
拥塞避免算法的思路是让拥塞窗⼝cwnd缓慢增⼤,即每经过⼀个往返时间RTT就把发送放的cwnd加1.
快重传与快恢复:
在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是⼀种拥塞控制算
法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到⼀个不按顺序的数据段,它会⽴即给发送机发送⼀个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。
有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地⼯作。当有多个数据信息包在某⼀段很短的时间内丢失时,它则不能很有效地⼯作。
流量控制和拥塞控制的差别:
拥塞控制是⼀个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。