Skip to main content

TCP/IP 协议详解

1. TCP 协议特点

1.1 基本特性

  • 面向连接:通信前需要建立连接
  • 可靠传输:确保数据完整性和顺序性
  • 全双工通信:双方可以同时收发数据
  • 面向字节流:把应用层数据看作字节流

1.2 可靠传输机制

  • 序列号和确认号
  • 超时重传
  • 流量控制(滑动窗口)
  • 拥塞控制(慢启动、拥塞避免)

2. TCP 三次握手

2.1 握手过程

Client                Server
| SYN=1, seq=x | 第一次握手
|-------------------->|
| SYN=1, ACK=1 | 第二次握手
| seq=y, ack=x+1 |
|<--------------------|
| ACK=1 | 第三次握手
| ack=y+1 |
|-------------------->|

2.2 为什么是三次握手?

  1. 第一次握手:客户端发送 SYN

    • 客户端:我想要建立连接
    • 服务端:知道客户端有发送能力
  2. 第二次握手:服务端回复 SYN+ACK

    • 服务端:我收到了,我也想建立连接
    • 客户端:知道服务端有收发能力
  3. 第三次握手:客户端发送 ACK

    • 客户端:我收到了,连接建立完成
    • 服务端:知道客户端有接收能力

必须三次的原因

  1. 防止历史连接:

    • 如果是两次握手,可能会出现历史连接请求突然到达服务器,导致错误连接
    • 三次握手可以防止历史连接,因为第三次握手会确认双方的初始序列号
  2. 确认双方的收发能力:

    • 第一次握手:确认客户端的发送能力
    • 第二次握手:确认服务端的接收、发送能力
    • 第三次握手:确认客户端的接收能力

3. TCP 四次挥手

3.1 挥手过程

Client                Server
| FIN=1, seq=u | 第一次挥手
|-------------------->|
| ACK=1, ack=u+1 | 第二次挥手
|<--------------------|
| FIN=1, seq=w | 第三次挥手
|<--------------------|
| ACK=1, ack=w+1 | 第四次挥手
|-------------------->|

3.2 为什么是四次挥手?

  1. 第一次挥手:客户端发送 FIN

    • 客户端:我的数据发完了,想要关闭连接
    • 服务端:知道客户端想要关闭
  2. 第二次挥手:服务端发送 ACK

    • 服务端:我知道了,但我可能还有数据要发送
    • 客户端:进入 FIN_WAIT_2 状态
  3. 第三次挥手:服务端发送 FIN

    • 服务端:我的数据也发完了,可以关闭了
    • 客户端:知道服务端要关闭
  4. 第四次挥手:客户端发送 ACK

    • 客户端:好的,我知道了
    • 服务端:收到确认,可以关闭

必须四次的原因

  1. TCP 是全双工通信:

    • 两个方向的连接可以独立关闭
    • 一方关闭连接后,另一方还可以继续发送数据
  2. 延迟确认机制:

    • 第二次和第三次挥手不能合并
    • 服务端收到 FIN 后,可能还有数据需要发送
    • 必须等数据发送完才能发送 FIN

3.3 TIME_WAIT 状态

  • 持续时间:2MSL(Maximum Segment Lifetime)
  • 作用:
    1. 确保最后一个 ACK 能到达服务端
    2. 防止历史连接中的数据段被新连接接收

4. TCP 可靠传输机制

4.1 序列号和确认号

发送方                接收方
| seq=100, data |
|-------------------->|
| ack=101 |
|<--------------------|

4.2 超时重传

发送方                接收方
| seq=100, data |
| X | // 数据丢失
| 超时重传 |
| seq=100, data |
|-------------------->|

4.3 流量控制

  • 滑动窗口机制
  • 接收方通告窗口大小
  • 防止发送方发送速度过快

4.4 拥塞控制

  1. 慢启动
  2. 拥塞避免
  3. 快重传
  4. 快恢复

2. UDP 协议

特点

  • 无连接
  • 不可靠传输
  • 快速传输
  • 支持广播和多播

应用场景

  • 实时音视频
  • DNS查询
  • 游戏数据包