短距离的 TCP 或 UDP

Posted

技术标签:

【中文标题】短距离的 TCP 或 UDP【英文标题】:TCP or UDP over short distances 【发布时间】:2013-02-20 02:05:07 【问题描述】:

我希望创建一个小程序来传输数据(字符串、数字数据、文档、图像和音频)。 我读过UDP不检查数据包是否到达目的地(因此很容易丢失数据),而TCP会重新发送丢失的数据包。

如果我在通过交叉电缆以太网直接连接的两台计算机之间传输数据,是否会出现大的数据丢失问题(使用 UDP)?我认为不会有,因为数据只传输了几米,并且没有通过任何其他硬件,例如路由器/服务器。

我几乎没有做过网络编程,所以这是一个短暂的冒险,而不是使用记忆棒/FTP/文件共享等来传输 数据。

【问题讨论】:

使用 TCP;谁在乎电脑之间的距离? 人们出于显而易见的原因投票支持 TCP,但我个人会选择 UDP。首先,我不喜欢 TCP 窗口机制。我认为它过于复杂并且在发生丢包时不必要地降低了吞吐量。其次,在现代网络中,除非您有硬件故障,否则数据包很少丢失(如果有的话)。我会编写软件,以便发送方为每个 UDP 数据包编号,接收方检查每个数据包是否到达,如果没有到达,则重新请求一个数据包。与 TCP 相比,简单且开销更少。 【参考方案1】:

听起来您的数据无法处理任何丢失的数据包,因此,除非您要对数据进行校验和并验证所有内容是否通过,否则请使用 TCP。

如果数据包可能会丢失,那么您必须为它们的丢失做好计划,或者以其他方式计划您的数据丢失。

编辑:

距离肯定会影响数据包的丢失,如果电缆足够长,您将经历 100% 的丢失。现在的问题是,您是否会看到以太网规格范围内的电缆长度的损耗差异。从理论上讲,如果您的电缆符合规格,那么您不会丢失数据包,但这并不能解决环境问题。您的电缆长度可能非常短,与具有严重数据损坏的交流电源线平行。

您可以接受或不接受数据丢失。如果没有,那么您可能应该使用 TCP。

【讨论】:

这并不能真正回答距离是否会影响数据包的丢失率。我知道我的问题不是很清楚,对此我很抱歉。 将我的评论移至答案,以便更好地回答您的问题。【参考方案2】:

使用 TCP。它经过精心设计,以确保按顺序完成和准确的数据传输。 UDP 不是这些。数据包可能会被丢弃在路径上的任何地方,包括发送计算机内部。数据包可以出于任何原因重新排序 - UDP 不关心顺序。您可能可以忽略的是数据损坏的可能性 - 像这样的直接传输不会有这样的问题。

但说真的,请使用 TCP。

【讨论】:

以上是关于短距离的 TCP 或 UDP的主要内容,如果未能解决你的问题,请参考以下文章

路由交换技术——OSPF

详解TCP协议三次握手全过程

请问,如何用C#解析UDP数据包中的数据,其中UDP包中的信息是来自激光雷达采集到的距离、方位角等信息。

TCP/IP资料

RIP基本原理及实验

网工考试2