TCP的慢启动、拥塞机制和滑动窗口

TCP和UDP的对比

1.面向连接可靠 / 无连接的不可靠
2.面向字节流的,无边界的,每次发送后可以分包发送,最后进行数据合并(透明的保证了数据的依次,可靠) / 面向报文的,有边界的,每次发送一个报文,不能合并(效率更高但是需要自己保证数据的依次可靠)
3.有流量控制和拥塞控制 / 无
4.全双工 / 一对一,一对多,多对一,多对多
5.慢 / 快

TCP的慢启动

由于TCP连接会随着时间进行自我调谐,起初会限制连接的最大速度,如果数据传输成功,会随着时间的推移提高传输速度,这就是TCP的慢启动,所以http性能的优化关键并不在于高带宽而是低延迟,多路复用就是让所有的数据流通用一个TCP连接,让高带宽真正的服务于http性能的提升。2.0中解决了这个问题。

HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应!而在2.0中通过二进制流标识而不需要按照顺序来接受响应
https://www.ucloud.cn/yun/76567.html

TCP的拥塞机制

更多:https://www.cnblogs.com/liangyc/p/11628757.html
1、慢开始:设置一个“拥塞窗口cwnd”,该变量和接受窗口共同决定了发送者的发送窗口,开始从1开始指数2递增,当达到了设置的“慢开始门限ssthresh”,则可以根据情况来执行拥塞避免算法——每次经过一个往返时间RTT就给拥塞窗口+1,线性增长
2、快重传,快恢复:
每次发出一个包都设置一个定时器,在定时器结束还没有收到确认则表示该包丢失,需要进行重传,当然定时器是后置的手段,快重传是当发送方收到了三个一样的确认,就知道该包出现了错误,立即重传该包,这时也会设置一个重传定时器,如果收到确认则执行拥塞避免算法(此时执行快恢复,慢开始门限减半,cwnd设置为此时的门限值,高起点,线性增长),如果仍然超时则执行慢开始算法(慢开始门限设置为原来的一半,将cwnd设置为1,执行慢开始算法,低起点,指数增长))


超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器RTO,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。这是数据包丢失的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接收到3个以上的重复ACK,就应该意识到,数据丢了,需要重新传递。这个机制不需要等到重传定时器溢出,所以叫做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法。

  • 收到三个重复的ACK是因为数据是传递是按序的,如果M1之后的M2丢失,服务端接受到M3M4M5都会返回M2的ACK
    快速重传和快速恢复旨在:快速恢复丢失的数据包。没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没有新的数据包被发送

TCP滑动窗口

滑动窗口进行流量控制,为了数据的不丢失,平衡不同设备之间的性能,需要接受方告知发送端它所拥有的缓存区大小,发送方根据这个数据来计算自己最多能发送的数据量,A发给B
image.png

,为了防止B窗口的反馈信息空间rwnd丢失,会造成死锁,为了处理这种情况给A设置一个定时器,当时间到了则发送一个1字节的探测报文。

你可能感兴趣的:(TCP的慢启动、拥塞机制和滑动窗口)