我有一个奇怪的想法。我听说过根据我的理解使用UDP传输文件的软件,减少了TCP数据包中的开销。
如果我的应用需要TCP,我的局域网有软件设置,可以通过软件设置与海岸另一侧的另一个数据中心进行通信。是否可以通过UDP发送实际数据,而不是在两端模拟TCP?
我依旧记得有关7层的内容,但我不确定协议是否是其中一个层,我不确定在网络上使用UDP时TCP是否无法模拟/实现完美。有没有人对这些项目有任何想法或信息?
答案 0 :(得分:18)
如果你问是否可以使用UDP作为Layer 2,那么答案是肯定的。有各种协议允许您使用UDP传输创建到另一个网络的隧道,例如L2TP甚至IPsec (with NAT traversal)。您也可以在application layer。
执行此操作如果你问TCP是否可以在UDP中实现,答案是否定的。首先,TCP packets和UDP packets具有不兼容的格式。其次,TCP和UDP具有不同的协议号(见IP header),这意味着发往UDP端口的TCP流量不会传递给正确的上层协议。
答案 1 :(得分:14)
TCP和UDP都建立在IP之上,但TCP使用不同的数据包结构,而在第2层则无法使用UDP数据包模拟TCP。
当然,如果您同时控制源和目标,则可以为TCP数据包创建可靠的UDP隧道。这将需要UDP数据包正文中的一些内部信息(数据包号,ack / nack标志)。
有一个有趣的项目http://udt.sourceforge.net/
这是一种基于UDP的广播功能可靠的文件传输机制。
答案 2 :(得分:5)
PseudoTCP是一种在UDP之上实现TCP算法的协议。这是因为TCP的NAT遍历比UDP要复杂得多。但是一些P2P应用确实需要在节点之间进行可靠的数据传输。
据我所知,有两种PseudoTCP变体:Libjingle和Libnice.Libjingle是google的开源库,最初用于gtalk。您可以查看libjingle:https://developers.google.com/talk/libjingle/file_share中的文件共享示例。最近,Chrome桌面还使用libjingle的PseudoTCP实现来实现可靠的连接。
答案 3 :(得分:3)
如果我的应用需要TCP,我的局域网有软件设置进行通信 使用软件在海岸另一边的另一个数据中心 在他们的结束设置。是否可以通过发送实际数据 UDP,但比两端模拟TCP?
没有。 UDP套接字与TCP套接字位于不同的命名空间中。您将无法在一端写入UDP并在另一端发送或接收TCP。 TCP和UDP是对等协议;两者都存在于IP以上的层。你不能用一个来欺骗另一个。
答案 4 :(得分:3)
是的,您可以在UDP上开发模拟TCP的协议。但是,如果您完全模拟TCP,则技术上会产生更多开销。因为TCP是作为数据包实现的,并且您的模拟TCP是在数据包正文中实现的。
如果您只需要TCP的一个或两个功能(例如基本排序),那么在UDP中实现它很有用。
Halo使用2-3(IIRC)UDP协议来模拟TCP的不同功能,然后使用完全成熟的TCP来初始化游戏状态。 I Shot You First Networking, GDC publication
例如,在一种情况下,它们发送3个重复的UDP数据包以克服数据包丢失。
如果您在两端控制软件,并且构建自己的协议具有成本效益,那么UDP可以是多功能的。
答案 5 :(得分:3)
现在在Linux-3.18 +上实现它的一种方法是使用Foo over UDP(FOU)来实现通用UDP封装(GUE)。这是一个很好的introduction to FOU,以及ip-fou的手册页。
或者如果你想要一个[开源]基于UDP的文件传输系统,有UDT,UFTP,Tsunami-UDP,甚至谷歌的QUIC。
答案 6 :(得分:1)
您将遇到的最大问题是,UDP的设计理念是您不关心某些数据包是否会将其转发到另一端。
这是一个包含更多信息的链接:
http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/
恕我直言,通过UDP传输文件不是一个好主意。答案 7 :(得分:1)
TCP的问题在于其算法,而不是其标题。
您当然可以在UDP之上实现TCP算法。这实际上与在UDP数据报内部隧道化TCP数据报相同。但所有这一切都是为每个数据包增加了几个字节的开销,并需要另一个端点来解包数据包。
UDP本身就是IP上的薄弱机器人:它是访问IP分组交换网络的便捷方式,无需深入内核或接收路由器的特殊处理。在UDP之上实现可靠传输的主要原因是为了摆脱TCP算法而采用更高效的方法。上面提到FileCatalyst就是这样做的公司,而我自己的公司Data Expedition,Inc。也这样做。
所以你可以在UDP之上实现TCP算法,但你不想这样做。
答案 8 :(得分:0)
您可以通过UDP模拟类似连接的内容,并且您还可以添加可靠性检查以及排序和重新传输等。 - 但是,它仍然不是TCP,它只是行事。
当然,其中一个目标可以是一种“中心”或“代理”,它可以进行调整。然后你没有2端解决方案,但事实上是一个4端解决方案 - 一对带有“真正的”TCP,另一对带有“自编”“TCP” - 你把它与一个精心设计的程序放在一起