Home UC3M
Home IT

Implementación de RFC 2131: Dynamic Host Configuration Protocol (DHCP)

 INTRODUCCIÓN


Nota: modificaciones importantes para Septiembre 2009 en rojo.

El objetivo de esta práctica es desarrollar una implementación simplificada del protocolo RFC 2131: Dynamic Host Configuration Protocol (DHCP), que permite a dispositivos de red (clientes) la obtención de los parámetros necesarios para su conexión a una red. DHCP es tanto un protocolo de arranque como de autoconfiguración. Es un protocolo de arranque ya que permite obtener los parámetros necesarios para el arranque del ordenador (por ejemplo, permite localizar una imagen del sistema operativo que posteriormenente es descargada por TFTP). Y es también un protocolo de autoconfiguración, ya que detalla el mecanismo para la obtención de direcciones IP y otros parámetros.

DHCP apareció como estándar (RFC 1531) en Octubre de 1993, mejorando al protocolo BOOTP como protocolo de arranque y autoconfiguración. Posteriormente, la RFC 2131, que sustituyó a la anterior, se convirtió en el estándar actual de DHCP. El último desarrolo es DHCP sobre IPv6, definido en la RFC 3315. Esta práctica se centra exclusivamente en la RFC 2131.


 OBJETIVOS


Los objetivos de la práctica son los siguientes:

  1. Enfrentarse a la implementación de un protocolo de nivel de aplicación real, partiendo de su especificación original y de la interpretación de su RFC.
  2. Conocer el funcionamiento de los protocols de arranque y autoconfiguración, como DHCP, BOOTP y RARP. BOOTP (BOOTstrap Protocol) es un protocolo anterior a DHCP pero similar a él (de hecho, usa el mismo formato de mensajes) y definido en la RFC 1542, que tiene como inconveniente que no permite asignación dinámica de direcciones IP. RARP (Reverse Address Resolution Protocol) es un protocolo que funciona a nivel de subred para la obtención de una dirección IP a partir de una dirección de subred (48 bits).
  3. Profundizar en el conocimiento de los protocolos estudiados en las clases teóricas.
  4. Adquirir conocimientos de programación con sockets UDP, raw sockets, y mensajes de Broadcast.


 ENUNCIADO


El lenguaje de desarrollo debe ser lenguaje C sobre sistema operativo Linux y debe funcionar en los ordenadores de los laboratorios docentes de Ingeniería Telemática, donde se realizará la corrección presencial (véanse detalles sobre máquinas disponibles más abajo).

Es obligatorio utilizar el parámetro -Wall de gcc en todas las compilaciones. Las prácticas deben compilar sin ningún warning ó error. Las prácticas no deben tener fugas de memoria (se utilizará valgrind para comprobarlo). Las instrucciones de entrega se enviarán antes del examen, básicamente deberán incluir la entrega del código fuente (sólo ficheros .c y .h), un fichero Makefile que lo compile y un fichero README con detalles como el nombre, email y número de grupo. No se corregirán prácticas que no cumplan con lo anterior, es decir, no se corregirán prácticas que contengan fugas de memoria, warnings ó errores durante la compilación.

