RTT
RTT(Round Trip Time): 发送一个数据包到收到对应的ACK,所花费的时间,简单来说,就是我发送一个数据包,对方给我会有一个ACK包这个过程所花费的时间.
font color=orange>RTO
RTO(Retransmission Time Out): 重传超时时间,TCP在发送一个数据包之后,就会自动启动一个重传定时器,RTO就是定时器规定的重换时间,也就是说,如果你在RTO时间内给我回复了ACK包,重传定时器就失效,不需要重传,当超过RTO时间还没有收到ACK包时,发送发就会重新发送数据包
RTO不是写死的,是根据RTT计算出来的
TCP的滑动窗口
我们知道TCP为了传输效率,会将报文分割成数据包之后再进行传送,但是出于效率的考虑,不可能只是一段一段地发送,也就是说不可能上一段发送结束了再发送下一段,这样太慢了
而要实现数据包的批量发送,TCP就必须要解决 可靠传输,以及 包乱序的问题
TCP使用滑动窗口做流量控制与乱序重排,其主要作用如下- 保证TCP的可靠性,基于确认重传机制的(即发送窗口只有收到接收端对本段数据的确认后才会滑动窗口,接收窗口在前面所有的段都已经被确认的前提下才会移动左边界滑动窗口).
- 保证TCP的流控特性TCP(通过报文头中的
window字段使接收方通知发送方还有多少缓冲区可以接受数据,发送方根据接收方的处理能力来返送数据,这样接收方就不会出现处理不过来的情况) - 滑动窗口还体现了TCP面向字节流的设计思路
窗口数据的计算过程
图中左边是发送端缓冲区,右边是接收端缓冲区,下面的 长方形表示要发送的数据流,假设里面装满了数据,并且需要按照顺序从左向右依次发送或者接收
TCP会话发送方的窗口滑动过程
TCP会话接收方的窗口滑动过程