我需要创建一个UDP文件传输系统。我知道TCP是有保证的,而且更可靠,但是我需要在不同的位置之间传输巨大的文件,我认为这个项目的速度优势超过了使用TCP的好处。我刚刚开始这个项目,但希望得到一些指导,如果有人曾经这样做过。我将写双方(客户端和服务器),所以我不需要担心其他产品的功能限制。
简而言之,我需要:
我正在使用UdpClient开始这个旅程,我想用C#编写这个应用程序。除了使用TCP之外,还有其他的智慧吗?
已经取得了巨大的成功。我们过去使用RocketStream.com,但他们将产品卖给另一家公司,仅供内部使用。我们通常比FTP或原始TCP字节传输速度快30倍。
发布于 2011-09-29 21:47:32
关于
可配置的数据报大小-我认为一些防火墙抱怨如果他们变得太大?
一个数据报可能高达65,536字节。对所有ip报头信息进行编码,您将得到65,507字节的有效负载。但是,您必须考虑如何沿着网络路径配置所有设备。通常大多数设备设置的MTU大小为1500字节,所以这通常是您“在互联网上”的限制。如果您在您的位置之间设置了一个专用网络,您可以增加MTU和all设备。
进一步的关于
为错误、重传和在服务器上按块组装文件创建某种类型的数据包编号系统(是的,我们从TCP免费获得的所有内容:-)
我认为在您的情况下最好是实现应用程序级协议。喜欢
32字节序列号为8字节的crc32校验和(在字节大小上更正我)任何剩余的字节都可以用于数据
希望这能给你一些方向
*编辑::
根据经验,我可以告诉您,在专用和UDP调谐网络上,UDP比TCP快10-15%。
发布于 2011-09-29 21:31:44
我不相信速度的提高会是巨大的,但这是一个有趣的实验。这样的协议看起来和行为更像传统的基于调制解调器的协议之一,ZModem可能是从(实现ack窗口、自适应块大小等)中获得灵感的更好的例子之一。
已经有一些人尝试过这样做,请查看本站。
发布于 2011-09-29 22:05:46
如果你成功了那就太酷了。
没有WireShark就不要进去。你会需要的。
对于算法,我猜你对如何开始已经有了很好的想法。也许是一些建议:
https://stackoverflow.com/questions/7603591
复制相似问题