当前位置:首页 > 系统教程 > 正文

Linux网络基础(十):TCP协议深度解析(从报文格式到三次握手与四次挥手全实战)

在Linux网络编程与运维中,TCP协议(Transmission Control Protocol)是面试与实战中最核心的知识点之一。它位于传输层,是一种面向连接的、可靠的、基于字节流的传输层通信协议。本文将带你深度剖析TCP的每一个细节。

一、TCP协议报文格式详解

TCP报文段由首部和数据两部分组成。首部通常为20字节(不含选项部分),包含了控制连接的核心信息:

  • 源端口/目的端口: 标识发送端和接收端的进程。
  • 序列号(Sequence Number): 解决包乱序问题,确保按序组装。
  • 确认号(Acknowledgment Number): 期望收到对方下一个报文段的第一个字节的序号。
  • 窗口大小: 用于流量控制,告诉对方我还能接收多少数据。

二、TCP标志位(ACK, SYN, RST, FIN, PSH, URG)

标志位控制着TCP的各种状态切换:

标志位 含义
SYN 同步序号,用于建立连接。
ACK 确认序号有效,响应数据包。
FIN 释放连接,数据发送完毕。
RST 重置连接,通常在连接出错时使用。
PSH 提示接收端立即从缓冲区读走数据。
URG 紧急指针有效,处理高优先级数据。

三、核心机制:超时重传

TCP为了实现可靠性,引入了超时重传机制。如果发送方在规定的时间内没有收到接收方的ACK确认包,就会认为数据丢失,从而重新发送该数据包。重传时间(RTO)会根据网络拥塞情况动态调整。

四、连接管理:三次握手与四次挥手

这是TCP协议最著名的过程,保证了双向通信的建立与关闭。

Linux网络基础(十):TCP协议深度解析(从报文格式到三次握手与四次挥手全实战) TCP协议报文格式  TCP三次握手 TCP四次挥手 TCP可靠传输机制 第1张

1. 三次握手 (Establishment)

  1. 第一次: 客户端发送 SYN (seq=x) 给服务器,进入 SYN_SENT 状态。
  2. 第二次: 服务器返回 SYN+ACK (seq=y, ack=x+1),进入 SYN_RCVD 状态。
  3. 第三次: 客户端发送 ACK (ack=y+1),双方进入 ESTABLISHED 状态。

2. 四次挥手 (Termination)

  1. 第一次: 客户端发送 FIN,进入 FIN_WAIT_1。
  2. 第二次: 服务器返回 ACK,进入 CLOSE_WAIT,客户端收到后进入 FIN_WAIT_2。
  3. 第三次: 服务器处理完数据,发送 FIN,进入 LAST_ACK。
  4. 第四次: 客户端返回 ACK,进入 TIME_WAIT,经过 2MSL 后彻底关闭。

本文总结了TCP的核心知识点:TCP协议报文格式、TCP三次握手、TCP四次挥手以及TCP可靠传输机制,这些是构建现代互联网的核心基石。