代码之家  ›  专栏  ›  技术社区  ›  Hamza Yerlikaya

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

  •  2
  • Hamza Yerlikaya  · 技术社区  · 15 年前

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   old_timer    15 年前

    UDP堆栈比TCP堆栈简单得多。你可以很容易地从零开始自己写一个UDP协议栈,TCP有点难,可行但很难。TCP有内置的重试和其他东西,所以你不会直接失去UDP的可靠性,这是你用它做什么可以比较。UDP比TCP要快得多,这就是为什么它现在或曾经被用于视频和各种事情的原因。同样,像视频这样的东西可能会在这里或那里丢失一个数据包而不在乎。对于嵌入式UDP来说,小巧、快速等优点非常好。如果您使用的是其他人的库,那么UDP可能不会为您节省太多内存/闪存资源,它仍然会快一点。当您实现自己的UDP时,您可以节省相当多的内存,因为您可以走捷径。您可以只实现arp和udp,而不实现其他功能(虽然ping是有用的,但不知何故是痛苦的),并且您可以根据需要对arp/rarp做些什么来节省开支。您只能实现对感兴趣的数据包大小的支持。对数据包进行编号,让请求方发送两到三个数据包,并对每个请求进行响应,可以大大减少丢失数据包的问题。将数据包的大小保持在很小的范围内,既有助于解决嵌入式资源问题,又可以避免任何mtu或其他问题。为简单起见,您甚至可以强制指定特定的数据包长度。

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

        2
  •  1
  •   Paul R    15 年前

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

        3
  •  0
  •   Joe Koberg    15 年前

    您可以获得代码空间、数据内存和确定性。

    重新组装一个TCP流需要相当大的内存,除非您想NAK每个不正常的数据包。他们从来没有保证会井然有序。。。。