TCP与UDP的微处理器通信

问题描述:

我正在使用TCP与arduino进行通信(只需打开一个套接字并等待连接)使用以太网盾,在观看/阅读有关使用某种网络接口的各种其他项目他们似乎都使用UDP而不是TCP进行通信。我想知道的是,如果我使用UDP,我的收益是什么?TCP与UDP的微处理器通信

UDP堆栈比TCP堆栈简单得多。您可以轻松地从头开始编写UDP堆栈,但TCP有点难度,但可行但难度较大。 TCP内置了重试和其他功能,因此您不会直接通过UDP丢失可靠性,而是您可以使用它进行比较。 UDP的速度明显快于TCP,这也是为什么它在当天被用于视频和各种事情的原因。像视频这样的东西可能会在这里和那里丢失一个包,并不在乎。对于小型,快速等嵌入式UDP来说相当不错。如果你正在使用某个elses库,那么UDP很可能不会在内存/闪存资源上节省很多,它仍然会更快一些。当你实现你自己的UDP时,你可以节省很多内存,因为你可以偷工减料。你可以做的只是实现arp和udp而没有其他任何东西(尽管ping是有用的,但有些痛苦),并且你可以在arp/rarp上削减角度,这取决于你需要做什么。您只能对您感兴趣的数据包大小实施支持。对数据包进行编号并让请求方发送两三个数据包并响应每个请求可以大大减少数据包丢失问题。保持数据包大小非常小有助于解决嵌入式资源问题,并避免一路上出现的任何mtu或其他问题。为了简单起见,您甚至可以强制特定的数据包长度

我总是以另一种方式提出这个问题,通过使用TCP我会得到什么。有时候,它是有用的,嵌入式的,桌面或服务器,但我仍然每次都问这个问题,必须证明使用TCP over UDP,否则我不会使用它。

+0

另请注意,tcp是基于流的,而udp是基于打包的。所以*如果*你得到的udp数据包,你会得到整个事情。 *当你得到tcp数据包时,不能保证它到达它的方式。如果你认为它的行为类似于udp,那么你将丢失数据/数据包,因为你不会意识到这两个小包,所以往往数据包确实是一个更大的包。添加到内存需求和解析数据包在tcp堆栈的额外代码之上所需的代码量等。 – 2010-08-10 21:55:29

+0

...你不会意识到这两个,小的,每隔一段时间,数据包...... – 2011-09-01 13:13:28

您获得了多播,但失去了可靠性。

+0

也少用UDP的开销 http://www.skullbox.net/tcpudp.php – 2010-08-06 11:39:28

您获得代码空间,数据存储器和确定性。

重新组装一个TCP流需要相当数量的内存,除非你想NAK每个没有按顺序的数据包。它们永远不会保证顺序...

具有超时的异步命令响应协议,其中所有命令和响应都适合单个UDP数据包,命令是幂等的(可以应用多次并维护正确的结果)是一个非常强大的协议。