跳到主要内容

TCP 与 UDP

TCP 如何提供可靠的有序传输?​

  • TCP: 面向连接的字节流协议,建立连接后双方都可以收发数据;
  • 可靠性: 通过序号、确认和重传等机制恢复丢失数据,并向应用按序交付;
  • 流控制: 发送方需要考虑接收方处理能力,避免持续压垮接收缓冲区;
  • 代价: 建连、维护连接和丢包恢复增加状态与延迟,后续数据可能等待前面的缺口补齐;
  • 保证边界: 网络永久中断时 TCP 会失败;字节已交付也不代表业务已经提交;
  • 适用条件: 文件、网页、邮件等通常更重视完整性,而不是丢掉过时片段;

UDP 如何支持低开销的数据报传输?​

  • UDP: 无连接的数据报协议,应用提交一份数据报,协议不先建立 TCP 那样的连接;
  • 协议边界: 不内建重传、按序交付或端到端流量控制,丢包和乱序由上层按需处理;
  • 错误检测: UDP 有校验和机制,不能把“不提供可靠重传”理解成“完全没有错误检测”;
  • 适用条件: 语音、实时互动或组播中,迟到数据可能不如直接丢弃,应用可选择恢复策略;
  • 应用责任: 如果仍需可靠性或拥塞控制,应用协议必须另行实现,因此实际系统未必更简单;

怎样依据业务需求选择传输协议?​

维度TCPUDP
数据单位字节流,不保留消息边界数据报,保留边界
连接维护连接状态协议本身无连接
交付有序可靠或报告失败可能丢失、重复、乱序
重传协议内建上层按需实现
广播与组播不提供可承载,取决于网络和 IP 版本
示例HTTP/1.1、HTTP/2、SMTP、FTP传统 DNS 查询、实时媒体等
  • 性能判断: UDP 头部和连接开销较小,但“永远比 TCP 快”不成立,实际效果取决于丢包、恢复策略与负载;
  • 设计顺序: 先决定能否丢失、是否需要顺序及延迟目标,再选择协议及上层补偿机制;
  • 拆分边界: DNS 也可以使用 TCP,视频也可以通过可靠 HTTP 传输,业务名称不能唯一决定底层协议;