Articulo de referencia

uIP (software)

uIP es una implementación de código abierto de la pila de protocolos de red TCP/IP, diseñada para su uso con microcontroladores de 8 y 16 bits . Fue desarrollada inicialmente po...

uIP es una implementación de código abierto de la pila de protocolos de red TCP/IP, diseñada para su uso con microcontroladores de 8 y 16 bits . Fue desarrollada inicialmente por Adam Dunkels, del grupo de Sistemas Embebidos en Red del Instituto Sueco de Ciencias de la Computación , bajo una licencia de estilo BSD, y posteriormente desarrollada por un amplio grupo de programadores.

uIP puede ser muy útil en sistemas embebidos porque requiere cantidades muy pequeñas de código y RAM. Se ha portado a varias plataformas, [ 2 ] [ 3 ] [ 4 ] incluyendo plataformas DSP . [ 5 ]

En octubre de 2008, Cisco , Atmel y SICS anunciaron una extensión de IPv6 totalmente compatible con uIP, llamada uIPv6. [ 6 ]

Implementación

uIP adopta numerosas decisiones de diseño poco convencionales para reducir los recursos que requiere. Su interfaz de software nativa está diseñada para sistemas informáticos pequeños sin sistema operativo. Se puede invocar en un bucle temporizado, y la llamada gestiona todos los reintentos y demás comportamiento de la red. El controlador de hardware se ejecuta después de la llamada a uIP. uIP construye el paquete, el controlador lo envía y, opcionalmente, recibe una respuesta.

Es habitual que el software de la pila de protocolos IP almacene múltiples copias de diferentes paquetes IP para su transmisión, recepción y como respaldo en caso de que sea necesario reenviarlos. uIP optimiza el uso de memoria al utilizar un único búfer de paquetes. En primer lugar, utiliza este búfer en modo semidúplex, alternándolo entre la transmisión y la recepción. Además, cuando uIP necesita retransmitir un paquete, llama al código de la aplicación para solicitar la reproducción de los datos anteriores.

Otra peculiaridad reside en la forma en que uIP gestiona las conexiones. La mayoría de las implementaciones de IP asignan una tarea por conexión, la cual se comunica con otra tarea en un ordenador remoto al otro extremo de la conexión. En uIP, no se presupone un sistema operativo multitarea. Las conexiones se almacenan en un array. En cada llamada, uIP intenta atender una conexión, realizando una llamada a una subrutina que ejecuta el código de la aplicación para responder o enviar datos. El tamaño del array de conexiones es un valor que se puede ajustar al recompilar uIP.

uIP cumple plenamente con los RFC que definen TCP , UDP e IP . Además, implementa el protocolo de mantenimiento obligatorio ICMP .

Versiones

uIP 0.9 [ 7 ] es la versión con menor dependencia de sistemas operativos, el menor consumo de recursos y la única que presenta una API de bucle de eventos pura , pero en su forma original no admite la versión 6 de IP, solo la versión anterior y más común, IPv4. Puede utilizarse en sistemas embebidos con muy pocos recursos.

Se entregó con un conjunto de ejemplos de protocolos de nivel superior que también se ejecutan en un sistema de bucle de eventos, incluyendo HTTP (un servidor web simple), SMTP (protocolo simple de transmisión de correo), FTP (protocolo de transferencia de archivos), telnet (emulación de terminal) y otros. A pesar de los ejemplos y su pequeño tamaño, uIP 0.9 puede ser difícil de aplicar porque no utiliza ningún tipo de API de sockets . [ 8 ]

El código uIP es ampliamente utilizado, pero presenta debilidades bien conocidas. Su diseño minimiza y separa la aritmética de 32 bits para poder ajustarlo u optimizarlo para procesadores de 8 y 16 bits. Además, los temporizadores de software de 16 bits (comunes en microcontroladores pequeños) pueden desbordarse y provocar un funcionamiento defectuoso. Esto se puede solucionar con un sistema de temporizadores que no se desborde (por ejemplo, que los temporizadores cuenten hacia atrás o utilicen aritmética modular ).

