tcp协议算法
TCP传输控制协议是保证数据可靠传输的核心协议其设计中包含多种关键算法用于解决丢包重传、流量控制、拥塞避免、效率优化等问题。这些算法共同支撑了 TCP 的可靠性和高效性以下是核心算法的详细讲解一、可靠传输相关算法解决 “数据丢了怎么办”TCP 的核心目标是 “可靠传输”—— 确保数据无丢失、无重复、按序到达。为此设计了以下关键算法1. 超时重传算法Timeout Retransmission作用当数据包发送后未收到确认ACK通过超时机制重新发送解决数据包丢失问题。核心原理发送方给每个数据包分配一个 “超时计时器”若在计时器到期前未收到 ACK则重传该数据包。关键是 “超时时间RTORetransmission Timeout” 的计算RTO 不能固定网络延迟波动大需基于 “往返时间RTTRound-Trip Time数据包发出到收到 ACK 的时间” 动态调整。RTO 计算细节先采样 RTT每次收到 ACK 时记录计算 “平滑 RTTSRTTSmoothed RTT”SRTT (1 - α) * SRTT α * 新RTTα 通常取 0.125平滑短期波动。再计算 “RTT 偏差RTTVARRTT Variation”RTTVAR (1 - β) * RTTVAR β * |新RTT - SRTT|β 通常取 0.25反映 RTT 的波动范围。最终 RTO SRTT 4 * RTTVAR确保覆盖大多数网络延迟波动。举例网络突然变卡RTT 从 100ms 增至 500msRTO 会自动调大避免过早重传导致网络更拥挤。2. 快速重传与快速恢复算法Fast Retransmit Fast Recovery作用解决 “超时重传等待时间过长” 的问题通过重复 ACK 快速检测丢包并恢复。核心场景若接收方收到 “失序数据包”如预期收到包 10却先收到包 11会连续发送 “重复 ACK”对已正确接收的最后一个包确认如反复确认包 9。快速重传当发送方收到3 个相同的重复 ACK如连续 3 次收到对包 9 的 ACK即可判定 “中间的包 10 丢失”无需等待超时直接重传包 10。快速恢复优势比超时重传快得多通常节省 50% 以上时间尤其适合高频小数据包场景如网页浏览。3. 选择性重传算法SACKSelective Acknowledgment作用解决 “部分丢包时的低效重传” 问题传统 TCP 会重传丢失包之后的所有包浪费带宽。核心原理举例发送方发送包 1-5接收方收到 1、3、4、5仅丢失包 2。通过 SACK接收方可告知 “已收到 1、3-5”发送方只需重传包 2而非重传 2-5。注意SACK 是可选功能需双方协商开启TCP 握手时通过选项字段声明。二、流量控制算法解决 “接收方处理不过来怎么办”流量控制用于避免发送方发送速度超过接收方的处理能力如接收方缓冲区满了继续发送会导致丢包核心算法是 “滑动窗口”。滑动窗口算法Sliding Window作用基于接收方的缓冲区大小动态控制发送方的发送速率。核心原理举例细节若接收方缓冲区满rwnd0发送方会定时发送 “窗口探测报文”查询接收方是否有新空间避免永久阻塞。三、拥塞控制算法解决 “网络扛不住怎么办”拥塞控制用于避免发送方发送速度超过网络的承载能力如路由器缓存满导致丢包核心是通过 “拥塞窗口cwndCongestion Window” 动态调整发送速率。TCP 拥塞控制是一个 “探测 - 调整” 的过程包含 4 个核心阶段1. 慢启动Slow Start作用刚建立连接时逐步探测网络承载能力避免一开始就发送大量数据导致拥塞。规则举例新连接建立cwnd1MSS收到 ACK 后变为 2MSS再收到 ACK 变为 4MSS… 直到达到 ssthresh。2. 拥塞避免Congestion Avoidance作用当网络接近拥塞时缓慢增加发送速率避免触发拥塞。规则3. 快速重传与快速恢复见上文 “可靠传输”与拥塞控制结合当通过 3 个重复 ACK 触发快速重传时判定为轻微拥塞4. 其他拥塞控制优化算法四、效率优化算法减少冗余提升传输效率1. Nagle 算法Nagles Algorithm作用减少 “小数据包”如 1 字节数据 40 字节头部的数量降低网络碎片和开销。规则适用场景适合交互性场景如 SSH、Telnet但可能增加延迟如游戏数据需要实时发送通常关闭 Nagle 算法。2. 延迟确认算法Delayed ACK作用减少 ACK 数据包的数量每个 ACK 约 40 字节频繁发送浪费带宽。规则风险若延迟 ACK 与 Nagle 算法同时开启可能导致 “交互延迟”如小数据等待 ACK 才能发送需根据场景调整。3. 窗口缩放Window Scaling作用突破 TCP 窗口的最大限制传统 TCP 窗口字段为 16 位最大 65535 字节支持大窗口适合高速网络。原理总结TCP 算法的协同作用TCP 的各种算法并非孤立而是相互配合可靠传输算法超时重传、SACK保证数据不丢失流量控制滑动窗口保证接收方不溢出拥塞控制慢启动、BBR 等保证网络不拥塞效率算法Nagle、延迟 ACK减少冗余开销。这些算法让 TCP 在复杂多变的网络环境中既能提供可靠传输又能最大化利用网络带宽成为互联网的核心传输协议。