TCP原理——多了解算法和底层,武装自己的头脑:)
《TCP实现原理概述(经典)》
百度文库中的一篇文档,图表和流程图的形式,非常清晰。包含四个内容:TCP连接和关闭、慢启动、拥塞避免、快速重传和快速恢复
http://wenku.baidu.com/view/b9e6d9d6c1c708a1284a4484.html
这四个方面其实可以看成TCP连接中的几种状态
1. TCP Connection Setup 三次握手
2. TCP Slow Start 慢启动的原理是:一开始发的包窗口大小只有1个单位,之后如果没问题,就开始指数级增加窗口大小,迅速接近SSThreshold。吐个槽:一点也不慢
3. TCP Congestion Avoidance 拥塞避免的原理:达到SSThreshold之后得悠着点,如果没遇到问题就慢慢增加窗口大小。(实际没字面上高端)
4. TCP Fast Retransmit and Fast Recovery 检测到丢包时,狠狠的减小窗口大小,然后该重发的重发。重发之后立即开始修复状态。
5. TCP Connection Release 四次握手,还有个计时器确保远端切实的断开了连接。
理想状态下
1 Setup -> 2 Slow Start -> 3 Congestion Avoidance -> 5 Release
考虑丢包的情况,就有
1 Setup ->
( 2 Slow Start -> 3 Congestion Avoidance -> 4 Retransmit and Recovery)会在这几种状态跳转
-> 5 Release
上面的文档大概一小时左右能看完,但是看完仍然有不清楚的地方。因为它只说了流程,没有说明原因和原理,特别是比较复杂的重传和恢复部分。
其实这部分讲解的资料很多,比如百度百科:
http://baike.baidu.com/view/3114573.htm
作为重点,我摘出了两个原则:
1、“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络。这个原则解释了快速恢复时为什么要修改cwnd窗口大小。
2、TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。
计时器:
《TCP实现原理概述(经典)》
百度文库中的一篇文档,图表和流程图的形式,非常清晰。包含四个内容:TCP连接和关闭、慢启动、拥塞避免、快速重传和快速恢复
http://wenku.baidu.com/view/b9e6d9d6c1c708a1284a4484.html
这四个方面其实可以看成TCP连接中的几种状态
1. TCP Connection Setup 三次握手
2. TCP Slow Start 慢启动的原理是:一开始发的包窗口大小只有1个单位,之后如果没问题,就开始指数级增加窗口大小,迅速接近SSThreshold。吐个槽:一点也不慢
3. TCP Congestion Avoidance 拥塞避免的原理:达到SSThreshold之后得悠着点,如果没遇到问题就慢慢增加窗口大小。(实际没字面上高端)
4. TCP Fast Retransmit and Fast Recovery 检测到丢包时,狠狠的减小窗口大小,然后该重发的重发。重发之后立即开始修复状态。
5. TCP Connection Release 四次握手,还有个计时器确保远端切实的断开了连接。
理想状态下
1 Setup -> 2 Slow Start -> 3 Congestion Avoidance -> 5 Release
考虑丢包的情况,就有
1 Setup ->
( 2 Slow Start -> 3 Congestion Avoidance -> 4 Retransmit and Recovery)会在这几种状态跳转
-> 5 Release
上面的文档大概一小时左右能看完,但是看完仍然有不清楚的地方。因为它只说了流程,没有说明原因和原理,特别是比较复杂的重传和恢复部分。
其实这部分讲解的资料很多,比如百度百科:
http://baike.baidu.com/view/3114573.htm
作为重点,我摘出了两个原则:
1、“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络。这个原则解释了快速恢复时为什么要修改cwnd窗口大小。
2、TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。
计时器:
计时器我看到至少在两处出现,一是最重要的:发包之后一定时间内有没有收到ACK信号,以此判断是否丢包。二是断开连接时也要保证服务器切实的断开了连接。