TCP原理学习笔记

本文详细介绍了TCP连接管理的五个关键阶段:建立、慢启动、拥塞避免、快速重传与恢复及释放。通过具体流程和实例,阐述了TCP如何在不同状态下进行有效的数据传输管理,并解释了其背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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信号,以此判断是否丢包。二是断开连接时也要保证服务器切实的断开了连接。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值