在整周研究TCP / UDP差异后,我无法决定使用哪个。我必须发送大量恒定的传感器数据,同时发送不会丢失的重要数据。这对我来说是一个完美的分裂,然后我读了一篇文章(http://www.isoc.org/INET97/proceedings/F3/F3_1.HTM),说明使用两者会导致另一方的数据包/性能损失。如果我允许用户选择使用哪种协议(如果我在服务器端编程)而不是选择自己,是否会出现任何问题?这有什么不利之处吗?
我提出的唯一其他解决方案是使用UDP,如果数据包丢失似乎太大,请切换到TCP(客户端)。
答案 0 :(得分:6)
我会说使用TCP,除非你不能(因为你有数千个传感器,或者传感器的能量预算非常低,或者其他什么)。如果您需要可靠性,则必须在UDP之上滚动自己的可靠性层。
尝试使用TCP,并衡量您的表现。如果没关系,并且您没有预料到严重的扩展问题,那么请继续使用TCP。
答案 1 :(得分:4)
您链接的文章将详细分析一些角落案例。这可能不适用于您的情况。除非你自己的性能测试开始出现问题,否则我会忽略它。从最简单的设置开始(我猜测TCP用于批量数据传输,UDP用于不可靠传感器数据),测试,测量,发现瓶颈,重新设置因素。
答案 2 :(得分:2)
OP说:
...发送不会丢失的重要数据。
因此,根据定义,TCP是通过UDP的正确答案。
请记住,UDP中的“U”代表“不可靠”
回复:
我提出的唯一其他解决方案是使用UDP,如果数据包丢失似乎太大,请切换到TCP(客户端)。
糟糕的主意:事情往往会在您不期望的时候突破。作为工程师,您的工作是计划失败案例并提前缓解。 UDP 将丢失数据包。如果您的数据不能丢失,请不要使用UDP。
答案 3 :(得分:1)
我也会选择TCP。 UDP有其用途,高重要性的传感器数据并不是我想到的。如果你可以忍受失去大量的传感器数据,那么请使用UDP,但我想到这根本不是你想要的。
答案 4 :(得分:1)
UDP比TCP更简单,您仍然可以使用UDP模拟TCP的功能。如果你真的有自定义需求,UDP更容易调整。
但是,我首先只使用UDP和TCP,检查它们在真实环境中的行为,然后才决定以你需要的确切方式重新实现UDP。如果适当的抽象,这应该没有多大工作。
也许你可以限制你的TCP使用量而不是填满带宽?
答案 5 :(得分:0)
如果你不能丢失数据,并且你使用UDP,那么你正在重新发明TCP,至少是它的很大一部分。无论您在性能上获得什么,您都很容易在协议设计错误中丢失,因为设计协议是 hard 。
答案 6 :(得分:0)
恒定传感器数据:UDP。无法丢失的重要数据:TCP。
答案 7 :(得分:0)
您可以实现自己的机制来确认无法丢失的UDP数据包的传送。
答案 8 :(得分:0)
我会说用TCP。此外,如果您管理大量数据包丢失,选择的协议是您最不关心的问题。如果您需要重要数据,TCP。如果数据不重要并且可以在以后补充,则为UDP。如果数据是关键任务,TCP。 UDP会更快,但会从损坏或不存在的数据包中留下错误。最后,你将重新发明TCP以解决问题。