资讯动态

Linux TCP 协议深度解析:从状态机到拥塞控制

发布时间:2026/9/12 2:41:44 来源:尧图企业网站定制
引言TCP传输控制协议是互联网的基石协议之一。它提供了面向连接、可靠、基于字节流的传输服务。与UDP的简单封装不同TCP通过复杂的机制保证了数据在网络中传输的可靠性。本文将从TCP的核心特性出发深入讲解连接状态机、三次握手与四次挥手、TIME_WAIT状态的意义以及拥塞控制算法等高级主题。第一部分TCP 协议核心特性一、协议特点特性说明面向连接通信前必须建立连接三次握手结束后断开连接四次挥手可靠传输通过确认应答、超时重传、去重、乱序重排保证可靠性流式服务数据以字节流形式传输无固定边界全双工通信双方可同时发送和接收数据二、可靠性实现机制确认应答ACK接收方收到数据后发送确认信息告知发送方数据已到达。超时重传发送方发送数据后启动定时器若未收到确认则重发数据包。// 超时重传示意 发送端: 发送 seq1 → 启动定时器 接收端: 收到数据 → 发送 ACK2 发送端: 收到 ACK → 取消定时器 // 如果 ACK 丢失 发送端: 发送 seq1 → 启动定时器 接收端: 收到数据 → 发送 ACK2 (丢失) 发送端: 定时器超时 → 重传 seq1去重处理通过报文序号识别并丢弃重复数据包。乱序重排根据序号重新排列到达顺序错乱的数据包。三、滑动窗口机制滑动窗口是TCP的流量控制机制用于调节发送速率防止接收方缓冲区溢出。工作原理窗口内数据可一次性发送无需等待单个确认收到确认后窗口沿数据流方向滑动窗口大小决定允许发送的未确认数据量四、TCP 与 UDP 协议对比对比维度TCPUDP连接性面向连接三次握手无连接可靠性可靠确认重传不可靠尽最大努力数据边界流式无边界数据报有边界传输效率较低较高适用场景文件传输、网页访问实时视频、DNS查询选择依据需要数据完整性 → TCP如文件下载容忍丢包、要求低延迟 → UDP如视频通话第二部分TCP 连接状态机一、状态总览TCP连接从创建到关闭会经历多个状态变化监控连接状态对排查网络问题至关重要。状态说明CLOSED假想的起始状态实际代码中不可见LISTEN服务器监听状态等待客户端连接SYN_SENT客户端发送SYN后进入的状态SYN_RCVD服务器收到SYN后进入的状态ESTABLISHED三次握手完成后进入的连接状态FIN_WAIT_1主动关闭方发送FIN后进入的状态FIN_WAIT_2收到ACK后进入的状态CLOSE_WAIT被动关闭方收到FIN后进入的状态LAST_ACK被动关闭方发送FIN后进入的状态TIME_WAIT主动关闭方完成四次挥手后进入的状态二、状态观察方法# 查看TCP连接状态netstat -natp# 输出示例# Proto Recv-Q Send-Q Local Address Foreign Address State# tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN# tcp 0 0 192.168.1.146:6000 192.168.1.100:54321 ESTABLISHED# tcp 0 0 192.168.1.146:6000 192.168.1.100:54322 TIME_WAIT第三部分TCP 三次握手一、握手流程详细说明步骤方向报文内容状态变化1客户端 → 服务器SYN1, seqx客户端进入 SYN_SENT2服务器 → 客户端SYN1, ACK1, seqy, ackx1服务器进入 SYN_RCVD3客户端 → 服务器ACK1, acky1双方进入 ESTABLISHED二、为什么不能是两次握手两次握手的缺陷无法确认客户端存活状态。// 攻击场景客户端发送SYN → 立即退出服务端回复SYNACK → 等待客户端ACK永远不会到来服务端资源被占用造成资源浪费三次握手的必要性第三次ACK确认双方状态同步防止半开连接。三、SYN Flood 攻击攻击原理攻击者发送大量伪造SYN包占满服务器的未完成握手队列。防御措施SYN Cookie 技术识别异常IP进行限流防火墙检测同一IP的异常SYN报文频率第四部分TCP 四次挥手一、挥手流程二、为什么是四次挥手TCP是全双工通信双方需要独立关闭自己的发送通道次数发送方报文含义1主动方FIN主动方不再发送数据2被动方ACK确认收到关闭请求3被动方FIN被动方不再发送数据4主动方ACK确认关闭进入TIME_WAIT能否简化为三次当被动方收到FIN后立即关闭连接时可将FIN与ACK合并发送协议设计为四次是因为无法预知程序员何时调用close()需要保持ACK的即时性三、TIME_WAIT 状态详解持续时间2MSLMaximum Segment Lifetime通常约2分钟。出现场景仅出现在主动关闭连接的一端。存在原因原因说明可靠终止连接确保最后一次ACK丢失时能处理重传的FIN报文。若直接关闭对方重发FIN将收到RST响应导致错误处理延迟报文等待2MSL时间确保所有报文在网络中消失防止旧连接的延迟报文被新连接误接收实际影响端口处于被占用状态无法立即重启相同端口的服务可通过设置SO_REUSEADDR套接字选项重用端口// 解决 TIME_WAIT 导致的端口占用问题 int opt 1; setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, opt, sizeof(opt));第五部分TCP 头部结构TCP报文头部可同时携带序号和确认号字段这是实现可靠传输的关键技术基础。0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -------------------------------- | 源端口16位 | 目的端口16位 | -------------------------------- | 序列号32位 | -------------------------------- | 确认号32位 | -------------------------------- | 数据偏移 | 保留 | 标志位 | 窗口大小16位 | -------------------------------- | 校验和16位 | 紧急指针16位 | -------------------------------- | 选项最多40字节 | --------------------------------关键标志位标志位含义SYN同步序列号用于建立连接ACK确认号有效FIN发送方已无数据请求关闭连接RST重置连接PSH立即推送数据第六部分拥塞控制一、核心目标提高网络利用率降低丢包率保证网络资源对每条数据流的公平性。二、四个核心机制机制作用触发条件慢启动指数增长发送窗口探测网络容量连接建立或检测到丢包拥塞避免线性增长窗口防止网络过载窗口达到慢启动阈值快速重传立即重传丢失报文段收到3个重复ACK快速恢复温和降速避免立即进入慢启动快速重传后三、慢启动机制工作原理初始cwnd2-4SMSS每RTT时间窗口大小翻倍。发送轮次 拥塞窗口cwnd1 12 23 44 85 16 ← 达到慢启动阈值转为拥塞避免类比说明如同高速公路车流控制逐步增加避免瞬间拥堵。四、拥塞避免达到慢启动阈值(ssthresh)后采用加法增大策略每收到一个ACKcwnd增加1/cwnd每个RTT周期cwnd增加1五、快速重传与快速恢复触发条件收到3个重复ACK表明有报文段丢失。快速重传立即重传丢失报文段不必等待超时计时器。快速恢复将ssthresh设为当前cwnd的一半cwnd设置为新的ssthresh或ssthresh3进入拥塞避免阶段检测到丢包 │ ▼ ssthresh cwnd ÷ 2 │ ▼ cwnd ssthresh 3快速恢复 │ ▼ 进入拥塞避免阶段线性增长六、AIMD 原则策略说明阶段加法增大拥塞避免阶段的线性增长拥塞避免乘法减小拥塞发生时窗口减半快速恢复第七部分HTTP 协议基础一、HTTP 请求方法方法含义安全性幂等性GET请求获取资源是是POST提交数据否否HEAD仅获取头部信息是是PUT上传资源否是DELETE删除资源否是OPTIONS查看支持的请求方法是是二、HTTP 状态码分类分类含义典型状态码1xx信息类100 Continue2xx成功类200 OK3xx重定向类301 Moved, 302 Found, 304 Not Modified4xx客户端错误400 Bad, 401 Unauthorized, 403 Forbidden, 404 Not Found5xx服务器错误500 Internal, 503 Unavailable三、HTTP 通信流程浏览器访问网页的过程 1. DNS解析将域名解析为IP地址 2. TCP三次握手与服务器建立连接默认端口80 3. 发送HTTP请求GET /index.html HTTP/1.1 4. 服务器响应HTTP/1.1 200 OK 5. 浏览器渲染呈现页面内容 6. TCP四次挥手关闭连接或保持持久连接知识小结知识点核心内容难度TCP协议特点面向连接、可靠传输、流式服务⭐⭐⭐⭐UDP协议特点无连接、不可靠、数据包服务⭐⭐三次握手SYN→SYNACK→ACK⭐⭐⭐四次挥手FIN→ACK→FIN→ACK⭐⭐⭐⭐TIME_WAIT主动关闭方状态持续2MSL⭐⭐⭐⭐滑动窗口流量控制机制⭐⭐⭐⭐拥塞控制慢启动→拥塞避免→快速重传→快速恢复⭐⭐⭐⭐⭐HTTP基础GET/POST方法状态码分类⭐⭐本文详细讲解了TCP协议的核心机制可靠性实现确认应答、超时重传、去重、乱序重排状态机从LISTEN到ESTABLISHED再到TIME_WAIT的完整状态转换三次握手与四次挥手连接建立与关闭的完整流程TIME_WAIT状态存在的两个原因及实际影响拥塞控制慢启动、拥塞避免、快速重传、快速恢复四大机制这些知识点不仅是网络编程的基础更是面试中的高频考点。理解TCP协议的底层工作原理能够帮助你在实际开发中更好地排查网络问题、优化传输性能。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价