HTTP与TCP / IP,将数据发送到Web服务器

时间:2014-04-18 16:04:36

标签: http arduino tcp-ip

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

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

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

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

谢谢!

6 个答案:

答案 0 :(得分:62)

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

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

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

有些选项是:

  1. 使用Nano over Serial进行通信,并使PC将您的串行协议转换为HTTP / TCP
  2. 使用支持以太网/ Wifi屏蔽扩展(Uno / Mega)的其他Arduino板切换Nano,或者选择包含以太网的自定义板
  3. 使用另一个带有以太网屏蔽的Arduino(Uno / Mega)作为附加板,通过串口或借助RF模块进行通信(我个人在过去亲自实现了此选项)
  4. 另一个不寻常的选择是使用音频线将Nano连接到Android智能手机并使用软调制解调器库(https://code.google.com/p/arms22/issues/detail?id=2),其中包含Android的实现并为Android编写应用程序
  5. 您提到的Web服务器仅按定义支持HTTP,因此如果您想通过TCP进行通信,则需要使用某些TCP服务器。

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

答案 1 :(得分:57)

  

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

     

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

     

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

     

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

     

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

     

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

     

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

     

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

答案 2 :(得分:9)

@Miro在技术讲话中很好地回答了这个问题,但对于关于网络主题的新手,我想以不那么技术性的方式提供解释:

有人可能认为TCP或UDP等同于美国邮政服务,而HTTP相当于一个商业信函模板。如果您正在写一个不知名的人,因为商业信函格式是传递您的信息的“WHO,HOW,WHAT,WHEN,AND WHERE”的一种好的,通用的方式,但它不是唯一允许的格式。 USPS。也就是说,如果您正在写信给商业伙伴或亲人,您可以放弃手续,而是采用更有效的格式,如账单发票或情书或贺卡,但USPS,如TCP或UDP,将仍然在那里,来回携带信件。

答案 3 :(得分:3)

IP与TCp与HTTP

IP考虑为一种高速公路,它可以使其他协议继续前进并找到通往其他计算机的方式。 TCPUDP是高速公路上的“卡车”,它们承载的“负载”是诸如HTTP,文件传输协议(FTP)之类的协议。 。

必须

IP才能连接所有网络;

TCP是一种机制,可让我们安全地传输数据并

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

答案 4 :(得分:1)

除了HTTP更容易编码之外,没有特别的理由可以选择TCP / IP或HTTP。 HTTP存在一些开销,但与延迟滞后相比通常很小。此外,一个好的TCP / IP链接将具有关于它的代码,以获得HTTP免费提供的可靠性。

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

答案 5 :(得分:0)

请不要感到困惑,您的Proff意味着连接Arduino nano以太网屏蔽并使用http协议将您的信息发送到Web服务器,该服务器通过TCP IP和通信方式进行答复。