TCP——拥塞控制 / 流量控制

38 阅读2分钟

拥塞控制:

A 向 B 传输数据包

  1. 因为太多主机使用信道资源,导致网络阻塞,使得 A 传输的数据包迟迟到不了 B
  2. A 因为没有收到 ACK ,所以再次发送
  3. 但是因为阻塞而收不到消息的,如果再次发送,非但无法解决问题,反而浪费信道资源,使网络更加阻塞因此我们需要进行拥塞控制
  4. 拥塞控制使 A 在刚开始发送数据包的时候,数量由小到大,例如先发送 1 个数据包,然后发送 2 个,依次增大
  5. 这个增大的速度,刚开始时指数增长,到达一个阈值时,再一个一个增长,直到出现超时发生,
  6. 所谓的超时也就是对每一个数据包在发送的时候进行的一个计时器,长时间收不到 ACK 则记为超时,需要再次发送
  7. 超时发生之后每次发送数据包的数量降低,降为阈值,而这个新的阈值就是超时的时候的数量的一半,例如当我们每次发送 16 个数据包的时候发生了超时,那么我们就把阈值记为 8 ,然后从 8 继续一个一个增长,直到再次发生超时

流量控制:

image.png

  1. 因为 A 的发送速率与 B 的接收速率的不同使得我们需要进行流量控制
  2. 例如上图中 B 的缓存已经满了, A 继续发送的数据包就会被 B 丢弃

image.png

  1. 控制的方法即在返回的 ACK 报文中记录还剩多少空间
  2. 至于接受窗口的大小在 TCP 协议中,是通过算法动态调整的
  3. 窗口自然不是越大越好,毕竟处理速度在那儿摆着呢