【计算机基础速成】第七课:TCP、UDP、三次握手与四次挥手

4 小时前
2

【计算机基础速成】第七课: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 的区别

这是必背题。

对比项TCPUDP
连接方式面向连接无连接
可靠性可靠传输不保证可靠
顺序保证顺序不保证顺序
开销较大较小
速度相对慢一些相对快一些
适用场景文件传输、网页请求音视频、直播、游戏

怎么理解“面向连接”

可以简单理解为:

  • 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 三次握手的大致过程

你现在先记住最简化版本:

  1. 客户端说:我想建立连接
  2. 服务端说:我收到了,我也同意建立连接
  3. 客户端说:我也收到了,可以开始了

这三步完成后,双方才认为连接建立成功。


8.2 用更技术一点的话说

第一次握手

客户端向服务端发送 SYN,请求建立连接。

第二次握手

服务端收到后,回复 SYN + ACK,表示:

  • 我收到了你的请求
  • 我也同意建立连接

第三次握手

客户端收到后,再发送 ACK,表示:

  • 我收到了你的响应
  • 双方可以正式通信了

9. 为什么是三次握手,不是两次

这是最经典追问题。

最核心的理解

三次握手的本质,是为了让双方都确认:

  • 自己能发
  • 自己能收
  • 对方也能发
  • 对方也能收

如果只有两次,客户端无法确认服务端是否收到了自己对“连接建立成功”的最终确认,也无法充分确认双方的收发能力都正常。

面试标准答法

三次握手的目的,是让通信双方都确认彼此的发送和接收能力正常,从而建立可靠连接。如果只有两次握手,服务端发出确认后,无法确认客户端是否成功收到,也就无法确保双方对连接状态达成一致。

你可以更口语化地说

两次握手只能证明:

  • 客户端能发
  • 服务端能收
  • 服务端能发

但还不能完全证明:

  • 客户端能收

第三次握手就是把这件事补齐。


10. 四次挥手是什么

TCP 断开连接时,通常是:

四次挥手

因为 TCP 是全双工通信,双方都可以独立关闭自己的发送通道。


10.1 四次挥手的大致过程

还是先记最简版本:

  1. 客户端说:我这边没数据要发了
  2. 服务端说:我知道了
  3. 服务端说:我这边也发完了
  4. 客户端说:我知道了,连接可以关了

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 口头复述题

请你尝试不看讲义回答:

  1. TCP 和 UDP 有什么区别?
  2. TCP 为什么可靠?
  3. 三次握手的过程是什么?
  4. 为什么是三次握手,不是两次?
  5. 四次挥手的过程是什么?
  6. 为什么挥手通常是四次?
  7. TIME_WAIT 有什么作用?

17.2 今日最低完成标准

如果今天时间不多,至少完成下面任务:

  1. 背会本课 6 张最小记忆卡片
  2. 能完整回答 TCP 和 UDP 的区别
  3. 能口头讲清三次握手和四次挥手
  4. 记住 TIME_WAIT 的两个作用

18. 下一课预告

第八课:HTTP、HTTPS、状态码与常见应用层问题

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...