TCP和UDP基础知识

TCP拥塞控制算法

名词解释

cwnd:拥塞控制窗口。以包为单位
mss:最大分段大小
rwnd:接收窗口
swnd:发送窗口

\[swnd=min(rwnd,cwnd*mss) \]

慢启动

不同拥塞算法慢启动的逻辑有所不同,经典的 NewReno 慢启动的算法如下:

  1. 连接建好的开始先初始化 cwnd = 10,表明可以传 10 个 MSS 大小的数据。
  2. 每当收到一个 ACK,cwnd 加 1。这样每当过了一个 RTT,cwnd 翻倍,呈指数上升。
  3. 还有一个 ssthresh(慢启动门限),是一个上限。当 cwnd >=ssthresh 时,就会进入“拥塞避免算法”。

拥塞避免

当 cwnd 增长到 sshthresh 时,就会进入“拥塞避免算法”。拥塞避免算法下 cwnd 成线性增长,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍。这样就可以避免拥塞窗口快速增长的问题。

快速重传

见重传机制

快速恢复

当检测到丢包时,TCP 会触发快速重传并进入降窗状态。该状态下 cwnd 会通过快速恢复算法降至一个合理值。

  1. 当收到 3 次重复 ACK时,ssthresh 设为 cwnd/2,cwnd = cwnd / 2 + 3;
  2. 每收到一个重复 ACK,窗口值加 1;
  3. 收到非重复 ACK,窗口设为 ssthresh,退出

TCP重传机制

超时重传

字面意思,如果长时间没有收到确认报文就重传

快速重传

当服务器连续收到3次过时的确认报文,就认为中间报文丢失,重传报文。

TCP网络编程

参考资料

更详细的内容可以参考

  1. 万字详文:TCP 拥塞控制详解
  2. TCP网络编程流程
posted @ 2023-09-11 22:55  日月久照  阅读(20)  评论(0编辑  收藏  举报