En la práctica se va a implementar una versión simplificada de la RFC. Las simplicaciones están indicadas más abajo. La RFC completa está accesible desde el siguiente enlace: RFC 2131. El estándar RFC 2131 define tanto el funcionamiento del cliente como del servidor para la obtención de parámetros de arranque y autoconfiguración. Sin embargo, para la realización de la práctica sólo se exige implementar el cliente. Debido a que es necesario ser root para la implementación de la práctica, se va a suministrar un entorno de pruebas con todo el software ya instalado, incluído un servidor DHCP básico.

  • Funcionamiento básico::

    A continuación se explica el funcionamiento básico del protocolo DHCP, junto con algún ejemplo. No es objetivo de este enunciado el explicar el protocolo en profundidad: debe ser el alumno, a través de la lectura de la RFC quien complete los detalles necesarios para la correcta implementación de la práctica.

    El protocolo DHCP maneja distintos tipos de paquetes de los cuales es obligatorio implementar/reconocer estos seis: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK, DHCPNACK, DHCPRELEASE y DHCPDECLINE.

    DHCP funciona sobre UDP exclusivamente, y es uno de los pocos protocolos que usa puertos específicos tanto para servidor (puerto 67) como para cliente (puerto 68). DHCP permite obtener diversos parámetros, como dirección IP, máscara de subred, fichero de arrranque, DNS, servidor de impresión, etc... Como ejemplo, para obtener una dirección IP, un cliente debe intercambiar los siguientes mensajes con el servidor (véase figura):

    • DHCPDISCOVER, enviado por el cliente. Se trata de un mensaje UDP multicast que es recibido por los servidores DHCP.
    • DHCPOFFER, enviado por el/los servidores, donde ofertan varias direcciones IP, sobre las que el cliente debe escoger.
    • DHCPREQUEST, enviado por el cliente, que es un mensaje UDP (puede ser unicast ó multicast) para solicitar una dirección específica.
    • DHCPACK, enviado por el servidor, confirmando esa IP.

    Existen otros mensajes como DHCPNACK, DHCPRELEASE y DHCPDECLINE, no mostrados en la figura anterior, que son también obligatorios implementar/reconocer. DHCPDECLINE se envía por el cliente para rechazar una dirección IP ofertada (por ejemplo, por estar ya en uso).

    La implementación obligatoria es por tanto, la de un cliente DHCP, el cual debe implementarse con las consideraciones siguientes:

  • Ejecutable y parámetros: véase página de manual de dhcpcl.


  • Ejemplos y formatos de entrada/salida:véase página de manual de dhcpcl.


  • Trazas: véase página de manual de dhcpcl.


  • Notas:
    • Todos los mensajes deben mostrarse por la salida estándar, excepto los mensajes de error, que deben mostrarse por la salida de error estándar.
    • Una vez recibidos los parámetros del servidor, el cliente, después de comprobar que la dirección IP no está en uso en otra máquina, sólo tendrá que configurar la dirección IP, la máscara de subred y el gateway (router). El resto de datos que puede mandarnos el servidor DHCP pueden ser ignorados por el cliente.

  • Modificaciones obligatorias para Septiembre:
    • Es obligatorio la implementación de los estados REBINDING y RENEWING, y también el uso de los temporizadores T1, T2 (véase Figura 5 de la RFC). Según la RFC, una vez que el cliente esté en estado BOUND, existen tres temporizadores (T1 < T2 < leasetime) que se activan y que producen la transición hacia otros estados y el envío de diversos mensajes.
      • Si expira T1, el cliente entra en estado RENEWING y envía un DHCPREQUEST unicast pidiendo que se le extienda el tiempo de arriendo.
      • Si expira T2 sin recibir DHCPACK, el cliente entra en estado REBINDING y envía un DHCPREQUEST broadcast.
    • En esta práctica, desde los estados BOUND, REBINDING y RENEWING, se saldrá del programa mediante SIGUSR2.
    • Es imprescindible que el cliente compruebe la IP recibida mediante ARP.
    • No se permiten el uso de scripts de ningún tipo durante el examen.
    • Es obligatorio una compilación sin errores ni avisos, y utilizar la opción -Wall con gcc
    • Se utilizará valgrind para detectar fugas de memoria en una ejecución báasica con un servidor y terminando el comando con SIGUSR2 o con SIGINT (Ctrl+C). Es obligatorio indicar las opciones -q y --leak-check=full


  • Simplificaciones a la RFC:
    • No es necesaria la implementación del mensaje DHCPINFORM.
    • No es necesaria ninguna implementación relativa a multi-homed hosts.
    • El único nivel de enlace obligatorio que debe soportarse es Ethernet.
    • Si el cliente recibe múltiples respuestas de varios servidores, el cliente debe elegir una de ellas. Se deja a libre elección el procedimiento para elegirla.
    • Todo lo que aparezca reflejado en la RFC como MAY ó SHOULD es opcional. Todo lo que aparezca como MUST es obligatorio de implementar.


  • Consideraciones sobre temporizadores y timeouts: se utilizarán siempre los valores RECOMMENDED de la RFC.


  • Consideraciones sobre sockets: es obligatorio usar sockets UDP siempre que se pueda (pej: DHCPRELEASE, DHCPDECLINE). Cuando no sea posible (DHCPDISCOVER, DHCPREQUEST, ARP) se usarán raw sockets ó packet sockets. Es decir, la implementación del cliente deberá llevar obligatoriamente una mezcla de los dos tipos de sockets.


  • Acceso remoto a las máquinas del laboratorio:
    • Desde casa, hay que conectarse a una de las siguientes máquinas de los laboratorios 7.0.J02, 7.0.J03, 4.1B01, 1.1A16, cuyo FQDN es el siguiente:
      • jbit101.lab.it.uc3m.es - jbit156.lab.it.uc3m.es
      • it001.lab.it.uc3m.es - it020.lab.it.uc3m.es
      • lm001.lab.it.uc3m.es - lm010.lab.it.uc3m.es
      • ctel001.lab.it.uc3m.es - ctel018.lab.it.uc3m.es
    • Dichas máquinas están encendidas durante el día y se apagan a las 23:00. Los fines de semana permanecen apagadas. .
    • Para conectarse a dichas máquinas hay que utilizar ssh (con opción -X). El acceso ssh a dichas maquinas está filtrado desde fuera de la universidad, por lo que desde fuera de la universidad hay que conectarse previamente a alguna de las siguientes: :
      • monitor01.lab.it.uc3m.es
      • monitor02.lab.it.uc3m.es
      • monitor03.lab.it.uc3m.es
    • La firma RSA para muchas de las máquinas anteriores es: dc:a9:3e:f6:51:98:54:dc:56:61:0e:96:c6:7a:70:a5 (en caso contrario, compruébese con los técnicos del laboratorio).
    • No se recomienda el uso de monitor0x para el desarrollo de la práctica, debido a que algunas de ellas todavía corren un kernel preemptivo. Para comprobar si el kernel es preemptivo, se puede usar el comando uname -a:
        Linux monitor02 2.6.26 #3 SMP PREEMPT Fri Jul 18 12:07:07 CEST 2008 i686 GNU/Linux

