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 |

相关推荐
小白学大数据14 分钟前
构建企业级Selenium爬虫:基于隧道代理的IP管理架构
爬虫·tcp/ip·selenium
时空潮汐15 分钟前
我用神卓 NAT 公网 IP 盒子搭建《我的世界》联机的经历
网络·网络协议·tcp/ip
liulilittle17 分钟前
HTTP/3.0:网络通信的技术革新与性能飞跃
网络·网络协议·http·https·quic·流媒体·通信
岑梓铭24 分钟前
计算机网络第四章(4)——网络层《ARP协议》
网络·笔记·tcp/ip·计算机网络·考研·408
Linux运维技术栈1 小时前
域名网页加载慢怎么解决:从测速到优化的全链路性能优化实战
运维·网络·nginx·性能优化·cloudflare
北极光SD-WAN组网1 小时前
基于智能组网设备的港口网络安全闭环管控方案设计与实践
网络·安全·web安全
妳人話1 小时前
TCP的三次握手和四次挥手
网络·网络协议·tcp/ip
纳祥科技2 小时前
分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
网络·单片机·音视频
2501_916013742 小时前
HTTPS 抓包难点分析,从端口到工具的实战应对
网络协议·http·ios·小程序·https·uni-app·iphone
leo__5202 小时前
在Ubuntu 22.04系统中无需重启设置静态IP地址
tcp/ip·ubuntu·php