【问题标题】:Best protocol for embedded PIC microcontroller to communicate with server over the internet? [closed]嵌入式 PIC 微控制器通过 Internet 与服务器通信的最佳协议? [关闭]
【发布时间】:2013-12-24 01:43:58
【问题描述】:

首先,感谢您抽出时间阅读这篇文章。

我希望使用 Microchip PIC18 或 PIC32 系列嵌入式微控制器和 Microchip 的 TCP/IP 堆栈来开发支持 TCP/IP 的设备。不过,目前我对网络的了解还很基础,所以才发这篇文章。

谁能推荐用于我的 TPC/IP 嵌入式设备的最佳协议,以便它可以与数据中心的服务器通信?我的目的是让嵌入式设备位于 Internet 上的某个远程位置,服务器可以在该位置与设备通信并下载温度计探头读数等数据以存储在数据库中。我还希望数据中心的服务器能够在需要时重新配置远程设备上的设置和变量。

到目前为止,我对协议的研究使我有以下选择:

  • SNMP v3(版本 3 由于加密和身份验证)
  • UDP(虽然我读到这可能不可靠但速度很快)
  • TCP(我还不太了解)

谁能给我建议最好的下山路线?我不希望您给出详细的答复,但我真的很想知道要研究和研究的主题/协议。

我的意图是在互联网上部署许多这些嵌入式设备,它们都将数据发送回服务器。

我假设远程嵌入式设备必须连接到服务器而不是相反,因为服务器将具有静态 IP 地址或 DNS 名称,而远程设备地址将是未知的。

对此的任何建议将不胜感激。请不要犹豫,问我是否错过了这篇文章中的任何关键信息。

非常感谢。

罗伯

* 更新 * 有人指出我可能误用了 Web 服务器这个术语,所以我修改了我的帖子,改为提及数据中心中的服务器。感谢您向我指出这一点。

【问题讨论】:

  • 我使用过 UDP。它是低级的,不需要给 PIC 带来太多负担。听起来您的服务器将 ping PIC。我没有看到从服务器向 PIC 发送 UDP 数据包的问题,​​并让 PIC 响应数据包中的命令,并将另一条 UDP 消息返回给服务器。如果服务器在一段时间内没有得到响应,则重新发送命令。
  • Best 将要求您更准确地确定您的要求;但是,您应该考虑使用 TLS 安全协议(如 https)或 ssh。我不建议您尝试编写自己的协议,除非您准备学习一些令人难以置信的深奥数学。像椭圆曲线和/或极大伪素数的生成。
  • HTTPS over TCP 是我要走的路线。如果 PIC 位于防火墙后面怎么办?
  • 我会说你的理解是正确的。通常,服务器不能/不应依赖客户端在线或始终在同一地址可用。只有当客户端与服务器建立安全连接时,他们的通信才应该被信任。这是个问题吗?
  • @RobHurd 如果没有被 ping 通,我会让 PIC 通过 UDP 向服务器发送一个注册命令。注册将具有 PIC 的 IP 地址。

标签: networking snmp network-protocols tcp-ip microchip


【解决方案1】:

如果目标是 Web 服务器,则您别无选择。您必须使用通过 TCP 运行的 HTTP。

否则您误用了“Web 服务器”一词。

【讨论】:

  • 感谢您这么快回来。那么 SNMP 只是一种本地网络协议,不能在 Internet 上使用吗?
  • 对不起,我所说的网络服务器只是数据中心中的一个服务器,它通过静态 IP / DNS 连接到互联网设置。
  • 能否使用SNMP完全取决于相关的UDP端口(161-2)是否在对等体之间一路开放。实际上,这同样适用于所有其他协议。
  • 感谢@EJP 的建议。
【解决方案2】:

在很多方面,这取决于您的具体要求。 TCP/IP 能够提供相当可靠的连接,因为它提供了一种方法来确定客户端是否已连接、何时连接以及何时断开连接。 UDP 是无连接的,因此服务器打开一个端口并监听数据,但没有自动连接管理,因此客户端需要明确“告诉”服务器何时到达或即将离开(这也意味着您需要自己制作超时设施)。

此外,如果您的内存/处理资源非常有限,请记住 UDP 是一种“成本较低”的协议,因为它避免了 TCP 由于其内置的连接管理而产生的大量开销。

虽然这些都是协议,但它们实际上只是自己处理连接。您可能仍需要创建自己的协议来管理数据本身。例如,当您通过 TCP 或 UDP 发送数据时,您发送的字节可能不会全部同时到达服务器。这意味着您需要一种验证收到的每个数据包的方法,以确保您拥有所有数据包。这通常通过校验和和代表发送数据总大小的字节的组合来实现。

【讨论】:

  • 感谢您的回复@Alfie。我将阅读更多关于发送和接收 TCP 和 UDP 数据的内容。我遇到的麻烦是我对网络完全陌生,所以我试图用这个从我的尾巴中找出我的头。
  • 如果不知道你在做什么,很难提出最好的策略,但为了帮助澄清协议:你可以将 HTTP 视为“数据传输协议”;它定义了有关使用的端口、需要发送的格式数据以及需要包含的内容(例如数据的长度或使用的字符编码)的规则。但是,HTTP 使用 TCP [连接协议]。 FTP 使用 TCP(端口 21),POP/SMTP(等)也是如此,但这些也是它们自己的协议。 UDP 常用于在线游戏或效率至上的情况。
  • 谢谢@Alfie。我想我需要阅读 HTTP 作为数据传输协议,以及所有其他提到的协议。我只是想设计一个嵌入式设备,记录温度读数、时间戳和唯一 ID,以在远程位置识别设备,然后通过 Internet 将数据安全地发送到服务器以存储在数据库中。
  • 我真的不会为此烦恼,除非只是想看看一些现有协议是如何工作的。对于您需要的东西,HTTP 很可能太过分了。在制定您的协议时,您需要从查看最大潜在复杂性开始。如果您的“数据包”很小且固定,这很容易。例如,假设您以一致的格式发送了 temp 和 timestamp,其起始字符为 $:$001.002013-12-23(其中 temp 始终采用 XXX.XXX 格式),您的服务器只需要监听 17 个字节的数据包很长,以$开头。
  • 是的,就是这样一个 :) HTTP 数据包使用大约 250 个字节来描述它们包含的数据。通常这比您希望 PIC 必须处理的要多得多。如果您可以摆脱 TCP,我更喜欢那个选项。如果您需要 /very/ 实时更新或非常快速地传输数据,UDP 可能会更好。如果您不能保证您的数据始终采用简单的格式,或者如果您需要更大的灵活性,请查看流行的 fletcher 校验和 (en.wikipedia.org/wiki/Fletcher's_checksum)。有了这个,我会用一个唯一的字符开始所有的数据包,然后是数据包长度..
【解决方案3】:

您也可以考虑使用 mqtt (http://mqtt.org)。它是一个轻量级的消息传递协议。为了编码您的消息,您可以考虑使用 protobuf (https://code.google.com/p/protobuf/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多