D
AI
学习工作台
8 周后端冲刺2026-05-221 分钟阅读

TCP 与 UDP

三次握手、四次挥手、可靠传输与拥塞控制

8周冲刺week4TCPUDP网络记笔记标记疑惑

传输层职责

传输层在 IP 之上提供 端口 multiplex端到端语义。TCP 可靠、有序、面向连接;UDP 无连接、尽力交付、报文边界保留。

后端面试几乎必问握手挥手与 粘包半包(TCP 字节流无边界,需 length prefix 或 delimiter)。

TCP 三次握手

  • 客户端 → SYN, seq=x
  • 服务端 → SYN+ACK, seq=y, ack=x+1
  • 客户端 → ACK, ack=y+1
  • 半连接队列 / SYN flood:SYN cookie、限流。为何不能两次:无法确认客户端收能力,可能浪费服务端资源。

    四次挥手

  • 主动方 FIN
  • 被动方 ACK(可能仍有数据)
  • 被动方 FIN
  • 主动方 ACK,TIME_WAIT 2MSL 后关闭
  • TIME_WAIT 保证迟到的报文不会污染新连接;大量短连接需 SO_REUSEADDR、连接池。

    可靠机制

    • 序号与 ACK: cumulative acknowledgment。
    • 重传:超时 RTO、快速重传(3 duplicate ACK)。
    • 滑动窗口:流量控制,接收方 rwnd。
    • 拥塞控制:慢启动、拥塞避免、快恢复;cwnd 与 ssthresh。

    UDP 特点

    无连接、无重传、头部 8 字节轻量。QUIC 在 UDP 上实现可靠 + 多路复用(HTTP/3)。

    选型:要可靠有序 → TCP(或 QUIC)
          要广播/组播、实时 → UDP

    与工程实践

    • Go net.Dial("tcp")、连接池、Keep-Alive 减少握手。
    • 粘包:定长头 + body length;Protobuf/JSON line-delimited。
    站内 /chapters/computer-network 有交互演示,配合 week04-http-https 形成应用层闭环。

    面试追问链

    TCP 与 HTTP 关系?HTTP 长连接复用 TCP。HTTPS 在 TCP 之上 TLS。下一篇讲 HTTP;DNS 见 week04-dns-load-balance

    实战巩固与面试表达

    本篇属于 8 周冲刺 week04-tcp-udp 主题。复习时先闭卷回答 frontmatter 中三张 flashcard,再展开口述两个「为什么」:为什么这种方案能 work、边界失败时如何降级。与相邻章节对照:算法篇强调复杂度与模板,Go 篇强调工程默认写法,中间件篇强调线上故障案例。

    动手与自检清单

    用 25 分钟限时做 1 道相关练习题或画出一张架构/数据结构示意图;用 5 分钟写 STAR 片段说明你在项目里是否用过类似技术。记录 3 个面试追问及你的标准答法,存入 /zh/notebook/master-plan 笔记。若某点不熟,回到对应 /chapters 交互 Lab 重新走一遍流程,比死记卡片更有效。

    易错点提醒

    避免只背名词不会画图;避免只说优点不谈 trade-off(性能、一致性、运维成本至少提一项);避免把学习 Demo 说成百万 QPS 生产。回答时使用「场景 → 方案 → 结果 → 反思」四段式,体现工程成熟度。

    自检

    画握手挥手时序图;解释 SYN_SENT、ESTABLISHED、CLOSE_WAIT 含义;说明为何「两次 ACK 丢包」会重传。

    知识卡片

    问题

    TCP 三次握手每一步目的?

    点击翻转查看答案

    答案

    SYN:客户端发起序号;SYN+ACK:服务端确认并回序号;ACK:客户端确认。双方确认收发能力与初始序号,防历史连接。

    问题

    为什么 TCP 断开要四次挥手?

    点击翻转查看答案

    答案

    全双工:一方 FIN 只关发送方向,对方仍可能发数据,需单独 ACK;双方都 FIN+ACK 才完全关闭。

    问题

    UDP 适用场景?

    点击翻转查看答案

    答案

    低延迟、可丢包:DNS 查询、实时音视频、游戏状态;应用层自行保证可靠时用 QUIC/自定义协议。