【问题标题】:HTTP vs TCP/IP, send data to a web serverHTTP 与 TCP/IP,将数据发送到 Web 服务器
【发布时间】:2014-06-03 04:21:15
【问题描述】:

我目前正在开展一个项目,我需要使用 Arduino Nano (http://arduino.cc/en/Main/arduinoBoardNano) 将数据从温度传感器发送到 Web 服务器。

起初我认为这很容易,因为有很多很棒的库可以帮助处理 POST/GET 等问题。但是,我的教授刚刚告诉我,我需要使用 TCP/IP 将数据发送到服务器,据我了解,POST 和 GET 是 HTTP 方法。

有人可以向我解释一下 HTTP 和 TCP/IP 之间的区别吗?特别是因为它与将数据发送到 Web 服务器有关。我正在寻找一个不太技术性的答案(我对这一切都很陌生)。

最后,如果有人有经验让 Arduino 做我上面描述的事情,我真的很感激一些指点。

谢谢!

【问题讨论】:

  • 它们是协议层次结构中的不同层。查看他们的 Wikipedia 页面,或访问 tcpipguide.com 之类的网站,了解协议是如何分层的。
  • @Barmar 非常有用的 tcpipguide.com 链接

标签: http arduino tcp-ip


【解决方案1】:

简而言之:TCP 是传输层协议,HTTP 是运行在 TCP 之上的应用层协议。

详细信息:要了解差异(以及许多其他网络主题),您需要了解分层网络模型的概念。本质上,有不同的协议可以让计算机在不同的距离和不同的抽象层上交谈。

网络堆栈的最底层是物理层。这是电信号或光脉冲或无线电波实际从一个地方传输到另一个地方的地方。物理层并没有真正的协议,而是有电压、频率和其他物理属性的标准。您可以通过这种方式直接传输信息,但需要大量电源或专用线路,并且如果没有更高层,您将无法共享带宽。

下一层是链接层。该层涵盖与共享物理通信介质的设备的通信。在这里,以太网、802.11a/b/g/n 和令牌环等协议指定了如何处理对物理介质的多个并发访问,以及如何将流量引导到一个设备而不是另一个设备。在典型的家庭网络中,这就是您的计算机与家庭“路由器”通信的方式。

第三层是网络层。在大多数情况下,这由 Internet 协议 (IP) 主导。这就是互联网的神奇之处,您可以与地球另一端的计算机交谈,而无需知道它在哪里。路由器负责将您的流量从本地网络引导到另一台计算机所在的网络,在该网络中,它自己的链路层负责将数据包传送到正确的计算机。

现在我们正在取得进展。我们可以与世界各地的计算机交谈,但那台计算机正在运行许多不同的程序。它应该如何知道将您的信息传递给哪一个?传输层负责处理这个问题,通常使用端口号。两种最流行的传输层协议是 TCP 和 UDP。 TCP 做了很多有趣的事情来消除网络层包交换通信的粗糙点,例如重新排序数据包、重新传输丢失的数据包等。UDP 更不可靠,但开销更少。

所以我们已经将您的浏览器连接到另一端的网络服务器软件,但是服务器如何知道您想要什么页面?您如何发布问题或答案?这些是应用层协议处理的事情。对于网络流量,这是超文本传输​​协议 (HTTP)。有数千种应用层协议:用于电子邮件的 SMTP、IMAP 和 POP3; XMPP、IRC、ICQ 用于聊天; Telnet、SSH、RDP 用于远程管理;等等

这些是 TCP/IP 网络模型的五层,但它们实际上只是概念性的。 OSI 模型有 7 层。实际上,一些协议在各个层之间进行填充,或者可以同时在多个层上工作。例如,TL​​S/SSL 在网络和传输层之间提供加密和会话信息。在应用层之上,应用程序编程接口 (API) 管理与 Quora、Twitter 和 Facebook 等 Web 应用程序的通信。

【讨论】:

  • 来自quora.com/…的不错的复制/粘贴
  • 天哪,这个答案太棒了。直到最后才发现他只是从 Quora 复制的。不过,在这里仍然很棒。
【解决方案2】:

HTTP 是一种主要用于浏览互联网的协议(IE、Firefox 等)。它位于 TCP 之上,它提供了两台计算机之间的可靠链接(如果数据包丢失 - 它会重新传输)。 TCP 本身位于 IP 之上,它提供统一的寻址以在计算机之间进行通信。 TCP/IP 是互联网和 99% 其他网络的基础。

基本上,这意味着如果您正在与 HTTP 通信,那么您是在底层使用 TCP/IP 进行的(但我相信这不是您教授的意思)。

Arduino Nano 并不支持所有这些,因此您需要介于两者之间的东西,它将 Nano 信号转换为 TCP/HTTP 通信。

您的一些选择是:

  1. 通过串口与 Nano 通信,并使 PC 将您的串口协议转换为 HTTP/TCP。
  2. 将 Nano 与其他一些支持以太网/Wifi 屏蔽扩展 (Uno/Mega) 的 Arduino 板切换,或选择本身包含以太网的自定义板。
  3. 使用另一个带有以太网屏蔽的 Arduino (Uno/Mega) 作为附加板,通过串行或借助 RF 模块与 Nano 通信(我过去曾亲自实施过此选项)。
  4. 另一个不寻常的选择是使用音频电缆将 Nano 连接到您的 Android 智能手机并使用软调制解调器库。 (https://code.google.com/p/arms22/issues/detail?id=2),其中包含 Android 的实现并为 Android 编写应用程序

您提到的Web服务器仅在定义上支持HTTP,因此如果您想通过TCP进行通信,您将需要使用一些TCP服务器。

https://xively.com/ 是现有的一个为传感器数据可视化提供图形的 Web 服务,它的 API 基于 REST,它位于 HTTP 之上。但它不是唯一的。

【讨论】:

  • @Miro 如何考虑您的选项 2 与不同的自定义板本身具有以太网?你能推荐一些板子吗?之后我应该如何前进?
  • 非常喜欢Spark平台(自带wifi)-store.spark.io/?product=spark-core
  • 如果你需要更强大的东西 - 我建议去 Udoo - udoo.org。他们做高品质的董事会。或者 Beaglebone Black (beagleboard.org/BLACK) 稍微便宜一点
【解决方案3】:

IP 与 TCP 与 HTTP

IP 视为一种允许其他协议进入并找到通往其他计算机的途径的高速公路。 TCPUDP 是高速公路上的“卡车”,它们承载的“负载”是HTTP、文件传输协议(FTP)等协议。

需要IP 连接所有网络;

TCP 是一种允许我们安全传输数据的机制,并且

HTTP 利用 TCP 传输数据,是 Web 服务器和客户端使用的特定协议。

【讨论】:

  • 更像是“以某种协议包装的数据”。
  • 迄今为止最好的、简化的和可理解的答案。
【解决方案4】:

@Miro 在技术方面很好地回答了这个问题,但是对于网络话题的新手,我想在不那么技术方面提供一个解释:

人们可能会认为 TCP 或 UDP 相当于美国邮政服务,而 HTTP 相当于一个商业信函模板。如果您正在给不认识的人写信,因为商务信函格式是一种很好的通用方式来传输您的消息的“谁、如何、什么、何时、以及在哪里”,但它不是唯一允许的格式美国邮政总局。也就是说,如果您正在写信给业务伙伴或亲人,您可能会放弃手续,而是使用更有效的格式,如账单发票、情书或贺卡,但 USPS(如 TCP 或 UDP)会仍然在你身边,来回携带信件。

【讨论】:

  • 这是一个非常好的类比。
  • 感谢您的回答,我现在有办法向不熟悉该概念的其他人解释一下
【解决方案5】:

顺便说一句,除了 HTTP 更容易编码之外,没有什么特别的理由应该首选 TCP/IP 或 HTTP。有一些与 HTTP 相关的开销,但与延迟滞后相比,它通常很小。此外,一个好的 TCP/IP 链接将有关于它的代码,以提高可靠性,这是 HTTP 免费提供的。

所以,除非所讨论的教授有一些特殊的技术要求(问!),或者除非他们希望这是某种特殊的学习体验(问!),在我看来,POST/GET 类型的交互是优越的。今天的许多系统确实以这种方式使用 JSON 对象进行通信。

【讨论】:

    【解决方案6】:

    不要混淆,你的 Proff 的意思是连接 Arduino nano Ethernet shield 并使用 http 协议将你的信息发送到 web 服务器,该服务器回复 TCP IP 和通信方式。

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2015-12-27
      • 1970-01-01
      • 2023-03-23
      • 2012-12-17
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      相关资源
      最近更新 更多