📝 面试真题解析:TCP与UDP的区别

412 阅读5分钟

一、核心区别速览(面试必背)

通过一张表快速掌握TCP和UDP的核心差异:

对比维度TCPUDP
连接方式面向连接(三次握手建立连接)无连接
可靠性数据完整有序(确认重传机制)尽力交付,可能丢包
传输速度较慢(需维护连接状态)极快(无状态开销)
头部开销20-60字节(复杂控制字段)8字节(仅基础信息)
流量控制滑动窗口机制
拥塞控制慢启动、拥塞避免等算法
数据边界字节流模式(无明确报文边界)数据报模式(保留发送边界)
典型应用场景文件传输、网页浏览、邮件视频流、DNS查询、在线游戏

二、技术原理深度解析

1. TCP的可靠性保障

  • 三次握手建立连接

    客户端 → SYN=1, seq=x → 服务端  
    服务端 → SYN=1, ACK=1, seq=y, ack=x+1 → 客户端  
    客户端 → ACK=1, seq=x+1, ack=y+1 → 服务端
    

TCP三次握手.png

  • 四次挥手终止连接

    主动方 → FIN=1 → 被动方  
    被动方 → ACK=1 → 主动方  
    被动方 → FIN=1 → 主动方  
    主动方 → ACK=1 → 被动方
    

TCP四次挥手.png

  • 重传机制:通过序列号确认机制,未收到ACK时自动重发数据包

2. UDP的轻量级优势

  • 无连接设计:直接发送数据报,无握手过程
  • 广播/组播支持:可同时向多个目标发送数据
  • 定制化空间大:开发者可在应用层实现个性化可靠性策略

三、高频面试题应答指南

问题1:TCP为什么需要三次握手?

标准答案

T三次握手是为了防止已失效的连接请求报文突然传送到服务端(网络延迟导致的历史报文问题)。通过客户端-服务端-客户端的确认流程,确保双方都具备收发能力,建立可靠的通信信道。

加分回答

如果使用二次握手:当服务端收到延迟的SYN请求时会直接建立连接,但客户端可能早已放弃该请求,导致服务端资源浪费。

问题2:TCP为什么需要四次挥手?

TCP采用四次挥手来关闭连接的原因在于TCP连接是全双工的,即数据可以在两个方向上同时传输。这意味着每一方都必须单独地关闭其发送和接收通道。

以下是四次挥手过程的简要描述:

  1. 当一方(通常是客户端)完成了它的数据发送任务后,它会发送一个FIN(结束)标志位被置为1的报文给另一方(通常是服务端),表示它不再有数据要发送了。
  2. 接收到FIN报文的一方会发送一个ACK(确认)报文作为响应,表示已经接收到对方的FIN,并进入CLOSE_WAIT状态,但此时它可能还有数据需要发送。
  3. 当服务端也完成数据发送后,它会发送自己的FIN报文给客户端,表示同意现在可以关闭连接。
  4. 客户端接收到服务端的FIN报文后,会发送最后一个ACK报文进行确认,并进入TIME_WAIT状态,等待一段时间以确保服务端收到了这个ACK。

之所以需要四次挥手,是因为在关闭连接时,当一端发送FIN报文后,只能表示这一端没有更多的数据要发送了,但并不意味着它可以立即停止接收数据。另一端可能仍有数据需要发送。因此,需要分开两次独立的操作:一次是确认对方不再发送数据(ACK),另一次是自己也不再发送数据(FIN)。如果将这两个步骤合并,则可能导致数据丢失或连接过早关闭。此外,TIME_WAIT状态的存在是为了确保网络中的延迟报文不会干扰到新的连接。

问题3:UDP如何实现可靠传输?

技术方案

  1. 应用层ACK机制:接收方返回确认包
  2. 重传定时器:未收到ACK时重发数据
  3. 序列号管理:对数据包编号处理乱序问题
  4. 流量控制:通过自定义窗口大小调节发送速率

经典案例

QUIC协议(HTTP/3基础)在UDP之上实现可靠传输,相比TCP减少握手延迟50%


四、应用场景对比分析

必须使用TCP的场景

  • 金融交易系统:0容错率的资金划转
  • 数据库同步:严格保证数据完整性
  • SSH远程连接:需要精确的指令顺序

优先选择UDP的场景

  • 实时视频会议:允许少量丢包,不能容忍延迟
  • 物联网传感器:海量设备低功耗通信
  • 多人竞技游戏:需要毫秒级响应速度

五、面试进阶考点

1. TCP粘包问题

  • 成因:接收方无法区分报文边界

  • 解决方案

    • 固定长度包头(声明数据长度)
    • 特殊分隔符(如\r\n
    • 使用应用层协议(如HTTP的Content-Length)

2. UDP的NAT穿透

  • STUN协议:获取NAT后的公网地址
  • TURN协议:中继服务器转发数据
  • ICE框架:综合多种穿透策略

六、备考建议

  1. 画图记忆法:手绘三次握手/四次挥手流程图
  2. 场景联想:将协议特性与实际应用(如微信语音用UDP)关联记忆
  3. 对比记忆:整理TCP/UDP对比表随身携带
  4. 实战演练:使用Wireshark抓包分析协议细节

扩展阅读推荐

  • 《TCP/IP详解 卷1:协议》(经典理论)
  • Cloudflare博客《The QUICening》(前沿技术)
  • 极客时间《网络编程实战》(实战案例)