DHCP¶
Dynamic Host Configuration Protocol.
Viene por UDP
Puerto 68 en cliente
Puerto 67 en servidor
Es la evolución del protocolo BOOTP.
Header¶
Message type (OP) (1 byte): Indica petición (1) o respuesta (2).
Hardware type (HTYPE) (1 byte): Protocolo de enlace, si es Ethernet es 1.
Hardware address length (HLEN) (1 byte): Longitud de la dirección de enlace en bytes, si es Ethernet es 6.
Hops (HOPS) (1 byte): Empieza en cero, cada gateway incrementa el salto, si llega a 3 se supone que hubo un bucle.
Transaction ID (XID) (4 bytes): Número aleatorio que identifica a esta transacción (DHCPDISCOVER, DHCPOFFER, DHCPREQUEST y DHCPACK).
Seconds elapsed (SECS) (2 bytes): Fijado por el cliente, segundos desde que el cliente arrancó.
BOOTP flags (FLAGS) (2 bytes): Solamente se usa el primer bit para indicar si el cliente quiere que el servidor responda como broadcast (1) o unicast (0). Se usa siempre unicast salvo en clientes que no puedan recibir unicast antes de inicializar su stack TCP/IP.
Client IP (CIADDR) (4 bytes): Generalmente es
0.0.0.0salvo por ejemplo cuando se hace una renovación.Your IP (YIADDR) (4 bytes): Fijado por el servidor si CIADDR era
0.0.0.0.Server IP (SIADDR) (4 bytes): IP del servidor, fijada por el servidor.
Relay IP (GIADDR) (4 bytes): Fijado por el relay si es que se está usando uno.
Client MAC (CHADDR) (16 bytes): Fijada por el cliente, como sobra espacio tiene padding de ceros.
Server hostname (SNAME) (64 bytes): Es opcional, pero si no se usa queda el espacio vacío con ceros.
Boot filename (FILE) (128 bytes): En DHCPDISCOVER no tiene nada, en DHCPOFFER el servidor fija un nombre de archivo.
Opciones (OPTIONS) (variable): Ver abajo
Opciones¶
Hay muchísimas, pongo las mas usadas:
Generales, se usan siempre:
DHCP Message type (53): Indica el tipo de mensaje, por ejemplo:
DHCPDISCOVER: 1
DHCPOFFER: 2
DHCPREQUEST: 3
DHCPACK: 5
Endmark (255): Indica fin de opciones.
Usadas en DHCPDISCOVER y DHCPREQUEST.
Parameter request list (55): Lista de parámetros que requiere el cliente. Son varios números que se corresponden a las opciones que explico abajo.
Usadas en DHCPOFFER y DHCPACK.
Subnet mask (1): Máscara de red a usar por el cliente
Router (3): Gateway a usar por el cliente.
IP address lease time (51): Tiempo de lease para la IP dada.
DNS servers (8): Servidores DNS para el cliente.
DHCP server identifier (54): IP del servidor DHCP.
Usadas en DHCPREQUEST:
Requested IP address (50): IP que el cliente está solicitando.
Funcionamiento¶
Los datagramas más importantes son DHCPDISCOVER, DHCPOFFER, DHCPREQUEST y DHCPACK:
Descubrimiento (DHCPDISCOVER): Cliente pregunta que DHCPs hay.
Origen:
MAC: MAC Cliente.
IP:
0.0.0.0.Puerto: 68.
Destino:
MAC:
FF:FF:FF:FF:FF:FF.IP:
255.255.255.255.Puerto: 67
DHCP:
YIADDR:
0.0.0.0.DHCP message type: 1 (Discover).
Lista de parámetros requeridos.
Oferta (DHCPOFFER): Servidores DHCP reservan una IP y la ofrecen, indicando además el tiempo de lease (arrendamiento).
Origen:
MAC: MAC Servidor.
IP: IP Servidor.
Puerto: 67.
Destino:
MAC: MAC Cliente
IP: IP propuesta para Cliente.
Puerto: 68
DHCP:
YIADDR: IP propuesta para cliente.
DHCP message type: 2 (Offer).
Tiempo de lease, máscara de red, gateway, DNS.
Solicitud (DHCPREQUEST): Cliente pide a un servidor DHCP esa IP, es broadcast para avisarle a los potenciales otros servidores que no los elegi.
Origen:
MAC: MAC Cliente.
IP:
0.0.0.0.Puerto: 68.
Destino:
MAC:
FF:FF:FF:FF:FF:FF.IP:
255.255.255.255.Puerto: 67
DHCP:
YIADDR:
0.0.0.0.DHCP message type: 3 (Request).
Lista de parámetros requeridos.
IP requerida por el cliente.
ACK (DHCPACK): Servidor confirma.
Origen:
MAC: MAC Servidor.
IP: IP Servidor.
Puerto: 67.
Destino:
MAC: MAC Cliente
IP: IP Cliente.
Puerto: 68
DHCP:
YIADDR: IP propuesta para cliente.
DHCP message type: 5 (ACK).
Tiempo de lease, máscara de red, gateway, DNS.
Estados¶
Initialization
Selection: Espera todas las ofertas de los servidores
Request: Pide a un servidor y espera respuesta.
Bound: Una vez que le llegó la confirmación del servidor. En este momento la PC trabaja normalmente.
Renew: Envía un DHCPREQUEST para renovar (al 50% del tiempo) y espera respuesta.
Rebind: Envía un DHCPREQUEST para renovar (al finalizar el tiempo) y espera respuesta.
DHCP relaying¶
Cuando hay varias subredes, puede haber un servidor DHCP por subred o puede haber un servidor que sirva a varias redes. El problema es que en este caso el servidor y el cliente están en redes distintas, el cliente no tiene una IP ruteable y tampoco sabe la IP del servidor DHCP.
Para permitir a los clientes comunicarse con los servidores, se instalan DHCP relay agents. Estos agentes de retransmisión cuando reciben un broadcast DHCP reenvían el mensaje a uno o varios servidores DHCP presentes en otras redes mediante unicast.
Hay un campo específico en la trama llamado GIADDR, en donde el gateway
coloca su IP, de esta forma el servidor DHCP sabe que debe responder a esa IP en
particular y que debe reservarle una IP al cliente en esa red.
Para la comunicación entre relay y servidor generalmente se usa el puerto 67 para origen y destino.
Capturas¶
Discover, UDP 68 -> 67:
Frame 55: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on
interface 0
Ethernet II, Src: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
Fragment offset: 0
Time to live: 128
Protocol: UDP (17)
Header checksum: 0x3996 [validation disabled]
[Header checksum status: Unverified]
Source: 0.0.0.0
Destination: 255.255.255.255
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 68, Dst Port: 67
Source Port: 68
Destination Port: 67
Length: 308
Checksum: 0xbf55 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Bootstrap Protocol (Discover)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Discover)
Length: 1
DHCP: Discover (1)
Option: (12) Host Name
Length: 16
Host Name: mbernardi-laptop
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 0000000000000000000000000000000000000000000000
Offer, UDP 67 -> 68:
Frame 56: 590 bytes on wire (4720 bits), 590 bytes captured (4720 bits) on
interface 0
Ethernet II, Src: Tp-LinkT_c7:77:b4 (70:4f:57:c7:77:b4), Dst:
HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Internet Protocol Version 4, Src: 192.168.2.1, Dst: 192.168.2.101
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 576
Identification: 0xb762 (46946)
Flags: 0x00
Fragment offset: 0
Time to live: 64
Protocol: UDP (17)
Header checksum: 0x3b94 [validation disabled]
[Header checksum status: Unverified]
Source: 192.168.2.1
Destination: 192.168.2.101
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 67, Dst Port: 68
Source Port: 67
Destination Port: 68
Length: 556
Checksum: 0xcb8a [unverified]
[Checksum Status: Unverified]
[Stream index: 1]
Bootstrap Protocol (Offer)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.2.101
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Length: 1
DHCP: Offer (2)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.2.1
Option: (6) Domain Name Server
Length: 8
Domain Name Server: 200.7.141.6
Domain Name Server: 200.7.141.7
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...
Request, 68 -> 67:
Frame 57: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on
interface 0
Ethernet II, Src: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
Fragment offset: 0
Time to live: 128
Protocol: UDP (17)
Header checksum: 0x3996 [validation disabled]
[Header checksum status: Unverified]
Source: 0.0.0.0
Destination: 255.255.255.255
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 68, Dst Port: 67
Source Port: 68
Destination Port: 67
Length: 308
Checksum: 0xfd67 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Bootstrap Protocol (Request)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Request)
Length: 1
DHCP: Request (3)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 192.168.2.101
Option: (12) Host Name
Length: 16
Host Name: mbernardi-laptop
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 0000000000000000000000
ACK, UDP 67 -> 68:
Frame 58: 590 bytes on wire (4720 bits), 590 bytes captured (4720 bits) on
interface 0
Ethernet II, Src: Tp-LinkT_c7:77:b4 (70:4f:57:c7:77:b4), Dst:
HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Internet Protocol Version 4, Src: 192.168.2.1, Dst: 192.168.2.101
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 576
Identification: 0xb762 (46946)
Flags: 0x00
Fragment offset: 0
Time to live: 64
Protocol: UDP (17)
Header checksum: 0x3b94 [validation disabled]
[Header checksum status: Unverified]
Source: 192.168.2.1
Destination: 192.168.2.101
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 67, Dst Port: 68
Source Port: 67
Destination Port: 68
Length: 556
Checksum: 0xc88a [unverified]
[Checksum Status: Unverified]
[Stream index: 1]
Bootstrap Protocol (ACK)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.2.101
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.2.1
Option: (6) Domain Name Server
Length: 8
Domain Name Server: 200.7.141.6
Domain Name Server: 200.7.141.7
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...