学习指南 →

· Albion Gateway College

TCP 与 UDP 怎样比较?先分清字节流、消息边界和交付保证

通过原创拆包与乱序例子理解 TCP 字节流和 UDP 数据报,设计长度前缀解析,区分传输确认、业务成功与安全,并完成故障情景练习。

先问应用需要什么,再问选哪种协议

TCP 与 UDP 都是互联网传输层的重要协议,但它们提供的抽象不同。TCP 面向应用提供可靠、有序的字节流;UDP 传递数据报,本身不提供同样的交付、去重和排序保证。选型题的重点是应用如何面对丢失、延迟和边界,而不是背诵“一个可靠、一个快”就结束。

本文讨论普通网络程序的概念设计,不进行真实网络攻击或访问。所有消息、编号和到达顺序均为原创练习。我们分别观察文本命令和位置更新:前者需要完整理解每条指令,后者可能更关心最近状态。即使场景相似,真正需求也必须由具体系统确定。

TCP 保留字节次序,不替应用保留每次发送的边界

假设发送方先发送两个字节 AB,再发送三个字节 CDE。接收方不能据此假定恰好两次读取就分别得到 AB 和 CDE。它可能先读到 A,再读到 BCDE,也可能一次读到 ABCDE。只要连接按预期完成传输,交付给应用的字节顺序仍是 A、B、C、D、E。

因此“一次 send 对应一次 recv”不是可靠的程序设计假设。发送调用还可能只接收部分待发送数据,具体接口需要按返回值处理或使用适当的完整发送辅助方法;接收也要累计数据。读缓冲区大小只是本次愿意接收的上限,不是应用消息长度的声明。

原创成帧练习:把消息边界放进应用协议

为便于手算,设每条消息写成“十进制字节长度:内容”。AB 和 CDE 变为 2:AB3:CDE。若三次读取分别得到“2:A”“B3:”和“CDE”,解析器第一次知道内容长度为 2,却只有 A,因此等待;第二次补齐 AB,交付第一条消息,并保存已读到的下一条长度 3;第三次交付 CDE。

这个例子中的字符都是单字节字符,实际中文文本的字符数可能不同于编码后的字节数。长度必须按协议规定的编码字节计算。解析器还需限制长度字段和最大消息体,处理负值、非数字、连接中途关闭与不完整内容,不能相信对方声称要发送的任意巨大长度。

UDP 数据报有边界,但每个边界内的消息仍可能不到达

将 AB 与 CDE 分别作为两个 UDP 数据报发送,接收端按数据报处理它们,而不是把它们当作一条无边界字节流。但它们可能丢失、重复或以不同顺序到达,UDP 本身不替应用重传缺失消息。若接收缓冲区不足,数据报还可能被截断,程序必须按所用接口检查。

数据报保留边界,不等于应用可以无限制增加消息大小。过大的报文可能需要 IP 分片或直接遭遇大小限制,路径条件也会影响交付。RFC 8085 对 UDP 应用的报文大小与拥塞行为给出指导;学习时应把“协议允许的上限”和“实际路径上合适的大小”区分开。

丢失同一条消息,对两种业务可能含义不同

设位置更新携带编号 101、102、103,接收顺序为 103、101、103,102 没有收到。若业务只显示最新位置,可以保留 103,忽略更旧的 101 和重复的 103。但这需要应用明确编号比较、会话重启及编号回绕规则;UDP 不会自动知道哪条状态更新较新。

若同样的三条消息是文件的三个片段,就不能因为收到 103 而忽略缺失的 102。应用需要识别片段、核对完整性并处理缺失,或者选择已提供合适可靠传输机制的方案。能够容忍部分旧位置丢失,并不意味着同一个应用的登录、付款或配置变更也可以按相同方式处理。

可靠传输不等于业务已成功,也不等于加密

TCP 的确认与重传机制用于传输层数据交付,不代表服务器已经把订单写入数据库或完成业务动作。客户端发送命令后连接断开,可能无法仅凭连接状态判断服务器是否已执行。应用通常还需要明确的响应、请求标识及适当的重复请求处理,才能解释“重试是否会重复执行”。

TCP 和 UDP 本身都不是内容保密或用户身份验证方案。需要安全通信时,还要采用合适的安全协议和验证方式。校验错误与防止恶意篡改也不是同一目标。不要因为 TCP 被描述为可靠,就把其误写成能自动防止窃听、识别用户或保证服务器业务无误。

自测:三个常见判断题的解析

题一:发送方一次写入 100 字节,接收方调用一次读取 100 字节,是否一定得到完整内容?答案是否定的,可能先得到更少字节;应按协议累计,并处理连接结束与错误。题二:UDP 连续发送三个数据报,是否允许接收端先收到第三个?允许,应用若在意顺序,应自行安排机制。

题三:使用 TCP 后,是否可以删除消息长度字段?不能仅据此删除。若协议改用明确分隔符、固定长度或连接关闭作为结束标识,可能有别的成帧方式,但仍须给接收方一种确定边界的规则。题四:某次 UDP 测试更快,能否推出所有负载都更快?不能,比较必须说明网络、报文、可靠性要求及应用额外工作。

写协议比较时,用故障行为代替口号

比较表至少应回答:消息如何分界,丢失后怎么办,乱序如何处理,旧消息是否仍有价值,拥塞时如何降低发送压力,连接或会话结束后怎样恢复。UDP 应用不能因没有内置可靠流就无限发送;使用网络仍应考虑拥塞控制、公平性以及接收方容量。

最后把测量目标写具体,例如完整文件成功接收时间,或规定时限内可用的位置更新比例。低延迟、完整性和资源成本可能需要权衡,任何一次小实验都不能保证生产表现。学会从消息含义、失败路径和接口契约推理,才能避免把传输协议名称当作业务正确性的替代品。

参考资料

下一步

如想练习计算机网络协议比较,请说明课程模块、正在使用的套接字接口,以及最难解释的收发或故障情景。相关辅导能否安排,取决于学科匹配和导师时间。

继续阅读

学院在线咨询

欢迎咨询

你好,欢迎咨询!你是学生、招生代理、求职者,还是想申请成为导师?请告诉我你的咨询方向。

[email protected]