用于微处理器通信的TCP与UDP

时间:2010-08-06 11:34:46

标签: networking microcontroller

我正在使用TCP与arduino进行通信(只需打开套接字并等待连接)使用以太网屏蔽,在观看/阅读使用某种网络接口进行通信的各种其他项目时,他们似乎都在使用UDP代替TCP进行通信。我想知道的是,如果我使用UDP代替我会获得什么?

3 个答案:

答案 0 :(得分:3)

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

我总是以另一种方式问这个问题,使用TCP可以获得什么。有时它是有用的,嵌入式的,桌面的或服务器的,虽然我每次仍然会问这个问题,并且必须证明使用TCP over UDP是合理的,否则我就不会使用它。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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