2014-04-18 103 views
32

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

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

有人可以向我解释HTTP和TCP/IP之间的区别吗?具体而言,它涉及将数据发送到Web服务器。我正在寻找一个不太技术性的答案(我对这一切都很陌生)。

最后,如果有人在那里做Arduino的经验做我上面描述的,我真的很感激一些指针。

谢谢!

+2

他们在协议阶层的不同层。看看他们的维基百科页面,或去像tcpipguide.com这样的网站,了解协议是如何分层的。 – Barmar

+1

@Barmar非常有用的链接到tcpipguide.com – Adam

回答

46

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

基本上这意味着如果你正在传送HTTP,你正在使用下面的TCP/IP(但我相信这不是你的教授的意思)。

Arduino Nano不支持所有这些,所以你需要一些介于两者之间的东西,这会将Nano信号转换为TCP/HTTP通信。

你们中的一些选项有:

  1. 与纳米通信的串行,使PC翻译你的串行协议,HTTP/TCP
  2. 开关纳米与支持以太网/ WIFI屏蔽扩展一些其他的Arduino板( Uno/Mega),或者选择一个自己包含以太网的定制板
  3. 使用带以太网屏蔽层的另一个Arduino(Uno/Mega)作为附加板,可以通过串口或在RF模块的帮助下进行通信(我亲自实施这个选项在过去)
  4. 另一个不寻常的选择是使用音频线到纳米附加到您的Android智能手机,并使用软调制解调器库(https://code.google.com/p/arms22/issues/detail?id=2),其中包含实现Android和写为Android
  5. 应用

Web服务器你提到支持HTTP只有定义,所以如果你想通过TCP通信,你将需要使用一些TCP服务器。

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

+2

@Miro我如何考虑你的选项2与不同的自定义板有自己的以太网?你能不能请建议一些董事会?那之后我应该如何前进? – ddpd

+0

我非常喜欢Spark平台(包含内置的wifi) - https://store.spark.io/?product=spark-core – Miro

+0

如果你需要更强大的东西 - 我建议去Udoo - http:// www。 udoo.org/。他们做高品质的棋盘。或稍微便宜的Beaglebone Black(http://beagleboard.org/BLACK) – Miro

8

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

有人可能会认为TCP或UDP等同于美国邮政服务,而HTTP则相当于一个商业信函模板。如果你正在给一个陌生人写信,因为商业信函格式是一种很好的,通用的方式来传送你的信息的“WHO,HOW,WHAT,WHEN和WHERE”,但它不是唯一的格式USPS。也就是说,如果您正在写信给商业伙伴或所爱的人,您可能会放弃手续,而是采用更有效的格式,如开单发票或情书或贺卡,但USPS(如TCP或UDP)将还在你身边,背着字母。

34

简而言之:TCP是一种传输层协议,而HTTP是一种通过TCP运行的应用层协议。

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

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

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

第三层是网络层。在大多数情况下,这是由互联网协议(IP)主导的。这就是互联网的魔力发生的地方,你可以在世界各地的中途与电脑交谈,而无需知道它在哪里。路由器负责将您的流量从本地网络引导至另一台计算机所在的网络,其链路层负责将数据包传送到正确的计算机。

现在我们正在某个地方。我们可以与世界各地的计算机通话,但该计算机正在运行许多不同的程序。它应该如何知道将哪一条信息传递给你?传输层负责这一点,通常使用端口号。两种最流行的传输层协议是TCP和UDP。 TCP做了很多有趣的事情来平滑网络层分组交换通信的难点,例如重新排序数据包,重新传输丢失的数据包等.UDP更不可靠,但开销较小。

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

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

+9

从https://www.quora.com/What-is-the-difference-between-HTTP-protocol-and- TCP协议 – Sally

+1

天哪这个​​答案是惊人的。只有到最后才能发现他只是从Quora复制而来。尽管如此,仍然很棒。 –