protocolo - HTTP vs TCP/IP, envía datos a un servidor web
que es el protocolo tcp/ip (5)
Actualmente estoy trabajando en un proyecto en el que necesito usar un Arduino Nano ( http://arduino.cc/en/Main/arduinoBoardNano ) para enviar datos de un sensor de temperatura a un servidor web.
Al principio pensé que sería fácil, ya que hay muchas bibliotecas geniales para ayudar con POST / GET, etc. Sin embargo, mi profesor me acaba de decir que necesito enviar datos al servidor usando TCP / IP, y como yo entiendo que POST y GET son métodos HTTP.
¿Podría alguien explicarme la diferencia entre HTTP y TCP / IP? Específicamente en lo que se refiere al envío de datos a un servidor web. Estoy buscando una respuesta que no sea demasiado técnica (soy bastante nuevo en todo esto).
Finalmente, si hay alguien con experiencia haciendo un Arduino, haga lo que he descrito arriba, realmente agradecería algunos consejos.
¡Gracias!
@Miro respondió bien la pregunta, en un discurso técnico, pero para los novatos sobre el tema de la creación de redes, me gustaría dar una explicación en un discurso no tan técnico:
Uno podría considerar TCP o UDP como el equivalente del Servicio Postal de EE. UU., Mientras que HTTP es el equivalente de una plantilla de carta comercial. Si está escribiendo a una persona desconocida, el formato de carta comercial es una manera buena y genérica de transmitir el "QUÉ, CÓMO, QUÉ, CUÁNDO Y DÓNDE" de su mensaje, pero NO es el único formato permitido por el USPS. Es decir, si está escribiendo a un socio comercial o un ser querido, puede renunciar a las formalidades y en su lugar ir con un formato más eficiente, como una factura de facturación o carta de amor o tarjeta de felicitación, pero el USPS, como TCP o UDP, todavía esté allí para usted, llevando las letras hacia adelante y hacia atrás.
De manera manual, no hay una razón especial por la que se prefiera TCP / IP o HTTP, además de que HTTP es más fácil de codificar. Existe cierta sobrecarga asociada con HTTP, pero generalmente es pequeña en comparación con los retardos de latencia. Además, un buen enlace TCP / IP tendrá un código al respecto, por confiabilidad, que HTTP proporciona de forma gratuita.
Entonces, a menos que el profesor en cuestión tenga algún requisito técnico especial (¡pregunte!), O a menos que quieran que sea una experiencia especial de aprendizaje (¡pregunte!), Me parece que una interacción POST / GET es superior. Actualmente, muchos sistemas se comunican usando objetos JSON de esta manera.
En resumen: TCP es un protocolo de capa de transporte y HTTP es un protocolo de capa de aplicación que se ejecuta sobre TCP.
Detalle: para entender la diferencia (y muchos otros temas de redes), debe comprender la idea de un modelo de red en capas. Básicamente, hay diferentes protocolos que permiten que una computadora hable a diferentes distancias y diferentes niveles de abstracción.
En la parte inferior de la pila de la red es la capa física. Aquí es donde las señales eléctricas o pulsos de luz u ondas de radio en realidad transmiten información de un lugar a otro. La capa física en realidad no tiene protocolos, sino que tiene estándares para voltajes, frecuencias y otras propiedades físicas. Puede transmitir información directamente de esta manera, pero necesita mucha potencia o una línea dedicada, y sin capas superiores no podrá compartir ancho de banda.
La siguiente capa arriba es la capa de enlace. Esta capa cubre la comunicación con dispositivos que comparten un medio de comunicación físico. Aquí, los protocolos como Ethernet, 802.11a / b / g / n, y Token Ring especifican cómo manejar múltiples accesos concurrentes al medio físico y cómo dirigir el tráfico a un dispositivo en lugar de a otro. En una red doméstica típica, así es como su computadora habla con el "enrutador" de su casa.
La tercera capa es la capa de red. En la mayoría de los casos, esto está dominado por el Protocolo de Internet (IP). Aquí es donde sucede la magia de Internet, y puedes hablar con una computadora a la mitad del mundo, sin necesidad de saber dónde está. Los enrutadores manejan dirigir su tráfico desde su red local a la red donde vive la otra computadora, donde su propia capa de enlace se encarga de llevar los paquetes a la computadora correcta.
Ahora estamos llegando a algún lado. Podemos hablar con una computadora en cualquier parte del mundo, pero esa computadora está ejecutando muchos programas diferentes. ¿Cómo debe saber a cuál enviar su mensaje? La capa de transporte se ocupa de esto, generalmente con números de puerto. Los dos protocolos de capa de transporte más populares son TCP y UDP. TCP hace muchas cosas interesantes para suavizar los puntos difíciles de la comunicación conmutada por paquetes de la capa de red, como la reordenación de paquetes, la retransmisión de paquetes perdidos, etc. UDP es menos confiable, pero tiene menos sobrecarga.
Así que hemos conectado su navegador al software del servidor web en el otro extremo, pero ¿cómo sabe el servidor qué página quiere? ¿Cómo puedes publicar una pregunta o una respuesta? Estas son cosas que los protocolos de capa de aplicación manejan. Para el tráfico web, este es el Protocolo de transferencia de hipertexto (HTTP). Hay miles de protocolos de capa de aplicación: SMTP, IMAP y POP3 para correo electrónico; XMPP, IRC, ICQ para chat; Telnet, SSH, RDP para administración remota; etc.
Estas son las cinco capas del modelo de red TCP / IP, pero en realidad son solo conceptuales. El modelo OSI tiene 7 capas. En realidad, algunos protocolos se ajustan entre varias capas, o pueden trabajar en varias capas a la vez. TLS / SSL, por ejemplo, proporciona encriptación e información de sesión entre la red y las capas de transporte. Por encima de la capa de aplicación, las interfaces de programación de aplicaciones (API) rigen la comunicación con aplicaciones web como Quora, Twitter y Facebook.
HTTP es un protocolo utilizado principalmente para navegar por Internet (IE, Firefox, etc.). Se monta sobre TCP que proporciona un enlace confiable entre dos computadoras (si el paquete se pierde, se retransmite). El TCP se monta encima de IP, que proporciona un direccionamiento unificado para comunicarse entre computadoras. TCP / IP es una base para Internet y el 99% de otras redes.
Básicamente significa que si estás comunicando HTTP, lo estás haciendo con TCP / IP debajo (pero estoy seguro de que esto no es lo que quiso decir el profesor).
Arduino Nano no es compatible con todos estos, por lo que necesita algo intermedio, lo que traducirá la señalización Nano a la comunicación TCP / HTTP.
Algunas de tus opciones son:
- Comunicándose con Nano sobre Serial y haciendo que PC traduzca su protocolo Serial a HTTP / TCP
- Cambie Nano con otra placa Arduino que admita la extensión de blindaje Ethernet / Wifi (Uno / Mega), o elija una placa personalizada que contenga Ethernet por sí misma
- Usando otro Arduino (Uno / Mega) con blindaje Ethernet como una placa adicional que se comunica con Nano en serie o con la ayuda de módulos de RF (personalmente implementé esta opción en el pasado)
- Otra opción inusual es conectar Nano a su teléfono inteligente Android usando un cable de audio y usar la biblioteca de módem blando ( https://code.google.com/p/arms22/issues/detail?id=2 ), que contiene la implementación para Android y escribe una aplicación para Android
El servidor web que menciona solo admite HTTP por definición, por lo que si desea comunicarse a través de TCP, necesitará utilizar algún servidor TCP.
Uno de los servicios web existentes para proporcionar gráficos para visualizar los datos del sensor es https://xively.com/ , su API se basa en REST, que se coloca encima de HTTP. Pero no es el único.
No se confunda, lo que significa su Proff es conectar el blindaje Ethernet de Arduino nano y usar el protocolo http para enviar su información al servidor web que responde a través de TCP IP y medios de comunicación.