必须掌握的TCP全家桶系列详细解读:流量控制、三次握手、四次挥手及拥塞控制算法

目录
开篇
一、TCP如何保证可靠传输?
【必须掌握的TCP全家桶系列详细解读:流量控制、三次握手、四次挥手及拥塞控制算法】1、滑动窗口
2、超时重传和快速重传
3、选择确认
二、TCP的流量控制
三、TCP三次握手
四、TCP四次挥手
五、TCP的拥塞控制
1、慢启动和拥塞避免
2、快速恢复
结语
开篇
今天下午广州下着小雨,屋外“沙沙”的雨声很治愈,心情舒畅,想起诗句“小桥流水人家”,已经好久没接触古诗词啦,现在想想以前学的古典文学,有种久违的优美 。驾一叶扁舟于江中,朦胧细雨,惠风和畅 。以上这句话是我自己编的?乛?乛?,以后有时间就读读古诗文学,感觉挺不错的*^_^*
后来雨下得越来越大,还伴有“轰隆”的雷声,这时我才缓过神来,发现写着写着跑题了哈,然后赶紧进入正题,外面的风景虽好,自己的遐想也好,今天任务还没完成呢!今天想要写的学习总结是TCP非常关键的知识,正如我起的题目“必须掌握的TCP全家桶系列”,后面会发现这一系列下来,联系都挺密切的,感兴趣的伙伴可以往前找我写的,比如《运输层UDP报文、TCP协议内容 一篇精华总结!》 。
一、TCP如何保证可靠传输? 1、滑动窗口
“滑动窗口”这个概念现在应该不陌生了,在数据链路层的时候就出现过这个概念,是一个很形象的名字,协议的工作过程中,发送窗口不断向前滑动 。可以瞧瞧这篇《计算机网络学习:封装成帧、差错检测和可靠传输》 。
当然,这里讲的是运输层TCP协议的可靠传输,原理相似,具体有一点差别 。
TCP协议是面向字节的,所以滑动窗口也是以字节为单位 。同样采用累积确认的方式,对按序接收到的数据进行确认,确认号表示下一个期望收到数据字节的第一个编号 。
另外,因为TCP提供了全双工的通信,不需要双方特地发送确认报文,发送数据的时候捎带确认信息,采用了延迟确认的机制,这样提高了TCP的传输效率 。
一图胜万字,就是这样 。

必须掌握的TCP全家桶系列详细解读:流量控制、三次握手、四次挥手及拥塞控制算法

文章插图
上图表示窗口大小为400字节,发送的数据不能超过窗口大小,只有发送的数据被确认后,窗口才向前滑动 。比如初始化序号为1,第一次发送1-401字节这段数据,然后收到1-201的确认,窗口向前滑动至701因为301-401未收到确认,现在能使用的窗口只有200字节,也就是说最多只能再发送200字节的数据 。
还有一个重要的地方,发送窗口只是发送缓存的一部分,在实际TCP应用程序中,缓存空间和序号空间是有限的,这部分缓存类似循环队列的存在可以循环使用 。
2、超时重传和快速重传
在数据链路层中也有超时重传的机制,设置的超时阈值相对简单,因为数据链路层的往返时间比较固定 。而TCP中的超时重传机制,就显得比较复杂了,TCP工作的环境十分复杂,网络拥塞情况不确定,这对于设定超时阈值时间就很困难 。往返时间PTT的计算有着许多算法,比如自适应算法、Karn算法,目的都是尽可能正确的计算报文的往返时间,这样才能保证可靠传输,没有差错 。
尽管这样,在实际中如果一个超时时间比较长,这样效率低下,不利于传输数据 。因此,快速重传可以更好的保证TCP的可靠传输并提高效率 。
快速重传的工作过程在下图可以很直观地看到 。
发送方发送了M1-M6报文,期间M3报文丢失,收到M4时候发现序号不对,后面到达的M5-M6都暂且存放于缓存,这时根据快速重传算法规定,对按序到达的最后的数据的序号进行三次重复确认,表示需要重传下一个序号的数据 。