流量控制:tcp使用滑动窗口实现流量控制。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
流量控制分为正常情况下的滑动流量控制机制和存在数据丢失情况下的流量控制
接收方发送的确认报文中的窗口字段为0,发送端只好等待对方发来一个“窗口大小”字段值不为 0 的数据段,这时恰好发生数据丢失。
TCP 中引入了一个称为“持续计时器”(persistence timer)的定时器。在 TCP 连接的一段收到对端的一个“窗口大小”字段值为 0 时,启动该定时器。在这个定时器到期后,收到这个“窗口大小”字段值为 0 的数据段一端会向对端发送一个非常小的探测数据段(一般仅携带 1 字节的数据),这时,对端在收到这个探测数据段后会返回一个确认数据段。如果在确认数据段中的“窗口大小”仍为 0,则发送端重启上面的“持续计时器”,否则结合确认数据段中的“窗口大小”字段值和当前可用“发送窗口”大小,发送相应字节的数据,打破了以上这种双方持续等待的局面。
拥塞控制:tcp使用拥塞窗口实现拥塞控制。拥塞窗口是一个cwnd的状态变量,动态变化的。
TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。
慢开始:cwnd初始值为一,指数增张。
拥塞避免:线性增张。
拥塞的标志
1.重传计时器超时(网络发生阻塞)
2.接收到三个重复确认(数据包丢失)
当发生重传计数器超时,说明网络阻塞,就把阈值ssthresh设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,重新执行慢开始算法。
当发生接收到三个重复确认,说明数据包丢失,于是执行快恢复算法,就把阈值减半,然后将拥塞窗口设置为阈值的大小,并执行拥塞避免算法。