Otro problema es que su único búfer de paquetes puede presentar problemas de rendimiento sustanciales, ya que un host PC suele retrasar el paquete "ACK" a la espera de más paquetes. En implementaciones lentas de puerto serie , el rendimiento del ACK se puede solucionar modificando uIP para que envíe cada paquete como dos fragmentos de medio paquete. Los sistemas uIP con Fast Ethernet o Wi-Fi pueden modificar el controlador de hardware para que envíe cada paquete dos veces. [ 5 ]

Algunos ordenadores no responden correctamente a un sistema uIP rápido en una red Ethernet local, ya que el sistema uIP puede iniciar un paquete de respuesta antes de que el ordenador esté listo para recibirlo. La solución consiste en llamar al sistema uIP con menos frecuencia en el bucle principal (los ordenadores con Windows están diseñados para un tiempo de respuesta de aproximadamente 1 milisegundo). Las implementaciones típicas de uIP tienen una dirección IP fija, lo que puede hacerlas poco prácticas en redes reales, aunque algunas han implementado DHCP . [ 9 ] [ 10 ]

Las versiones posteriores de uIP, incluida la versión de referencia de uIPv6, están integradas con Contiki , un sistema operativo que utiliza corrutinas para la multitarea cooperativa. Contiki proporciona la multitarea necesaria mediante una API de sockets simplificada , lo que simplifica el uso de uIP. Sin embargo, estas versiones pueden ser menos populares que la 0.9. Muchos ejemplos de código embebido no las utilizan. [ 11 ] [ 12 ] [ 13 ]

Véase también

Referencias

  1. "Versión 1.0" . 27 de marzo de 2013. Consultado el 18 de marzo de 2019 .
  2. Metzinger, Zach (25 de marzo de 2008). "NOTA DE APLICACIÓN 4205 - Uso de la pila uIP para conectar en red un microcontrolador MAXQ" . Maxim Integrated Products, Inc. Recuperado el 2 de febrero de 2015 .
  3. "AN057 – Pila TCP/IP uIP V1.0 para eCOG1k y eCOG1X, versión 1.0" (PDF) . Cyan Technology Ltd. 28 de enero de 2008. Archivado del original (PDF) el 18 de febrero de 2012. Consultado el 18 de febrero de 2012 .
  4. Curtis, Paul. "UIP de Adam Dunkel en Olimex EasyWeb2 y LPC-E2124" . Rowley Associates Limited . Consultado el 2 de febrero de 2015 .
  5. 1 2 Barnett, Drew; Massa, Anthony J. (1 de febrero de 2005). "Dentro de la pila uIP" . Dr Dobbs Journal . Recuperado el 2 de febrero de 2015 .
  6. "Cisco, Atmel y el Instituto Sueco de Ciencias de la Computación (SICS) colaboran para impulsar un futuro en el que cualquier dispositivo pueda conectarse a Internet" . Cisco . 14 de octubre de 2008. Consultado el 2 de febrero de 2015 .
  7. Dunkels, Adam. "Lanzamientos etiquetados" . Lanzamientos etiquetados de uIP en GitHub . Consultado el 2 de febrero de 2015 .
  8. Consulte el sitio web original de Dunkel, arriba, en la Wayback Machine.
  9. Ver el código de ejemplo de Code-Red para la PCB RDB4078, 2012 .
  10. Dunkel proporcionó código de ejemplo para DHCP.
  11. Metzinger, arriba
  12. Ejemplos de sitios web de FreeRTOS, 2013
  13. Ejemplos de Código Rojo, arriba.
  • Fuente uIP
  • Puerto uIP para microcontroladores AVR
  • Servidor web basado en uIP que utiliza un SoC integrado OpenRISC.