UDP 保留数据报边界,恢复和时效由应用负责
UDP 在传输端点之间携带独立数据报,八字节首部包含来源端口、目的端口、长度和校验和字段。它不会加入 TCP 的可靠有序字节流或拥塞控制行为,让应用可以选择自己的交付策略,但不承诺所有负载下延迟都更低。应用确实需要某条内容时,丢失的数据报可能比建立连接的开销更昂贵,必须按完整请求过程评估。 原文发送 A、BC 和空数据报,得到长度 1、2、0。八字节 abcdefgh 用三字节缓冲区接收,得到 abc 与 MSG_TRUNC;defgh 被丢弃,下次读取超时,新发的 next 数据报仍能收到。刻意编写的中继把 1、2、3 改成 3、1、1;集合去重只留下 3、1,没有恢复 2 或原始顺序。 原有实验示意,本轮未重跑;中继属于故障注入,不是网络丢包统计或延迟保证。 坏掉的样子 发送成功不证明目标应用已经收到或处理消息。UDP 没有内建确认、重传、去重或顺序保证,因此超时不能告诉支付客户端操作是否发生。允许重试时,应用需要能够处理重复请求和结果不确定的协议,不能把没有响应直接解释成业务失败。消息是否到达、动作是否执行、结果是否持久化,也应具有不同含义。 ...