TCP和UDP基础知识
TCP拥塞控制算法
名词解释
cwnd:拥塞控制窗口。以包为单位
mss:最大分段大小
rwnd:接收窗口
swnd:发送窗口
\[swnd=min(rwnd,cwnd*mss)
\]
慢启动
不同拥塞算法慢启动的逻辑有所不同,经典的 NewReno 慢启动的算法如下:
- 连接建好的开始先初始化 cwnd = 10,表明可以传 10 个 MSS 大小的数据。
- 每当收到一个 ACK,cwnd 加 1。这样每当过了一个 RTT,cwnd 翻倍,呈指数上升。
- 还有一个 ssthresh(慢启动门限),是一个上限。当 cwnd >=ssthresh 时,就会进入“拥塞避免算法”。
拥塞避免
当 cwnd 增长到 sshthresh 时,就会进入“拥塞避免算法”。拥塞避免算法下 cwnd 成线性增长,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍。这样就可以避免拥塞窗口快速增长的问题。
快速重传
见重传机制
快速恢复
当检测到丢包时,TCP 会触发快速重传并进入降窗状态。该状态下 cwnd 会通过快速恢复算法降至一个合理值。
- 当收到 3 次重复 ACK时,ssthresh 设为 cwnd/2,cwnd = cwnd / 2 + 3;
- 每收到一个重复 ACK,窗口值加 1;
- 收到非重复 ACK,窗口设为 ssthresh,退出
TCP重传机制
超时重传
字面意思,如果长时间没有收到确认报文就重传
快速重传
当服务器连续收到3次过时的确认报文,就认为中间报文丢失,重传报文。
TCP网络编程
参考资料
更详细的内容可以参考