Se ha creado una página de manual para la implementanción propuesta en esta práctica de dhcp, que resume la información de formatos de entrada y salida y trazas. También se puede descargar en formato HTML, PDF, ó TXT.


 EVALUACIÓN

La evaluación de la práctica se realizará de forma presencial y su nota tendrá un peso del 40% sobre la nota final de la asignatura. Para que se haga media con el examen teórico debe obtenerse una nota superior o igual a 5.

Fechas importantes

  • Sólo para los alumnos autorizados al adelanto de convocatoria en Mayo:
    • 15 de Mayo de 2009 a las 23:59 (provisional): Entrega por Aula Global
    • 22 de Mayo de 2009 (provisional): Examen presencial en laboratorio.

  • Septiembre 2009:
    • 25 de Agosto de 2009 a las 23.59: Entrega por Aula Global
    • 1 de Septiembre de 2009: Examen presencial en laboratorio.

 ENLACES

Práctica

RFC

  • RFC 2131 (obsoletes 1541) "Dynamic Host Configuration Protocol". R. Droms, Bucknell University, March 1997
  • RFC 2132 "DHCP Options and BOOTP Vendor Extensions". S. Alexander, R. Droms, March 1997

Libros

  • W. R. Stevens: "Unix network programming".Volume 1.Networking APIs-Sockets and XTI (L/S 004.451.9 UNIX STE )

Información sobre sockets





inicio | contacta