TCP/IP 协议基础
发表时间:2026-06-15 | 分类:网络编程
协议栈分层
TCP/IP 协议栈分为四层,从上到下分别是:
| 层 | 协议 | 数据单元 | 作用 |
|---|---|---|---|
| 应用层 | HTTP、FTP、DNS | 消息 | 应用程序间通信 |
| 传输层 | TCP、UDP | 段/数据报 | 端到端可靠传输 |
| 网络层 | IP、ICMP、ARP | 数据包 | 寻址和路由 |
| 链路层 | 以太网、WiFi | 帧 | 物理介质传输 |
TCP 三次握手
TCP 建立连接需要三次握手,确保双方收发能力正常:
客户端 服务端
│ │
│──── SYN (seq=x) ────────────▶│ 1. 客户端发起连接
│ │
│◀─── SYN+ACK (seq=y, ack=x+1)│ 2. 服务端确认并回应
│ │
│──── ACK (ack=y+1) ──────────▶│ 3. 客户端确认
│ │
│ 连接建立,开始传输数据 │
TCP 四次挥手
断开连接需要四次挥手,因为 TCP 是全双工的,两个方向需要分别关闭:
客户端 服务端
│ │
│──── FIN (seq=u) ────────────▶│ 1. 客户端:我没数据要发了
│ │
│◀─── ACK (ack=u+1) ──────────│ 2. 服务端:知道了
│ │
│◀─── FIN (seq=v) ────────────│ 3. 服务端:我也没数据了
│ │
│──── ACK (ack=v+1) ──────────▶│ 4. 客户端:好的,断开
│ │
为什么是四次而不是三次?因为服务端收到客户端的 FIN 后,可能还有数据没发完,所以 ACK 和 FIN 分开发送。
TCP 与 UDP 对比
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠(确认+重传) | 不可靠(尽力传输) |
| 顺序 | 保证顺序 | 不保证 |
| 速度 | 较慢 | 较快 |
| 头部大小 | 20-60 字节 | 8 字节 |
| 典型应用 | HTTP、FTP、SSH | DNS、视频直播、游戏 |
常见端口号
22— SSH53— DNS80— HTTP443— HTTPS3306— MySQL8080— HTTP 代理/开发服务