RTT和RTO
- RTT : 发送一个数据包到收到对应的ACK所花费的时间
- RTO : 重传时间间隔
TCP的滑动窗口
窗口:窗口大小指的是无需等待确认应答就可以继续发送数据的最大值. 因为这个窗口不断向后滑动, 所以叫做滑动窗口.
操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区来记录当前还有哪些数据没有应答
只有ACK确认应答过的数据, 才能从缓冲区删掉.
TCP使用滑动窗口做流量控制和乱序重排
- 保证TCP的可靠性
- 保证TCP的流量控制特性
窗口大小指的是无需等待确认应答就可以继续发送数据的最大值.
上图的窗口大小就是4000个字节 (四个段).
发送前四个段的时候, 不需要等待任何ACK, 直接发送
收到第一个ACK确认应答后, 窗口向后移动, 继续发送第五六七八段的数据…
因为这个窗口不断向后滑动, 所以叫做滑动窗口.
操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区来记录当前还有哪些数据没有应答
只有ACK确认应答过的数据, 才能从缓冲区删掉.
原文出处链接
出现丢包如何应答?
-
接收方收到数据包,但回复的ack包丢失
在滑动窗口有空闲位置的时候,没有接收到Ack确认包,继续发送,直至滑动窗口允许发送的数据包发送完毕,也未收到ack确认包,则执行重传。重传的时候,按照发送方接收到的Ack确认包,发送方确认接收方没有接收到的数据包,按照序号将数据包进行重传。
-
数据包丢失
当某一段报文丢失之后, 发送端会一直收到 1001 这样的ACK, 就像是在提醒发送端 “我想要的是 1001”
如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送
这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了
因为2001 - 7000接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中.
这种机制被称为 “高速重发控制” ( 也叫 “快重传” )