计算机网络 · 第 5 章

第 5 章 传输层:TCP 与 UDP

TCP 与 UDP 对比;三次握手与四次挥手的过程与原因;端口号必背表;可靠传输与流量控制机制。

5.1 传输层干什么:端到端 + 端口号

网络层把包送到"主机",传输层再把数据送到主机里的"某个程序"。

  • 端到端传输——网络层只管送到主机(点到点),传输层负责进程到进程(端到端)。
  • 端口寻址——一台主机上跑着浏览器、微信、游戏,IP 只能找到机器,端口号才能找到具体程序:IP + 端口 才能唯一确定一个通信的端点。
  • 复用与分用——多个程序共用一条网络通道(发送时复用),收到数据后再按端口分给对应程序(分用)。
  • 差错控制 / 流量控制——TCP 的拿手好戏(UDP 则完全不管)。

端口号是 16 位,取值 0–65535,分三类:

范围名称说明
0 – 1023熟知端口给固定服务用,必须背(见下表)
1024 – 49151注册端口登记给一般应用
49152 – 65535动态/临时端口客户端发起连接时临时分配

熟知端口必背表(选择题常客):

端口协议/服务端口协议/服务
20 / 21FTP(数据 / 控制)53DNS
22SSH67 / 68DHCP(服务器 / 客户端)
23Telnet80HTTP
25SMTP(发邮件)110POP3(收邮件)
143IMAP443HTTPS

5.2 TCP vs UDP:必须能张口说出三条区别

两者都是传输层协议,但性格完全相反。

TCPUDP
连接面向连接(先三次握手)无连接,直接发
可靠性可靠:确认、重传、按序到达不可靠:发出去不保证到达、不保证顺序
速度/开销慢、开销大(头部 20 字节起)快、开销小(头部固定 8 字节)
数据单位报文段(segment)用户数据报(datagram)
适用场景文件传输、网页浏览、收发邮件——不许丢的场合视频直播、语音通话、DNS 查询——快了再说的场合
一句话记忆
  • TCP 求稳,UDP 求快。直播宁愿糊一下也不能卡(丢几帧没关系),传文件丢一个字节都不行。
  • DNS 查询用 UDP(一次问答就结束,不需要建连接);但 DNS 区域传送用 TCP。
课堂练习(3 题)
  1. 视频会议适合用 TCP 还是 UDP?为什么? 答:UDP。实时性优先,偶发丢包重传反而造成更大延迟。
  2. UDP 的头部是多少字节? 答:固定 8 字节(TCP 头部最少 20 字节)。
  3. 列举 TCP 保证可靠传输的两个机制。 答:确认应答与超时重传(另外还有序号确保按序、滑动窗口做流量控制等,答出任意两个即可)。

5.3 三次握手:为什么是三次不是两次

过程要会写,原因要能说——两问都是考点。

TCP 三次握手时序图:SYN、SYN+ACK、ACK
图 5-1 TCP 三次握手:双向各确认一次,才能确定「双方都能收发」
为什么必须三次?
  • 核心目的:双方都确认"自己的发送能力和对方的接收能力"都正常。
  • 如果只有两次:客户端发了连接请求,服务器同意后就认为建立了; 但一个滞留的老请求可能突然到达服务器,服务器误以为新连接又同意,白白建立一条没人用的连接。 第三次握手让客户端有机会对"意外的同意"置之不理。
易错
  • 握手包里 SYN 和 ACK 是标志位(等于 1 表示有效),不要和序号搞混。
  • "三次握手为了可靠传输"太笼统——要答出"确认双方收发能力 / 防止失效的旧请求建立连接"。
课堂练习(2 题)
  1. 三次握手中第二次握手报文包含哪些标志?方向是谁发给谁? 答:服务器 → 客户端,含 SYN=1 和 ACK=1,带着自己的序号 y 和对 x 的确认。
  2. 为什么不用两次握手就建立连接? 答:防止已失效的旧连接请求报文突然到达服务器,导致服务器单方面建立无效连接、浪费资源;三次握手保证双方都确认了对方的收发能力。

5.4 四次挥手:为什么多了一次

记住"双向都要关"这个本质,四次的原因自然顺出来。

客户端                              服务器
  ── FIN=1 ─────────────────────→     ① 我没数据要发了,想关
  ←──────── ACK=1 ──────────────────   ② 知道了(但可能还有数据没发完)
  ←──────── FIN=1 ──────────────────   ③ 我的数据也发完了,可以关了
  ── ACK=1 ────────────────────→     ④ 收到,再见(等 2MSL 后彻底关闭)
为什么挥手要四次(比握手多一次)?
  • TCP 连接全双工——两个方向要分别关闭。
  • 收到对方的 FIN 后,本方向可能还有数据没发完,所以先回一个 ACK 表示"知道你要关了", 等自己数据发完再单独发 FIN。ACK 和 FIN 分开发 = 多了一次。
顺带认识:TIME_WAIT
  • 主动关闭方最后要等 2MSL 才真正关闭,确保最后那个 ACK 能到达对方、也让旧报文在网络中消失。
课堂练习(2 题)
  1. 四次挥手比三次握手多一次的根本原因是什么? 答:连接是全双工的,两个方向分别关闭;且收到对方 FIN 后己方可能还有数据要发,ACK 与自己的 FIN 不能合并,故需要四次。
  2. 为什么主动关闭方要等待 2MSL? 答:确保最后的 ACK 能送达对方(对方没收到会重发 FIN);同时让本次连接的所有旧报文段在网络中消逝,避免影响新连接。

5.5 TCP 的可靠性是怎么做到的

TCP 报文段首部结构
图 5-2 TCP 首部:序号/确认号为什么能保证可靠 + 6 个标志位各管什么

概念站住即可:确认、重传、序号、窗口、拥塞控制。

机制作用
序号 + 确认应答(ACK)每个字节都有编号,接收方确认"收到哪了";发送方据此知道有没有丢
超时重传发出后一段时间没收到确认,就重发
滑动窗口不必"发一个等一个",可以连发多个再统一确认,提升效率(流量控制:按接收方能力调整发送量)
拥塞控制网络堵了就主动降速(慢启动、拥塞避免等,知道名字即可)
课堂练习(2 题)
  1. "滑动窗口"解决什么问题? 答:实现流量控制并提高传输效率——允许一次连续发送多个报文段,而不必每发一个就停下来等确认。
  2. TCP 收到乱序到达的报文段会怎么处理? 答:依靠序号重整按序交付(一般先缓存乱序段,等缺失段到达后按序号提交给应用层)。