Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


3. TCP 与 UDP 的区别及适用场景(热度 780 / 352 · 核心必考) ​

Q: TCP 和 UDP 有什么区别?各自适用什么场景?

A:

本质差异(先说结论) ​

TCP 面向字节流,UDP 面向数据报。 字节流不保留边界(因此有粘包问题);数据报保留边界(一次收一个完整报文)。其余区别都是这一本质 + 设计目标的延伸。

完整对照 ​

维度TCPUDP
连接面向连接(握手/挥手)无连接
可靠性可靠(序号、确认、重传、校验)不可靠(尽最大努力)
有序性有序(接收端按序交付)无序(可能乱序/重复/丢失)
首部20–60 字节(可变选项)8 字节(固定)
流量控制有(rwnd 滑动窗口)无
拥塞控制有(cwnd,慢开始等)无(发送方想发就发)
传输方式一对一一对一 / 一对多 / 多对多 / 广播
速度相对慢、开销大快、开销小
应用标识端口号端口号(与 TCP 端口独立命名空间)
边界字节流,需应用层定界数据报,天然有边界

设计动机 ​

  • UDP 为何「简单」: 网络层 IP 已是不可靠的;UDP 只做复用/分用 + 可选校验,把控制权交给应用。符合端到端原则:需要什么可靠性由应用定制(或干脆不需要)。
  • TCP 为何「复杂」: 大多数应用(文件、网页、邮件)需要可靠有序字节流;由操作系统统一实现,应用不必各自造轮子。
  • TCP 无 UDP 端口冲突: 内核用「协议号 + 端口」区分,TCP 53 与 UDP 53 可并存。

适用场景 ​

  • TCP: HTTP/HTTPS、FTP、SMTP/POP3/IMAP、数据库连接、SSH、Redis/MySQL 客户端等——要求可靠、有序、字节流语义。
  • UDP: DNS(查询小、一问一答)、DHCP(广播)、SNMP、音视频/直播、实时游戏、QUIC(HTTP/3)、NTP 等——低延迟优先,或可自行实现可靠性。
  • 选型规律: ① 请求-响应、报文小 → UDP(DNS);② 能容忍丢失、重传反而更糟 → UDP(实时音视频);③ 需要广播/多播 → UDP(DHCP Discover);④ 数据完整有序不可缺 → TCP。

加分点 ​

  • 弱网下 UDP 更优:无队头阻塞,重传策略可由应用层定制(只重传关键帧/关键包)。
  • HTTP/3(QUIC)选 UDP 正是为了绕开 TCP 层队头阻塞,并在用户态实现可靠传输、流控、加密、连接迁移。
  • 「UDP 不可靠」≠「UDP 应用都不可靠」:QUIC/RTCP/WebRTC 自建选择重传与 FEC。

常见追问 ​

追问 1:UDP 没有拥塞控制会怎样?

  • 答题要点: 发送方可打满链路,挤垮同路径其他流(公平性差)。所以现代 UDP 应用(QUIC、WebRTC、BBR over UDP)都自带拥塞控制,只是实现位置在用户态/应用层。

追问 2:UDP 校验和与伪首部是什么?

  • 答题要点: UDP 校验和覆盖「伪首部(源/目的 IP、协议号、UDP 长度)+ UDP 首部 + 数据」。伪首部不是 UDP 真正首部,仅用于校验,防止 IP 层把报文送错主机/送错协议。IPv6 中 UDP 校验和必选(因 IPv6 首部无校验和)。

追问 3:TCP 和 UDP 端口号会不会冲突?

  • 答题要点: 不会。五元组/内核 socket 以「协议 + 本地地址 + 本地端口 + 对端」区分。DNS 同时使用 TCP 53 与 UDP 53,互不干扰。

易错点 ​

易错说法纠正
「UDP 不可靠所以不能传文件」可以,只要应用层自建可靠性(TFTP、QUIC);代价是重复造轮子
「TCP 面向连接=有一条专线」连接是逻辑的端状态与资源分配,底层仍是 IP 分组转发
「UDP 首部有确认号」UDP 首部仅:源端口、目的端口、长度、校验和,共 8 字节
「HTTP/3 仍基于 TCP」HTTP/3 基于 QUIC,传输在 UDP 之上
「TCP 一定比 UDP 慢」在可靠传输需求下 TCP 往往更合适;「慢」指控制开销与队头阻塞等,不是绝对延迟排序

与选择题对照 ​

  • 主库 150: 第 121 题(TCP/UDP 对比正确项)、第 64 题(UDP 特点)、第 65 题(哪些应用用 UDP)、第 72 题(端口号关系)、第 59 题(端到端可靠传输层)、第 40 题(IP 尽最大努力)、第 12 题(分组交换)。
  • 补题 16: 补-13(UDP 叙述错误项,考伪首部与校验;该题未涉及多播)、补-14(邮件协议用 TCP,与 UDP 场景对照)。
  • 口述联动: 选择题常考「哪个协议用 UDP」;面试要补上为什么选 UDP(延迟/广播/可定制可靠性)。

工程 / 抓包背景 ​

  • Wireshark: udp、dns;对比 tcp.stream 看字节流,UDP 每包独立。
  • ss: ss -uanp 看 UDP socket;ss -tanp 看 TCP。
  • curl: curl --http3 https://example.com(需编译支持)可观察 UDP 443 上的 QUIC。
  • Nginx: HTTP/3 需 listen 443 quic reuseport; 与 add_header Alt-Svc;DNS 服务器常用 UDP 53,区域传送 zone transfer 用 TCP 53。

持续学习,持续积累。