深入浅出TCP与UDP:三次握手、四次挥手及面试通关指南
一、TCP三次握手:像租房签约的严谨流程 🏠
情景模拟:客户端(租客)与服务器(房东)建立信任关系
抓包关键字段:SYN
(同步请求)、ACK
(确认应答)、Seq
(序列号)
三次握手流程
- 第一次握手 - 租客询价
客户端发送:SYN=1, Seq=J状态变化:客户端进入 SYN_SENT
- 第二次握手 - 房东报价
服务端回复:SYN=1, ACK=J+1, Seq=K
状态变化:服务端进入 SYN_RCVD
- 第三次握手 - 租客确认
客户端发送:ACK=K+1, Seq=J+1
状态变化:双方进入 ESTABLISHED
❓高频面试题
Q:为什么不能两次握手?
A:防止历史连接干扰(想象网络延迟导致旧SYN包突然到达,服务端误开新连接)
二、TCP四次挥手:像分手告别的双向确认 💔
情景模拟: 客户端(提出分手)与服务端(回应分手)终止连接
关键字段: FIN(终止连接)、ACK(确认应答)
四次挥手流程
1. 客户端发送 FIN=1, Seq=U → 客户端进入 FIN_WAIT_1
2. 服务端回复 ACK=U+1, Seq=V → 服务端进入 CLOSE_WAIT
3. 服务端发送 FIN=1, ACK=U+1, Seq=W → 服务端进入 LAST_ACK
4. 客户端回复 ACK=W+1, Seq=U+1 → 客户端进入 TIME_WAIT(2MSL后关闭)
🔥 必考知识点
TIME_WAIT 的三大使命:
- 确保服务端收到最终ACK(否则重传FIN)
- 让网络中残留数据包失效(防止新旧连接混淆)
- 等待时间:2倍MSL(默认60秒,可通过sysctl调整)
三、UDP:像群发通知的极简主义 ✉️
核心特点速记:
- 无连接:无需握手,直接发送数据
- 无保障:不保证顺序、不重传丢失包
- 低延迟:头部仅8字节(TCP至少20字节)
协议格式:
+--------+--------+--------+--------+
| 源端口 | 目的端口 | 长度 | 校验和 |
+--------+--------+--------+--------+
| 数据(最大65507字节) |
典型应用场景:
- 实时视频通话(Zoom/Skype)
- DNS域名解析查询
- IoT传感器数据上报
四、TCP vs UDP 对比宝典 📚
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(三次握手) | 无连接 |
可靠性 | 可靠传输(自动重传) | 尽力而为 |
流量控制 | 滑动窗口机制 | 无 |
拥塞控制 | 慢启动/快重传/快恢复 | 无 |
头部开销 | 最小20字节 | 8字节 |
传输顺序 | 保证顺序 | 不保证 |
适用场景 | 文件传输/网页加载 | 直播流媒体/在线游戏 |
💡 记忆口诀:
"TCP如挂号信,UDP似群发短信;前者重安全,后者拼速度"
五、8大必刷面试题 🚀
- TCP为什么需要流量控制?如何实现?
答:防止接收方缓冲区溢出,通过滑动窗口动态调整发送速率。
- 如果第三次握手丢失会发生什么?
答:服务端未收到ACK会重传SYN+ACK,客户端在超时后重新发送ACK。
- UDP如何实现可靠传输?
答:需应用层自己实现确认机制(如QUIC协议),参考TCP的重传策略。
- CLOSE_WAIT状态过多怎么排查?
答:检查服务端代码是否未正确关闭socket(如忘记调用close())。
- TCP快速打开(TFO)的原理是什么?
答:在SYN包中携带数据,减少一次RTT时间,需客户端和服务端同时支持。
- TCP的Keep-Alive和HTTP的Keep-Alive有什么区别?
答:TCP层的Keep-Alive用于检测连接存活,HTTP层的用于复用连接传输多个请求。
- 为什么DNS主要使用UDP协议?
答:查询响应数据量小,UDP无连接特性更高效,失败时可降级使用TCP。
- 列举三个TCP首部字段并说明作用
答:
序列号(Seq):标识数据包顺序
确认号(Ack):期望收到的下一个字节编号
窗口大小(Window):接收方可用缓冲区空间
六、实战工具推荐 🔧
- Wireshark抓包分析
tcp.port == 80 && tcp.flags.syn == 1 # 过滤TCP握手包
- netcat模拟TCP/UDP通信
# TCP服务端
nc -l 8080
# UDP客户端
nc -u 192.168.1.100 8080
- TCP状态查询(Linux)
ss -tunap | grep 'TIME-WAIT' # 查看TIME_WAIT连接数
掌握TCP/IP的核心原理,就像获得打开网络世界的万能钥匙。下次面试官问"为什么是三次握手",你可以微笑着反问:“您想听技术解析还是生活比喻?” 💪
参考文章:https://www.cnblogs.com/renyz/p/11233858.html