计网八股-TCP跟UDP的区别是啥?

发布时间:2026/8/3 3:30:11
计网八股-TCP跟UDP的区别是啥? 深入浅出TCP 与 UDP 全解析 —— 从原理到选型一个追求绝对可靠一个追求极致速度。面试八股常客、网络编程必修课TCP 和 UDP 到底怎么选一文讲透。目录一、TCP 与 UDP 是什么二、TCP可靠传输的快递专线三、UDP简单粗暴的发件即达四、TCP vs UDP 全面对比五、典型应用场景六、如何选型七、总结一、TCP 与 UDP 是什么1.1 传输层的两个主角在 OSI 七层模型中传输层位于网络层之上、应用层之下。它负责端到端的数据传输而TCP和UDP正是传输层的两大核心协议。协议全称一句话概括类比TCPTransmission Control Protocol面向连接、可靠传输 快递专线送达签收UDPUser Datagram Protocol无连接、尽力而为 平邮寄信寄出即完记住TCP 像打电话先拨通再说话UDP 像发短信发出去就行对方收没收到不保证。1.2 端口号传输层的地标无论是 TCP 还是 UDP都通过端口号区分同一台主机上的不同应用。IP 地址 → 定位到哪台主机 端口号 → 定位到哪个进程知名端口服务协议21FTPTCP53DNSUDP80HTTPTCP443HTTPSTCP123NTPUDP二、TCP可靠传输的快递专线2.1 三次握手建立连接TCP 是面向连接的协议通信前必须先打招呼确认双方在线。客户端 服务端 │ SYN1, seqx ────▶ │ │ │ │ SYN1, ACK1, seqy ◀──── │ │ ackx1 │ │ │ │ ACK1, seqx1 ────▶ │ │ acky1 │ │ │步骤发送方内容意义①客户端SYN我要连接你②服务端SYN ACK收到我也要连你③客户端ACK确认连接建立 ✅2.2 可靠传输四大机制TCP 的可靠不是天生的而是靠一系列机制堆出来的机制作用类比确认应答ACK收到数据后回执快递签收超时重传没收到 ACK 就重发签收失败重新派件序列号与去重给数据编号乱序可重组包裹上的单号校验和检测数据是否损坏验货检查核心观点可靠性 编号 确认 重传 校验缺一不可。2.3 流量控制与拥塞控制除了保证送达TCP 还要控制速度避免把对方或网络撑爆。机制防的是什么手段流量控制接收方处理不过来滑动窗口动态调整发送速度拥塞控制网络中间设备拥堵慢启动、拥塞避免、快重传、快恢复2.4 四次挥手断开连接客户端 服务端 │ FIN1 ────▶ │ │ │ ← 服务端可能还有数据要发 │ ACK1 ◀──── │ │ │ │ FIN1 ◀──── │ │ ACK1 ────▶ │步骤发送方内容意义①客户端FIN我说完了想断开②服务端ACK收到但我要把数据发完③服务端FIN我也发完了断开吧④客户端ACK确认正式断开⚠️ 为什么四次而不是三次因为 TCP 是全双工双方要各自说一次再见。三、UDP简单粗暴的发件即达3.1 UDP 的三个没有特征TCPUDP连接有连接无连接可靠性可靠不可靠流量/拥塞控制有没有正是这三个没有换来了 UDP 的两大优势快没有握手开销没有确认重传发送即走简单首部只有 8 字节而 TCP 首部至少 20 字节3.2 首部对比轻量级 vs 重量级TCP 首部至少 20 字节 UDP 首部固定 8 字节 ┌───────────────┐ ┌───────────────┐ │ 源端口 16bit │ │ 源端口 16bit │ │ 目的端口 16bit│ │ 目的端口 16bit│ │ 序列号 32bit │ │ 长度 16bit │ │ 确认号 32bit │ │ 校验和 16bit │ │ 数据偏移 4bit │ └───────────────┘ │ 标志位 6bit │ 够轻量够直接 │ ... 各种选项 │ └───────────────┘四、TCP vs UDP 全面对比维度TCPUDP连接方式面向连接无连接可靠性可靠传输尽力而为传输方式字节流有序数据报无序速度慢快首部开销20~60 字节8 字节流量控制✅ 有❌ 无拥塞控制✅ 有❌ 无粘包问题有需处理无按报文边界应用场景文件、网页、邮件视频、语音、游戏核心观点TCP 用开销换可靠UDP 用可靠换速度没有谁更好只有谁更合适。五、典型应用场景5.1 用 TCP数据不能丢场景协议原因HTTP/HTTPSTCP网页必须完整加载FTP 文件传输TCP文件缺一个字节都不能用SMTP 邮件TCP邮件不能丢SSH 远程登录TCP命令要按顺序执行5.2 用 UDP速度优先场景协议原因DNS 域名解析UDP查询短平快丢了重查一次就行视频/直播UDP丢一帧无伤大雅卡顿才致命实时语音通话UDP延迟 完整性在线游戏UDP位置信息要实时不需要旧包核心观点判断标准很简单 ——丢了能不能重来不能重来就用 TCP能接受偶尔丢失就用 UDP。六、如何选型6.1 选型决策树数据必须 100% 送达 ├─ 是 ────▶ TCP └─ 否 ── 对实时性要求高 ├─ 是 ────▶ UDP └─ 否 ──▶ TCP图省事就用 TCP6.2 代码示例Socket 编程# TCP 服务端可靠、有序importsocket serversocket.socket(socket.AF_INET,socket.SOCK_STREAM)# SOCK_STREAM TCPserver.bind((0.0.0.0,8080))server.listen(5)conn,addrserver.accept()# 先建立连接dataconn.recv(1024)# 按字节流接收# UDP 服务端无连接、尽力而为importsocket serversocket.socket(socket.AF_INET,socket.SOCK_DGRAM)# SOCK_DGRAM UDPserver.bind((0.0.0.0,8080))data,addrserver.recvfrom(1024)# 直接收不用 acceptserver.sendto(bpong,addr)# 直接发无连接对比项TCPUDPPython Socket 类型SOCK_STREAMSOCK_DGRAM接收函数recv()recvfrom()建立连接需要connect/accept不需要七、总结7.1 核心要点TCP面向连接、可靠、有序三次握手建连、四次挥手断连适合不能丢的数据UDP无连接、尽力而为、轻量适合要快、可容忍丢失的场景选型关键看业务是不能丢还是不能慢首部差异TCP 20-60 字节 vs UDP 仅 8 字节UDP 更省网络开销TCP 自带的ACK、超时重传、滑动窗口、拥塞控制四件套保证可靠性7.2 最后的话核心观点没有绝对的好坏 —— 可靠与速度本就是一对矛盾TCP 和 UDP 只是站在天平的两端由你的业务场景来抉择。记住面试常考三次握手、四次挥手、可靠机制必须背熟开发常选HTTP/DNS 是现成的例子写代码时想想你的数据能不能丢进阶方向QUIC 协议基于 UDP 实现了类 TCP 的可靠传输是未来的趋势参考资料《计算机网络第7版》谢希仁RFC 793 —— TCP 协议规范RFC 768 —— UDP 协议规范TCP/IP 详解卷 1协议标签计算机网络, TCP, UDP, 传输层, 三次握手, 面试题