一、考察点分析

核心能力维度

本题主要考察候选人对传输层协议本质特性及适用场景的理解能力,重点评估以下技术维度:

  1. 协议特性理解:TCP/UDP核心机制差异的掌握程度
  2. 场景化选型能力:如何根据业务需求选择传输协议
  3. 性能权衡意识:对可靠性与传输效率的取舍判断

具体技术评估点

  1. 连接建立方式(三次握手 vs 无连接)
  2. 可靠性保障机制(确认重传 vs 尽最大努力交付)
  3. 数据包传输模式(流式传输 vs 数据报文)
  4. 首部开销差异(20-60字节 vs 8字节)
  5. 典型应用场景匹配原则

二、技术解析

关键知识点

  1. 可靠性机制 > 传输效率 > 连接管理 > 头部开销

原理剖析

TCP(传输控制协议)

  • 面向连接的可靠传输(三次握手建立连接)
  • 通过序列号、确认应答、超时重传实现数据完整性
  • 流量控制(滑动窗口)和拥塞控制(慢启动/快恢复)
  • 全双工字节流传输,保证数据顺序

UDP(用户数据报协议)

  • 无连接不可靠传输(直接发送数据包)
  • 无重传机制,不保证数据顺序
  • 首部仅8字节(源端口/目标端口/长度/校验和)
  • 支持广播/多播传输模式

常见误区

  1. 认为UDP完全不安全(可通过应用层实现可靠性)
  2. 混淆数据可靠性与传输可靠性(TCP保证后者)
  3. 忽视TCP头部开销对传输效率的影响

三、问题解答

TCP与UDP核心差异:

  1. 可靠性:TCP通过确认重传机制保证数据可靠到达,UDP不提供传输保障

  2. 传输效率:UDP无连接建立和确认过程,首部开销小,实时性更优

  3. 连接方式:TCP需要三次握手建立端到端连接,UDP直接发送数据报

场景选型示例:

  • 视频流媒体(UDP):容忍少量丢包,优先保证低延迟。如WebRTC使用UDP传输实时视频,配合前向纠错(FEC)补偿丢包
  • 金融交易(TCP):要求100%数据准确,如支付系统必须使用TCP确保交易数据完整到达,避免金额错乱

四、解决方案

UDP视频传输优化方案

  // UDP视频传输伪代码示例
class VideoStreamer {
  constructor() {
    this.socket = new UDPSocket();
    this.fec = new ForwardErrorCorrection(); // 前向纠错
  }

  sendFrame(frameData) {
    const packets = this.fec.encode(frameData); // 添加冗余数据包
    packets.forEach(packet => {
      this.socket.send(packet); // 不等待ACK直接发送
    });
  }

  handleLoss(lostPackets) {
    // 使用NACK协议请求关键帧重传
    if (this.isKeyFrame(lostPackets)) {
      this.requestRetransmission(lostPackets);
    }
  }
}
  

优化方案

  1. 使用FEC提前添加冗余数据包补偿丢包
  2. 关键帧采用NACK选择性重传
  3. 动态码率调整适应网络状况

五、深度追问

  1. TCP如何实现流量控制?

    • 滑动窗口协议+接收窗口通告
  2. QUIC协议解决了什么问题?

    • 在UDP上实现可靠传输+0-RTT连接
  3. 直播场景如何选择协议?

    • 实时互动选UDP+WebRTC,点播用TCP+HLS

Last updated 06 Mar 2025, 13:07 +0800 . history