TCP/IP 协议详解
1. TCP/IP 协议体系
TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网的基础协议族,定义了数据如何在网络中传输。TCP/IP 采用四层模型,与 OSI 七层模型对应关系如下:
| TCP/IP 四层 | OSI 七层 | 主要协议 | 设备 |
|---|---|---|---|
| 应用层 | 应用层、表示层、会话层 | HTTP, FTP, SMTP, DNS | 网关 |
| 传输层 | 传输层 | TCP, UDP | 网关 |
| 网络层 | 网络层 | IP, ICMP, ARP | 路由器 |
| 网络接口层 | 数据链路层、物理层 | Ethernet, PPP | 交换机、网卡 |
核心思想:TCP/IP 是一种"端到端"的协议,数据从源主机应用层逐层封装,到达目标主机后逐层解封装,中间经过的路由器只处理网络层数据。
2. TCP 协议详解
TCP 头部结构
flowchart LR
H["TCP Header"]
H --> S["Source Port (16bit)"]
H --> D["Dest Port (16bit)"]
H --> SN["Sequence Number"]
H --> AN["Ack Number"]
H --> FL["Flags SYN/ACK/FIN/RST"]
2.1 TCP 头部结构
TCP 头部包含源端口、目标端口、序列号、确认号、标志位等关键信息:
TCP 头部(20-60 字节):
+----------------+----------------+----------------+----------------+
| 源端口 (16) | 目标端口 (16) | |
+----------------+----------------+----------------+----------------+
| 序列号 (32) |
+----------------+----------------+----------------+----------------+
| 确认号 (32) |
+----------------+----+--------+----+----+----+----+----+----------------+
| 数据偏移 (4) |保留| Flags | 窗口大小 (16) |
+----------------+----+--------+----+----+----+----+----+----------------+
| 校验和 (16) | 紧急指针 (16) |
+----------------+----------------+----------------+----------------+
| 选项 (可变) |
+----------------+----------------+----------------+----------------+
2.2 TCP 标志位
| 标志位 | 名称 | 说明 |
|---|---|---|
| SYN | 同步标志 | 建立连接时使用,序列号同步 |
| ACK | 确认标志 | 确认号字段有效 |
| FIN | 结束标志 | 关闭连接 |
| RST | 复位标志 | 重置连接 |
| PSH | 推送标志 | 立即交付给应用层 |
| URG | 紧急标志 | 紧急指针有效 |
3. 三次握手与四次挥手
TCP 三次握手详细时序
sequenceDiagram
participant C as 客户端
participant S as 服务器
C->>S: SYN seq=x
S->>C: SYN+ACK seq=y ack=x+1
C->>S: ACK ack=y+1
Note over C,S: ESTABLISHED
3.1 三次握手(建立连接)
TCP 通过三次握手建立可靠连接:
1
客户端发送 SYN
SYN=1, seq=x
-->
2
服务器返回 SYN+ACK
SYN=1, ACK=1, seq=y, ack=x+1
-->
3
客户端发送 ACK
ACK=1, seq=x+1, ack=y+1
为什么需要三次?三次握手的目的是同步双方的序列号。客户端发送 SYN 并得到确认后,才能确认双方的发送和接收能力都正常。三次是建立连接的最小次数。
3.2 四次挥手(关闭连接)
TCP 通过四次挥手可靠关闭连接:
1
主动方发 FIN
FIN=1, seq=u
-->
2
被动方回 ACK
ACK=1, seq=v, ack=u+1
(此时主动方不再发送数据,但可以接收数据)
3
被动方发 FIN
FIN=1, ACK=1, seq=w, ack=u+1
-->
4
主动方回 ACK
ACK=1, seq=u+1, ack=w+1
TIME_WAIT 状态:主动关闭方在发送最后一个 ACK 后会进入 TIME_WAIT 状态,等待 2MSL(最大报文段生存时间)确保被动方收到 ACK。如果 ACK 丢失,被动方会重发 FIN。
4. IP 协议基础
4.1 IPv4 地址分类
| 类别 | 地址范围 | 网络数 | 主机数 | 用途 |
|---|---|---|---|---|
| A 类 | 1.0.0.0 - 126.255.255.255 | 126 | 16,777,214 | 大型网络 |
| B 类 | 128.0.0.0 - 191.255.255.255 | 16,384 | 65,534 | 中型网络 |
| C 类 | 192.0.0.0 - 223.255.255.255 | 2,097,152 | 254 | 小型网络 |
| D 类 | 224.0.0.0 - 239.255.255.255 | - | - | 多播 |
| E 类 | 240.0.0.0 - 255.255.255.255 | - | - | 保留 |
4.2 私有 IP 地址
私有地址可以在内网使用,不能直接访问互联网:
- A 类私有:10.0.0.0 - 10.255.255.255(约 1677 万)
- B 类私有:172.16.0.0 - 172.31.255.255(约 65 万)
- C 类私有:192.168.0.0 - 192.168.255.255(约 6.5 万)
4.3 子网掩码
子网掩码用于划分网络地址和主机地址:
示例:192.168.1.100 / 255.255.255.0
二进制:
IP: 11000000.10101000.00000001.01100100
子网掩码: 11111111.11111111.11111111.00000000
AND 运算: ------------------------------------
网络地址: 11000000.10101000.00000001.00000000 = 192.168.1.0
主机地址: 00000000.00000000.00000000.01100100 = 100
子网内可用 IP:192.168.1.1 - 192.168.1.254(共 254 个)
5. TCP 与 UDP 对比
| 特性 | TCP | UDP | 优劣 |
|---|---|---|---|
| 连接类型 | 面向连接 | 无连接 | TCP 更可靠 |
| 可靠性 | 可靠(重传、确认) | 不可靠 | TCP |
| 传输顺序 | 按序到达 | 不保证顺序 | TCP |
| 传输速度 | 较慢 | 较快 | UDP |
| 头部大小 | 20-60 字节 | 8 字节 | UDP |
| 资源消耗 | 较大 | 较小 | UDP |
| 适用场景 | HTTP, HTTPS, FTP, SMTP | DNS, DHCP, VoIP, 直播 | - |
TCP vs UDP 特性对比
flowchart LR
TCP["TCP
面向连接
可靠传输
流量控制
拥塞控制"]
UDP["UDP
无连接
不可靠
无控制
高速低延迟"]
style TCP fill:#3498db,color:#fff
style UDP fill:#27ae60,color:#fff
6. 实际应用场景
6.1 Web 访问(HTTP/HTTPS)
浏览器 --> TCP 80/443 --> Web 服务器
| 三次握手建立连接
| HTTP 请求/响应
| 四次挥手关闭连接
6.2 DNS 解析
DNS 同时使用 TCP 和 UDP:
- UDP 53:普通查询(小于 512 字节)
- TCP 53:区域传输、大于 512 字节的响应
6.3 选择 TCP 还是 UDP?
选择 TCP 当:
- 数据可靠性比速度更重要
- 需要保证数据完整性和顺序
- 如:网页访问、邮件发送、文件传输
选择 UDP 当:
- 速度比可靠性更重要
- 可以容忍少量数据丢失
- 如:视频流、在线游戏、VoIP