TCP 2

滑动窗口

滑动窗口 :是一种通信机制,它允许发送方在收到确认应答(ACK)之前,连续发送多个数据,而不必每发送一个数据就等待一次确认

假设窗口的大小是 30 个字节 。窗口大小 : 无需等待确认应答、可以继续发送数据的最大值


发送这 3 段数据的时候、不需要等待确认应答直接发送。收到第一个 ack 后、窗口就可以继续向后移动、继续发第 4 段数据。


如果滑动窗口发生丢包、怎么办 ?

  • 如果 ack 丢失、不需要处理

    接收方没有收到 ack = 11 、收到了 ack = 21。这就代表了 1 ~ 20 的数据已经收到了。
    ack 的确认序号后一个能包含前一个

  • 如果数据丢了

以上过程叫做快速重传

流量控制

流量控制 : 是指发送方根据接收方的接收能力,调整发送数据的速度

如果 主机1 发送数据的速度很快、主机2 处理数据的速度比较慢 & 主机2 的接收缓冲区有限。在主机 2 的接收缓冲区被占满后、无法继续接收新的数据。新的数据只能丢包。主机 1 需要根据 主机2 的接受能力来传输数据

接受方会通过窗口来告知对方自己还能接收多少数据、接收方在 TCP 报文中通告自己的接收窗口大小。发送方根据该窗口,调整自己发送的数据量

  • 接收方的接收缓冲区快满了、将窗口设置为一个更小的值传给发送方
  • 如果接收方满了就会将窗口大小设置为 0 、发送方就得停止发送同时需要定期发送⼀个窗⼝探测数据段,让接收方把窗⼝⼤⼩告诉发送方

堵塞控制

堵塞控制 : 根据通信路径的接受能力、发送方对发送的数据进行调整(堵塞控制也是对滑动窗口进行限制、依据通信路径的处理能力进行限制)

通信路径 : 数据从发送方到接收方、在网络中经过的所有网络设备和链路(路由器、光纤、无线电波…)

ssthresh :阈值

  1. 刚刚开始的时候、不知道通信路径能够承受的数据量、用一个比较慢的速度发送数据(慢开始)
  2. 在没有超过阈值的时候窗口大小指数增长;超过阈值了不再让窗口指数增长、变成线性增长
  3. 出现丢包情况 :
  • TCP Reno : 触发快速重传、窗口大小变成新的阈值的位置(丢包位置的一半)
  • TCP Tahoe : 窗口降到 1、重新慢开始

流量控制和拥塞控制都可以影响窗口大小 取哪个 ?
窗口大小是 通过比较 流量控制 和 拥塞控制 2 个窗口中较小窗口来传输数据

延迟应答

延时应答 : 接收方收到数据后、 不立即发送 ack (确认应答)在等待一段时间后确认应答。这样可以减少 ack报文 数量
降低网络开销

ack : 先等等

捎带应答

捎带应答 : 接收方本来需要发送 ack 确认报文,如果此时自己也有数据要发送,就把 ack 放在自己的数据报文中一起发送

ack : 搭便车