# TCP 与 UDP 的区别
特性 | UDP | TCP |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输(数据顺序和正确性),使用流量控制和拥塞控制 |
传输方式 | 面向报文 | 面向字节流 |
# TCP 的拥塞控制
- 慢启动(慢开始)
- 在开始发送的时候设置 cwnd = 1(cwnd 指的是拥塞窗口)
- 思路:开始的时候不要发送大量数据,而是先测试一下网络的拥塞程度,由小到大增加拥塞窗口的大小(每次乘 2)。
- 为了防止 cwnd 增长过大引起网络拥塞,设置一个慢开始门限 (ssthresh 状态变量)
- 拥塞窗口 < 慢开始门限
- 拥塞窗口 = 慢开始门限,既可使用慢开始算法,也可以使用线增积减算法
- 拥塞窗口 > 慢开始门限,使用线增积减算法
- 线增积减
- 对拥塞窗口线性增加,和当发生拥塞时对窗口积式减少
- 无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为 1
- 快速重传
TCP 发送方每发送一个分段都会启动一个超时计时器,如果没能在特定时间内接收到相应分段的确认,发送方就假设这个分段在网络上丢失了,需要重发。 - 快速恢复
当发送方连续收到三个重复确认时,慢启动阈值设为之前拥塞窗口值的一半,和作为新的拥塞窗口值,并跳过慢启动阶段,直接进入拥塞控制阶段。
# 参考
- wiki