TCP连接与协议全面解析
一、TCP协议基础
TCP(Transmission Control Protocol)是计算机网络中面向连接的、可靠的传输层协议,与UDP(用户数据报协议)形成对比。其核心特点包括:
- 面向连接:通信前需建立连接(三次握手),结束后释放连接(四次挥手)。
- 可靠传输:通过确认机制、重传机制、序号与校验和保证数据完整性。
- 流量控制:基于滑动窗口协议动态调整发送速率。
- 拥塞控制:通过慢启动、拥塞避免、快速重传等算法避免网络拥塞。
二、TCP连接建立与释放
1. 三次握手(建立连接)
| 步骤 | 客户端操作 | 服务器操作 | 状态变化 |
|------|------------|------------|----------|
| 1 | 发送SYN包 | 接收SYN | 客户端:SYNSENT → ESTABLISHED
服务器:LISTEN → SYNRECEIVED |
| 2 | 接收SYN+ACK| 发送SYN+ACK| 客户端:等待ACK
服务器:SYN_RECEIVED → ESTABLISHED |
| 3 | 发送ACK | 接收ACK | 双方均进入ESTABLISHED状态 |
示例:客户端向服务器请求网页时,三次握手确保双方同步初始序号(ISN),防止旧连接数据干扰。
2. 四次挥手(释放连接)
| 步骤 | 客户端操作 | 服务器操作 | 状态变化 |
|------|------------|------------|----------|
| 1 | 发送FIN包 | 接收FIN | 客户端:ESTABLISHED → FINWAIT1
服务器:ESTABLISHED → CLOSEWAIT |
| 2 | 接收ACK | 发送ACK | 客户端:FINWAIT1 → FINWAIT2
服务器:CLOSEWAIT → LASTACK |
| 3 | 等待 | 处理数据并发送FIN | 客户端:FINWAIT2 → TIMEWAIT
服务器:LASTACK |
| 4 | 接收FIN+ACK| 发送ACK | 客户端:TIMEWAIT → CLOSED
服务器:LAST_ACK → CLOSED |
关键点:TIME_WAIT状态持续2MSL(报文段生存时间),确保对方收到ACK并处理残留数据。
三、TCP可靠传输机制
1. 确认与重传
- 累计确认:接收方确认已正确接收的最后一个字节序号。
- 超时重传:发送方未收到ACK时重传数据。
- 快速重传:接收方收到乱序报文时立即发送重复ACK,触发发送方重传。
2. 序号与校验和
- 序号:每个字节编号,确保数据按序重组。
- 校验和:验证数据完整性(伪首部+TCP段+数据)。
3. 流量控制
- 滑动窗口:接收方通过rwnd
(接收窗口)告知发送方可发送的数据量。
- 窗口更新:接收方处理数据后动态调整窗口大小。
4. 拥塞控制
- 慢启动:初始窗口指数增长(cwnd = min(cwnd*2, ssthresh)
)。
- 拥塞避免:窗口线性增长(cwnd += 1
)。
- 快速重传/恢复:检测到丢包时快速重传并调整窗口。
四、TCP报文格式
| 字段 | 长度(字节) | 作用 |
|---------------|--------------|--------------------------|
| 源端口/目的端口 | 2 | 标识发送/接收应用进程 |
| 序号 | 4 | 数据段首字节序号 |
| 确认号 | 4 | 期望接收的下一个字节序号 |
| 数据偏移 | 0.5(4位) | TCP头部长度(32位字) |
| 标志位 | 1(6位) | 控制连接状态(SYN/ACK/FIN等) |
| 窗口大小 | 2 | 流量控制窗口 |
| 校验和 | 2 | 数据完整性验证 |
| 紧急指针 | 2 | 紧急数据偏移 |
五、TCP与UDP对比
| 特性 | TCP | UDP |
|--------------|----------------------|----------------------|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 不可靠 |
| 传输方式 | 字节流 | 数据报 |
| 头部开销 | 20字节(最小) | 8字节 |
| 适用场景 | 文件传输、HTTP | 视频流、DNS查询 |
六、TCP应用场景
- HTTP/HTTPS:网页浏览依赖TCP的可靠性。
- FTP:文件传输需保证数据完整性。
- SMTP/POP3:邮件传输要求无丢失。
七、TCP性能优化
- 窗口缩放选项:支持更大窗口(超过65535字节)。
- 选择性确认(SACK):精确重传丢失报文段。
- TCP Fast Open:减少握手延迟(TFO)。
:TCP通过复杂的机制确保可靠传输,适用于对数据完整性要求高的场景。理解其连接管理、流量控制与拥塞控制是掌握网络编程的基础。