HTTP vs TCP/IP, send data to a web server

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

起初我认为这很容易,因为有很多很棒的库可以帮助 POST/GET 等。然而,我的教授刚刚告诉我,我需要使用 TCP/IP 向服务器发送数据,据我所知,POST 和 GET 是 HTTP 方法。

有人能给我解释一下 HTTP 和 TCP/IP 之间的区别吗?特别是当它涉及到向 Web 服务器发送数据时。我在寻找一个不太专业的答案(我对这一切都很陌生)。

最后,如果有人有使用 Arduino 执行我上面描述的操作的经验,我将非常感谢一些建议。

谢谢!

98529 次浏览

HTTP is a protocol used mostly for browsing the internet (IE, Firefox, etc). It rides on top of TCP which provides a reliable link between two computers (if packet get lost - it is re-transmitted). TCP itself rides on top of IP, which provides unified addressing to communicate between computers. TCP/IP is a basis for internet and 99% of other networks.

基本上,它意味着如果你正在通信 HTTP,你正在做它与 TCP/IP 底下(但我肯定这不是你的教授的意思)。

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

你的一些选择是:

  1. 通过 Serial 与 Nano 进行通信,并使 PC 将您的 Serial 协议转换为 HTTP/TCP。
  2. Switch Nano with some other Arduino board which supports Ethernet/Wifi shield extension (Uno/Mega), or choosing a custom board which contains Ethernet by itself.
  3. 使用另一个带有以太网屏蔽的 Arduino (Uno/Mega)作为附加板,它可以通过 Serial 与 Nano 或 RF 模块进行通信(我过去亲自实现了这个选项)。
  4. 另一个不寻常的选择是使用音频线将 Nano 连接到您的 Android 智能手机,并使用软调制解调器库。(https://code.google.com/p/arms22/issues/detail?id=2) ,它包含 Android 的实现,并为 Android 编写一个应用程序

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

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

@ Miro 用专业术语很好地回答了这个问题,但是对于网络这个话题的新手,我想用非专业术语解释一下:

One might regard TCP or UDP as the equivalent of the US Postal Service, while HTTP is the equivalent of one business letter template. If you are writing to an unknown person, as business letter format is a good, generic way to transmit the "WHO,HOW,WHAT,WHEN,AND WHERE" of your message, but it is NOT the only format that is allowed by the USPS. That is, if you are writing to a business associate or loved one, you might forgo the formalities and instead go with a more efficient format, like a billing invoice or love letter or greeting card, but the USPS, like TCP or UDP, will still be there for you, carrying the letters back and forth.

In Short: TCP is a transport-layer protocol, and HTTP is an application-layer protocol that runs over TCP.

Detail:To understand the difference (and a lot of other networking topics), you need to understand the idea of a layered networking model. Essentially, there are different protocols that let a computer talk at different distances and different layers of abstraction.

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

下一层是链接层。这一层包括与共享物理通信介质的设备的通信。在这里,像以太网、802.11 a/b/g/n 和令牌环(Token Ring)这样的协议规定了如何处理对物理媒体的多个并发访问,以及如何将流量导向一个设备而不是另一个设备。在一个典型的家庭网络中,这是你的计算机如何与你的家庭“路由器”交谈

第三层是网络层。在大多数情况下,这是由互联网协议(IP)占主导地位。这就是互联网的魔力发生的地方,你可以和地球另一边的电脑交谈,而不需要知道它在哪里。路由器处理将您的流量从您的本地网络指向其他计算机所在的网络,在那里它自己的链路层处理将数据包传送到正确的计算机。

现在我们有进展了。我们可以和世界各地的计算机对话,但是那台计算机运行着许多不同的程序。它怎么知道把你的信息传递给哪一个?传输层负责这一点,通常使用端口号。两个最流行的传输层协议是 TCP 和 UDP。TCP 做了很多有趣的事情来平滑网络层数据包交换通信的障碍,比如重新排序数据包、重新传输丢失的数据包等等。UDP 更不可靠,但开销更小。

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

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

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

So, unless the professor in question has some special technical requirement (ask!), or unless they want this to be some kind of special learning experience (ask!), it seems to me that a POST/GET-type interaction is superior. Many systems today indeed communicate using JSON objects in this manner.

IP vs. TCp vs. HTTP

可以将 IP看作是一种高速公路,允许其他协议进入其他计算机并找到它们的路径。TCPUDP是高速公路上的“卡车”,它们所携带的“负载”是诸如 HTTP、文件传输协议(FTP)等协议。

需要 IP连接所有网络;

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

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