一、TCP/IP 基础概念
这部分是面试的基础题,考察对网络基础的理解:
1. TCP/IP 协议栈分层
| TCP/IP 4 层模型 | 对应 OSI 7 层 | 核心协议 / 功能 |
|---|---|---|
| 应用层 | 应用层 + 表示层 + 会话层 | HTTP/FTP/Telnet,定义应用交互规则 |
| 传输层 | 传输层 | TCP/UDP,端到端数据传输(端口标识) |
| 网络层 | 网络层 | IP/ICMP/ARP,跨网络路由(IP 地址标识) |
| 链路层 | 数据链路层 + 物理层 | 以太网 / PPP,局域网内帧传输(MAC 地址) |
2. TCP vs UDP 核心区别
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠(确认 / 重传 / 排序) | 不可靠(无确认) |
| 传输方式 | 面向字节流 | 面向数据报 |
| 拥塞 / 流量控制 | 支持(滑动窗口 / 拥塞控制) | 不支持 |
| 头部开销 | 20-60 字节 | 8 字节 |
| 适用场景 | 文件传输 / HTTP / 邮件 | 视频 / 语音 / 直播 / 游戏 |
3. 端口范围
- 知名端口:0~1023(如 80=HTTP,443=HTTPS,22=SSH);
- 注册端口:1024~49151;
- 动态 / 私有端口:49152~65535(客户端随机使用)。
二、TCP 核心原理
这部分是考察深度的核心,常问'为什么'和'过程':
1. TCP 三次握手(为什么需要三次?)
过程(服务端先 listen):
- 客户端 → 服务端:SYN(同步序列号),客户端进入 SYN_SENT 状态;
- 服务端 → 客户端:SYN+ACK(确认客户端 SYN,同步自己的序列号),服务端进入 SYN_RCVD 状态;
- 客户端 → 服务端:ACK(确认服务端 SYN),双方进入 ESTABLISHED 状态。
核心问题:为什么不是两次?
- 两次握手无法确认'客户端能收到服务端的报文',可能导致服务端为无效客户端分配资源(半连接队列溢出);
- 三次握手能确保双方收发能力都正常,且完成序列号同步。
2. TCP 四次挥手(为什么需要四次?)
过程:
- 主动关闭方 → 被动方:FIN(请求关闭),主动方进入 FIN_WAIT1;
- 被动方 → 主动方:ACK(确认 FIN),被动方进入 CLOSE_WAIT,主动方进入 FIN_WAIT2;
- 被动方 → 主动方:FIN(被动方数据发送完毕,请求关闭),被动方进入 LAST_ACK;
- 主动方 → 被动方:ACK(确认 FIN),主动方进入 TIME_WAIT,被动方收到后进入 CLOSED;

