2011-02-01 12 views
6

Normalmente utilizo conexiones de puerto serie cableadas entre dispositivos integrados para protocolos personalizados de comando/respuesta/estado. En esta aplicación planeo usar la pila TCP/IP de microchip y el módulo Wi-Fi sin OS para intercambiar comandos y respuestas cortos (< = 100 bytes). La pila está en funcionamiento en un kit de desarrollo de ethernet de microchip y puedo hacer ping desde mi escritorio (sin usar el módulo de Wi-Fi todavía). Supongo que podría piratear ping (microchip proporciona la fuente c para la pila) y agregar los mensajes que necesito, pero estoy buscando el método correcto/más simple/mejor.Forma más sencilla para enviar mensajes cortos utilizando TCP/IP

+0

Qué hardware/kit está usando por curiosidad. como también estoy interesado en hacer algo similar. –

Respuesta

6

Corregir/más simple/mejor no son necesariamente lo mismo. Pero si yo fuera tú, consideraría usar UDP en lugar de TCP.

UDP es un protocolo de datagrama; TCP está orientado a flujos y tiene muchos más gastos generales (y beneficios que vienen con los gastos generales). Pero el UDP coincide más con el enfoque actual orientado a bytes del paquete (orientado a paquetes) que tiene hoy.

Lo más probable es que tenga algún protocolo de nivel superior que reciba/buffers/checksums/delimits/parses la secuencia de datos que recibe del UART. Si usa UDP, puede imitar esto muy bien con una implementación ligera y ligera de UDP. Con UDP, acaba de disparar los bytes (paquetes) & cruce los dedos que llegaron al otro extremo (muy parecido a la serie).

TCP es un protocolo basado en la conexión más pesado con reenvío incorporado, reconocimientos, entrega en orden, temporizadores, algoritmos de restitución, etc. En la mayoría de los sistemas integrados que he trabajado con TCP (varias pilas diferentes), UDP es de peso ligero & supera a TCP en términos de tamaño de código & rendimiento.

Además, no olvide que TCP se utiliza como columna vertebral de Internet; algunos paquetes pasan a través de una docena o más de saltos (enrutadores/puertas de enlace) en ruta hacia el destino final. Hay muchos lugares para que los paquetes se eliminen, por lo que TCP maneja una gran cantidad de detalles desordenados de forma transparente. Supongo que en su sistema/situación, estamos hablando de una LAN (todos en el mismo cable) y la transmisión será bastante confiable ... por lo tanto, la sobrecarga TCP no es realmente necesaria.

Hay momentos en que los beneficios de TCP justifican la sobrecarga, pero a partir de lo que ha escrito creo que debería considerar la configuración básica de un datagrama UDP. Simplemente google "simple udp example" y verás la estructura básica. Por ejemplo, here is a simple UDP client/server example usando solo 43 líneas (servidor) y 30 líneas (cliente).

+0

Respuesta algo errónea. El riesgo de UDP de entrega de paquetes y pedidos fuera de servicio es sustancialmente diferente de las condiciones normales en una línea serie, que TCP emula mucho más de cerca. Los principales problemas con TCP son la conexión de estado completo (la reconexión se implementa correctamente) y el retardo de bloqueo de nagle difícil de desactivar en el extremo del PC del cliente que puede insertar retrasos de 200 ms en la comunicación de consulta/respuesta.Si no puede tolerar eso, entonces la implementación de su propia capa de confiabilidad sobre el UDP vale la pena; si puede, TCP será un reemplazo directo más directo para el serial. –

+0

@Chris en una red conmutada a una carga razonable UDP estará bien. Un simple paquete de ACK cubrirá el 99% de los casos que Jack necesita. Gran base instalada de producto, en todo el mundo. También tolera los enlaces de radio mejor. –

+0

No debe cometer el error de diseñar en torno a una suposición que el protocolo subyacente explícitamente no garantiza. Si va a utilizar UDP, debe poder recuperar los paquetes perdidos y mal ordenados, sin importar cuán poco probable puedan parecer en su red de prueba. –

2

Cuando tiene una pila TCP/IP, debe proporcionar una función send() para enviar algunos mensajes de datos.

Algunos dispositivos pequeños vienen solo con una implementación simple de UDP/IP, ya que esto es mucho más simple. Si no necesita el control de secuencia y la confiabilidad de TCP, podría considerar usar UDP para enviar mensajes cortos. Esto es mucho mejor para piratear los mensajes ICMP.

Pero si necesita la comodidad y la fiabilidad del protocolo de flujo TCP, no reinvente esto en base a IUDP. Usualmente no puedes hacerlo mejor, de manera más eficiente y con menos esfuerzo.

Cuestiones relacionadas