可靠性保障
- 数据分块,序列号,ACK:TCP 把数据分成合适的数据块传输;每一个数据包都有唯一的序列号,根据序列号来排序保证顺序性,同时进行数据包的去重,ACK 保证数据接收。
- 校验和:对首部和数据进行校验和,防止数据被纂改。
- 超时重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ACK)。TCP 重传机制主要有:基于计时器的重传(也就是超时重传)、快速重传(基于接收端的反馈信息来引发重传)、SACK(在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了)、D-SACK(重复 SACK,在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了)。
- 流量控制:通过维护发送窗口和接收窗口来维持发送方与接收方的平衡。接收方会返回当前可用大小,发送方根据这个调整自己的发送窗口,避免数据过载。是端到端的控制。
- 拥塞控制:维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。拥塞窗口的控制算法有慢启动、拥塞避免、快速重传和恢复,通过这些算法动态调整拥塞窗口的大小。
超时重传
发送方在一定时间内没有收到 ACK,就会重新发送。重传时间(RTO)由网络往返时间(RTT)动态计算得出,避免太快或太慢。
重传机制:
- 定时器重传;
- 快速重传:会返回需要重传的数据包的序列号,但是无法知道需要重传哪些;
- SACK:在快速重传的基础上额外返回了已经接收到的序列号的区间(字段:Left Edge,Right Edge);
- D-SACK:在 SACK 的基础上,额外告知了有哪些重复的数据包。
流量控制
通过维护发送窗口和接收窗口,来平衡二者。接收方会告知发送方剩余可用大小,发送方据此来控制发送速度,从而达到流量控制的效果。
拥塞控制
维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。根据网络拥塞状态动态调整拥塞窗口大小,当网络出现丢包或延迟时,减慢数据发送速度。
