TCP核心机制

1. TCP五大核心机制

1.1. 顺序问题(稳重不乱)

背景:网络传输中数据包可能因路径不同或网络波动导致乱序到达,需保证接收方能按正确顺序处理数据。

原理

  • 序列号(Sequence Number):每个数据包携带唯一序列号,接收方按序号重组数据。
  • 累积确认(Cumulative ACK):接收方通过ACK确认"已收到的最大连续序号",例如ACK=6表示1-5号包已按序接收。
  • 缓存乱序包:接收方缓存非连续包,待缺失包到达后一并处理。

关键技术

  • 快速重传(Fast Retransmit):收到3次重复ACK(如ACK=5),立即重传缺失包(6号包)。
  • SACK(Selective Acknowledgment):通过扩展选项标记已接收的非连续包范围(如SACK=8-9),帮助发送方精准重传。

在 TCP 里,接收端会给发送端报一个窗口的大小,叫Advertised window

发送端需要保持下面的数据结构:

接受端需要保持下面的数据结构:

1.2. 丢包问题(承诺靠谱)

背景:网络拥塞或链路故障可能导致数据包丢失,需确保数据可靠传输。

原理

  • 超时重传(Retransmission Timeout, RTO):

RTT采样:动态计算往返时间(Round-Trip Time),加权平均历史值(SRTT)。

自适应超时:超时时间 = SRTT + 4×RTT波动值(RTTVAR),避免过早或过晚重传。

指数退避:超时后重传时间加倍(如2×RTO),防止加剧拥塞。

  • 快速重传:触发条件为收到3次重复ACK,无需等待超时。
  • SACK

示例

发送方发送包6-9,若包7丢失,接收方持续发送ACK=6;发送方收到3次ACK=6后,立即重传包7。

1.3. 连接维护(有始有终)

背景:TCP是面向连接的协议,需明确建立和释放连接,防止资源泄漏。

原理

三次握手(建立连接):

  • SYN:客户端发送初始序列号(seq=x)。
  • SYN-ACK:服务端确认x+1(ack=x+1),并发送初始序列号(seq=y)。
  • ACK:客户端确认y+1(ack=y+1),双方进入ESTABLISHED状态。
  • 为什么不是两次?:防止历史SYN包导致无效连接(如网络延迟的重传包)。

四次挥手(释放连接):

  • FIN:主动方发送终止请求。
  • ACK:被动方确认。
  • FIN:被动方处理完数据后发送终止请求。
  • ACK:主动方确认,进入TIME_WAIT状态(等待2MSL)。
  • TIME_WAIT作用:确保最后一个ACK到达,避免旧连接数据干扰新连接。

异常处理

  • Keepalive机制:长时间无数据时发送探测包,检测连接存活。
  • RST包:强制终止异常连接(如对方进程崩溃)。

1.4. 流量控制(把握分寸)

背景:防止发送速率超过接收方处理能力,导致缓冲区溢出。

原理

  • 滑动窗口(Sliding Window):

接收窗口(rwnd):接收方通过ACK告知剩余缓冲区大小(Advertised Window)。

发送窗口:发送方限制未确认数据量 ≤ min(rwnd, cwnd)。

关键策略:

  • 零窗口探测:当rwnd=0时,发送方定期发送1字节探测包,避免死锁。
  • 糊涂窗口综合征避免:接收方在缓冲区有足够空间(如≥1MSS)时才更新窗口。

示例

接收方缓冲区满时,发送ACK携带rwnd=0,发送方暂停发送;待接收方处理数据后,通过ACK更新rwnd恢复传输。

1.5. 拥塞控制(知进知退)

背景:防止发送速率超过网络承载能力,导致全局性丢包和拥塞崩溃。

原理

  • 拥塞窗口(cwnd):动态调整的发送速率上限,与rwnd共同限制发送量。
  • 核心算法:

慢启动(Slow Start):

初始cwnd=1 MSS,每RTT指数增长(cwnd×2)。

当cwnd≥ssthresh(慢启动阈值,默认65535字节)时进入拥塞避免。

拥塞避免(Congestion Avoidance):

每RTT线性增长(cwnd += 1 MSS)。

快重传与快恢复:

收到3次重复ACK时,ssthresh=cwnd/2,cwnd=ssthresh+3,进入线性增长。

超时重传:

ssthresh=cwnd/2,cwnd=1,重新慢启动。

优化算法(如BBR)

带宽与时延探测:动态计算最大带宽(BtlBw)和最小RTT(RTprop),按BtlBw×RTprop设置cwnd,避免填满中间设备缓存。

示例

网络拥塞时,传统TCP通过丢包触发降速;BBR通过测量带宽和时延主动调整,保持高吞吐和低延迟。

总结:

|----------|-----------|---------------------|----------------------------|
| 机制 | 核心目标 | 关键技术 | 关键参数/算法 |
| 顺序问题 | 数据按序到达 | 序列号、累积确认、SACK | 快速重传、SACK选项 |
| 丢包问题 | 数据可靠传输 | 超时重传、快速重传 | RTT计算、指数退避 |
| 连接维护 | 明确连接生命周期 | 三次握手、四次挥手、TIME_WAIT | Keepalive、RST |
| 流量控制 | 匹配发送与接收速率 | 滑动窗口、零窗口探测 | rwnd、MSS |
| 拥塞控制 | 避免网络过载 | 慢启动、拥塞避免、快恢复、BBR | cwnd、ssthresh、BtlBw、RTprop |

相关推荐
liulilittle26 分钟前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
guts°4 小时前
17-VRRP
网络·智能路由器
Jewel Q4 小时前
动态路由协议基础
网络·智能路由器
宇称不守恒4.05 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
Dreams_l5 小时前
网络编程2(应用层协议,传输层协议)
运维·服务器·网络
7ACE5 小时前
Wireshark TS | 发送数据超出接收窗口
网络协议·tcp/ip·wireshark
数据与人工智能律师5 小时前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
先知后行。5 小时前
网络协议HTTP、TCP(草稿)
网络·网络协议
xzkyd outpaper6 小时前
QUIC协议如何在UDP基础上解决网络切换问题
网络·计算机网络·udp·quic
碳酸的唐6 小时前
Inception网络架构:深度学习视觉模型的里程碑
网络·深度学习·架构