【计算机基础速成】第七课:TCP、UDP、三次握手与四次挥手
1. 这节课的目标
这一课是计算机网络面试中的超级高频区。
面试官非常喜欢问:
- TCP 和 UDP 有什么区别?
- TCP 为什么可靠?
- TCP 三次握手是什么?
- 为什么是三次握手,不是两次?
- 四次挥手是什么?
- 为什么挥手通常是四次?
TIME_WAIT有什么作用?
这节课学完后,你至少要做到:
- 能说清 TCP 和 UDP 的区别
- 能解释 TCP 为什么是可靠传输
- 能说清三次握手的大致过程
- 能说清为什么不是两次握手
- 能说清四次挥手的大致过程
- 能说出
TIME_WAIT的常见作用
2. 什么是 TCP 和 UDP
它们都属于:
传输层协议
也就是说,它们都负责“端到端传输”这件事。
但它们的设计目标不一样。
3. TCP 是什么
一句话理解
TCP 是面向连接、可靠传输的协议。
面试标准答法
TCP 是传输层的一种面向连接、可靠传输的协议,它能够保证数据按顺序、完整地到达目标端,因此常用于对可靠性要求较高的场景。
4. UDP 是什么
一句话理解
UDP 是无连接、不保证可靠传输的协议。
面试标准答法
UDP 是传输层的一种无连接协议,它不保证数据一定到达,也不保证顺序,但开销较小、传输效率更高,适合对实时性要求高的场景。
5. TCP 和 UDP 的区别
这是必背题。
| 对比项 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠传输 | 不保证可靠 |
| 顺序 | 保证顺序 | 不保证顺序 |
| 开销 | 较大 | 较小 |
| 速度 | 相对慢一些 | 相对快一些 |
| 适用场景 | 文件传输、网页请求 | 音视频、直播、游戏 |
怎么理解“面向连接”
可以简单理解为:
- TCP 通信前通常要先建立连接
- UDP 通信前不需要先建立连接
6. 面试怎么回答“TCP 和 UDP 有什么区别”
标准回答
TCP 是面向连接的可靠传输协议,在传输过程中能够保证数据按序、完整到达,但开销相对更大;UDP 是无连接协议,不保证可靠性和顺序,但开销较小、效率更高,适合实时性要求较高的场景。
7. TCP 为什么可靠
这是面试官非常爱追问的问题。
你现在不需要把所有底层细节都吃透,但一定要会说几个关键点。
核心原因
TCP 之所以可靠,常见原因包括:
- 有连接管理
- 有确认应答机制
- 有重传机制
- 有顺序控制
- 有流量控制
- 有拥塞控制
你先抓住前三个就够用了
7.1 确认应答
发送方发出数据后,接收方会反馈“我收到了”。
如果发送方长时间没收到确认,就可能认为数据丢了。
7.2 重传机制
如果数据包丢了,或者确认没收到,TCP 可以重新发送。
7.3 顺序控制
TCP 会对数据进行编号,从而保证接收方最终能按顺序组装数据。
7.4 面试标准答法
TCP 之所以可靠,主要是因为它在传输过程中引入了连接管理、确认应答、超时重传、顺序控制,以及流量控制和拥塞控制等机制,从而尽量保证数据能够按序、完整地到达目标端。
8. 什么是三次握手
TCP 在正式传输数据之前,通常需要先建立连接。
建立连接时最经典的过程就是:
三次握手
8.1 三次握手的大致过程
你现在先记住最简化版本:
- 客户端说:我想建立连接
- 服务端说:我收到了,我也同意建立连接
- 客户端说:我也收到了,可以开始了
这三步完成后,双方才认为连接建立成功。
8.2 用更技术一点的话说
第一次握手
客户端向服务端发送 SYN,请求建立连接。
第二次握手
服务端收到后,回复 SYN + ACK,表示:
- 我收到了你的请求
- 我也同意建立连接
第三次握手
客户端收到后,再发送 ACK,表示:
- 我收到了你的响应
- 双方可以正式通信了
9. 为什么是三次握手,不是两次
这是最经典追问题。
最核心的理解
三次握手的本质,是为了让双方都确认:
- 自己能发
- 自己能收
- 对方也能发
- 对方也能收
如果只有两次,客户端无法确认服务端是否收到了自己对“连接建立成功”的最终确认,也无法充分确认双方的收发能力都正常。
面试标准答法
三次握手的目的,是让通信双方都确认彼此的发送和接收能力正常,从而建立可靠连接。如果只有两次握手,服务端发出确认后,无法确认客户端是否成功收到,也就无法确保双方对连接状态达成一致。
你可以更口语化地说
两次握手只能证明:
- 客户端能发
- 服务端能收
- 服务端能发
但还不能完全证明:
- 客户端能收
第三次握手就是把这件事补齐。
10. 四次挥手是什么
TCP 断开连接时,通常是:
四次挥手
因为 TCP 是全双工通信,双方都可以独立关闭自己的发送通道。
10.1 四次挥手的大致过程
还是先记最简版本:
- 客户端说:我这边没数据要发了
- 服务端说:我知道了
- 服务端说:我这边也发完了
- 客户端说:我知道了,连接可以关了
10.2 用更技术一点的话说
第一次挥手
客户端发送 FIN,表示自己没有数据要发了,想关闭连接。
第二次挥手
服务端回复 ACK,表示我知道你想关了。
第三次挥手
等服务端自己也没有数据要发时,再发送 FIN。
第四次挥手
客户端回复 ACK,表示我知道了,连接关闭流程完成。
11. 为什么挥手通常是四次
核心原因
因为 TCP 是全双工的,双方关闭连接是相对独立的。
服务端收到客户端的关闭请求时,可能只是表示:
- 你这边不发了我知道了
但这不代表:
- 我这边也已经发完了
所以服务端往往需要先回一个 ACK,等自己数据发完后,再单独发一个 FIN。
面试标准答法
TCP 挥手通常是四次,是因为 TCP 是全双工通信。客户端和服务端都需要分别关闭自己的发送通道,因此服务端在收到客户端的 FIN 后,往往先回 ACK,等自己数据发送完毕后再发送 FIN,所以通常需要四次。
12. 什么是 TIME_WAIT
这个也是超高频追问题。
你不用背非常底层的版本,先记住两个核心作用就够了。
12.1 一句话理解
TIME_WAIT 是连接主动关闭方在最后一次确认之后进入的一种等待状态。
12.2 为什么需要 TIME_WAIT
作用 1:确保最后一个 ACK 能让对方收到
如果最后一个 ACK 丢了,对方可能还会重发 FIN。
这时主动关闭方如果还保留 TIME_WAIT 状态,就还能重新发送 ACK。
作用 2:避免旧连接中的延迟报文影响新连接
如果没有这段等待时间,旧连接里迟到的数据包可能混进后续新连接里,造成问题。
面试标准答法
TIME_WAIT 的主要作用有两个:一是确保最后的 ACK 能被对方接收,如果对方没有收到 FIN 对应的确认,可以重发;二是防止旧连接中的延迟报文影响后续的新连接。
13. TIME_WAIT 为什么常出现在主动关闭方
简单理解
谁最后发出 ACK,谁就通常进入 TIME_WAIT。
而最后这个 ACK 往往由主动关闭连接的一方发出,所以它更常进入 TIME_WAIT。
14. 一套可直接背的完整答法
如果面试官问:
你说一下 TCP 和三次握手。
你可以这样答:
TCP 是传输层中面向连接、可靠传输的协议,
它能够通过确认应答、超时重传、顺序控制、流量控制和拥塞控制等机制,
尽量保证数据按序、完整到达目标端。
在正式传输数据前,TCP 通常要通过三次握手建立连接。
第一次由客户端发送 SYN,第二次服务端返回 SYN+ACK,
第三次客户端返回 ACK,目的是让双方都确认彼此的发送和接收能力正常。
之所以不是两次握手,是因为两次不足以让双方对连接状态达成可靠一致。如果面试官再问挥手,你可以接着说:
TCP 断开连接通常需要四次挥手,
因为 TCP 是全双工通信,双方都需要分别关闭自己的发送通道。
主动关闭方先发送 FIN,被动方先回 ACK,
等自己数据发完后再发送 FIN,最后由对方回 ACK。
主动关闭方通常会进入 TIME_WAIT,
主要是为了确保最后一个 ACK 能被对方收到,并避免旧连接报文影响新连接。15. 本课高频面试题
15.1 TCP 和 UDP 有什么区别
标准回答
TCP 是面向连接的可靠传输协议,能够保证数据按序、完整到达,但开销相对较大;UDP 是无连接协议,不保证可靠性和顺序,但开销更小、效率更高,更适合实时性要求高的场景。
15.2 TCP 为什么可靠
标准回答
TCP 之所以可靠,是因为它引入了连接管理、确认应答、超时重传、顺序控制,以及流量控制和拥塞控制等机制,从而尽量保证数据按序、完整到达目标端。
15.3 三次握手是什么
标准回答
三次握手是 TCP 建立连接的过程。客户端先发送 SYN,服务端返回 SYN+ACK,客户端再返回 ACK。通过这三次交互,双方可以确认彼此的发送和接收能力正常,从而建立可靠连接。
15.4 为什么是三次握手,不是两次
标准回答
三次握手是为了让双方都确认彼此的发送和接收能力正常,并对连接状态达成一致。如果只有两次握手,服务端无法确认客户端是否成功收到自己的确认,也就无法可靠地建立连接。
15.5 四次挥手是什么
标准回答
四次挥手是 TCP 断开连接的过程。主动关闭方先发送 FIN,被动关闭方返回 ACK;等被动关闭方也没有数据发送后,再发送 FIN,最后由主动关闭方返回 ACK。
15.6 为什么挥手通常是四次
标准回答
因为 TCP 是全双工通信,双方都需要分别关闭自己的发送通道。服务端收到对方的关闭请求后,通常只能先确认,等自己数据发送完毕后再单独发起关闭,所以一般是四次挥手。
15.7 TIME_WAIT 有什么作用
标准回答
TIME_WAIT 的主要作用有两个:一是确保最后一个 ACK 能让对方收到,二是防止旧连接中的延迟报文影响新连接。
16. 本课最小记忆卡片
卡片 1
- TCP:面向连接,可靠传输
- UDP:无连接,不保证可靠
卡片 2
- TCP 可靠:确认应答、重传、顺序控制
卡片 3
- 三次握手
- SYN
- SYN + ACK
- ACK
卡片 4
- 三次握手目的:确认双方收发能力正常
卡片 5
- 四次挥手
- FIN
- ACK
- FIN
- ACK
卡片 6
TIME_WAIT:确保最后 ACK、生效并隔离旧报文
17. 课后练习
17.1 口头复述题
请你尝试不看讲义回答:
- TCP 和 UDP 有什么区别?
- TCP 为什么可靠?
- 三次握手的过程是什么?
- 为什么是三次握手,不是两次?
- 四次挥手的过程是什么?
- 为什么挥手通常是四次?
TIME_WAIT有什么作用?
17.2 今日最低完成标准
如果今天时间不多,至少完成下面任务:
- 背会本课 6 张最小记忆卡片
- 能完整回答 TCP 和 UDP 的区别
- 能口头讲清三次握手和四次挥手
- 记住
TIME_WAIT的两个作用
18. 下一课预告
第八课:HTTP、HTTPS、状态码与常见应用层问题