TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网的基础通信协议套件。它是一组用于在网络上传输数据的规则和标准,使得不同类型的计算机和设备能够相互通信。
TCP/IP 协议诞生于 20 世纪 70 年代,最初是为美国国防部的 ARPAnet 项目开发的。与 OSI 七层模型不同,TCP/IP 采用了更为实用的四层模型,经过几十年的发展,已成为全球互联网的标准协议。
TCP/IP 四层模型
TCP/IP 协议栈分为四个层次,每层负责特定的功能:
graph TB
subgraph 应用层["应用层 (Application Layer)"]
A1["HTTP / FTP / SMTP / DNS"]
end
subgraph 传输层["传输层 (Transport Layer)"]
T1["TCP 🔗 可靠连接"]
T2["UDP ⚡ 高效无连接"]
end
subgraph 网络层["网络层 (Internet Layer)"]
N1["IP 路由与寻址"]
N2["ARP / ICMP"]
end
subgraph 接口层["网络接口层 (Link Layer)"]
L1["Ethernet / Wi-Fi / PPP"]
L2["MAC 地址"]
end
A1 --> T1
A1 --> T2
T1 --> N1
T2 --> N1
N1 --> L1
N2 -.-> L1
style 应用层 fill:#e3f2fd
style 传输层 fill:#e8f5e9
style 网络层 fill:#fff3e0
style 接口层 fill:#fce4ec
图1:TCP/IP 四层模型与核心协议
各层通过 接口 传递数据,每层只与相邻层交互,实现高度解耦。
sequenceDiagram
participant 浏览器
participant 操作系统 as 传输层
participant 路由器 as 网络层
participant 交换机 as 接口层
浏览器->>操作系统: 应用层数据
操作系统->>操作系统: 添加TCP/UDP头部
操作系统->>路由器: IP数据包
路由器->>交换机: 帧封装
Note over 交换机: 物理信号传输
图2:数据在各层之间的封装与传递过程
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。
TCP 建立连接需要经过三次握手(Three-Way Handshake),这是 TCP 协议最核心的机制之一。
sequenceDiagram
participant C as 客户端
participant S as 服务器
C->>S: SYN (seq=x)
Note over C: SYN_SENT状态
Note over S: SYN_RECV状态
S->>C: SYN+ACK (seq=y, ack=x+1)
C->>S: ACK (ack=y+1)
Note over C: ESTABLISHED
Note over S: ESTABLISHED
C->>S: 数据传输开始 →
图3:TCP 三次握手时序图
**第一次握手(SYN):**
**第二次握手(SYN+ACK):**
**第三次握手(ACK):**
- 第一次握手:客户端的发送能力、服务器的接收能力正常
- 第二次握手:服务器的发送和接收能力、客户端的接收能力正常
- 第三次握手:客户端的发送能力、服务器的接收能力再次确认
- 如果只有两次握手,已失效的 SYN 包可能导致服务器错误建立连接
- 三次握手可以确保双方都准备好
- TCP 是可靠传输,需要序列号来保证数据顺序
- 三次握手让双方都知道对方的初始序列号
TCP 通过以下机制保证可靠性:
TCP 关闭连接需要经过四次挥手:
sequenceDiagram
participant A as 主动关闭方
participant B as 被动关闭方
A->>B: FIN (seq=u)
Note over A: FIN_WAIT_1
B->>A: ACK (ack=u+1)
Note over B: CLOSE_WAIT
Note over A: FIN_WAIT_2
B->>A: FIN (seq=w)
Note over B: LAST_ACK
A->>B: ACK (ack=w+1)
Note over A: TIME_WAIT (2MSL)
Note over B: 完全关闭
Note over A: 完全关闭
图4:TCP 四次挥手时序图
stateDiagram-v2
[*] --> CLOSED
CLOSED --> LISTEN: 被动打开
LISTEN --> SYN_SENT: 主动打开
SYN_SENT --> ESTABLISHED: 收到SYN+ACK
SYN_SENT --> CLOSED: 超时/RST
LISTEN --> SYN_RCVD: 收到SYN
SYN_RCVD --> ESTABLISHED: 收到ACK
SYN_RCVD --> FIN_WAIT_1: 主动关闭
ESTABLISHED --> FIN_WAIT_1: 主动关闭
ESTABLISHED --> CLOSE_WAIT: 被动关闭
FIN_WAIT_1 --> FIN_WAIT_2: 收到ACK
FIN_WAIT_2 --> TIME_WAIT: 收到FIN
TIME_WAIT --> CLOSED: 2MSL超时
CLOSE_WAIT --> LAST_ACK: 发送FIN
LAST_ACK --> CLOSED: 收到ACK
图5:TCP 连接状态转换图
TCP 的可靠特性使其适用于需要确保数据完整传输的应用,如网页浏览、文件传输、电子邮件等。
TCP/IP 协议族包含众多应用层协议:
TCP/IP 协议是现代互联网的基石,理解 TCP/IP 对于网络编程和系统管理至关重要。通过学习 TCP/IP,你将能够更好地理解网络通信原理,排查网络问题,甚至开发自己的网络应用。
想要深入了解具体的协议,可以继续阅读我们的HTTP 协议详解 和 HTTPS 协议详解 教程,也可以尝试使用我们的 子网掩码计算器 来练习 IP 地址计算。
延伸阅读:UDP 协议详解、WebSocket 教程、DNS 协议详解