此文内容全部基于小林Coding图解网络系列,将此记录在博客中也是为了方便自己查阅和复习,如有任何侵权等问题,联系我立即删除!
TCP 重传、滑动窗口、流量控制、拥塞控制
TCP 重传、滑动窗口、流量控制、拥塞控制
重传机制
- 超时重传
- 快速重传
- SACK
- D-SACK
超时重传
RTT:往返时延—————-指的是数据发送时刻到接收到确认的时刻的差值
RT0:超时重传时间
RT0应该略大于RTT
,当时间超过RT0还没有收到ACK,则重传报文。
快速重传
选择性确认SACK
这种方式需要在 TCP 头部「选项」字段里加一个
SACK
的东西,它可以将已收到的数据的信息发送给「发送方」,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。
Duplicate SACK
Duplicate SACK 又称
D-SACK
,其主要使用了 SACK 来告诉「发送方」有哪些数据被重复接收了。
- 「接收方」发给「发送方」的两个 ACK 确认应答都丢失了,所以发送方超时后,重传第一个数据包(3000 ~ 3499)
- 于是「接收方」发现数据是重复收到的,于是回了一个 SACK = 3000~3500,告诉「发送方」 3000~3500 的数据早已被接收了,因为 ACK 都到了 4000 了,已经意味着 4000 之前的所有数据都已收到,所以这个 SACK 就代表着
D-SACK
。- 这样「发送方」就知道了,数据没有丢,是「接收方」的 ACK 确认报文丢了。
滑动窗口
累计确认、累计应答
接收窗口的大小是约等于发送窗口的大小的。
因为滑动窗口并不是一成不变的。比如,当接收方的应用进程读取数据的速度非常快的话,这样的话接收窗口可以很快的就空缺出来。那么新的接收窗口大小,是通过 TCP 报文中的 Windows 字段来告诉发送方。那么这个传输过程是存在时延的,所以接收窗口和发送窗口是约等于的关系
流量控制
1.停止-等待流量控制
发送一帧,等待应答信号再发送下一帧,如果没有接收到回答,则一直等待,没有计时器。
2.滑动窗口流量控制
允许一次发送多个帧,每收到一个帧的确认,发送窗口就向前滑动一个帧的位置。
拥塞控制
拥塞窗口:拥塞窗口 cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。,发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。
慢启动门限
ssthresh
:cwnd超过慢启动门限后,则开始拥塞避免算法