¿Cuál es la estructura o el formato de un paquete ARP?

RFC 826 contiene la definición de formato canónico de un paquete ARP, pero puede ser difícil de visualizar, por lo que los editores de la página Wikipedia correspondiente crearon una representación visual de los paquetes ARP en forma de una tabla HTML.

Dado que ambas páginas se encuentran entre los principales resultados de una búsqueda de “formato de paquete ARP” en cualquiera de los motores de búsqueda de uso común, solo puedo suponer que ya las ha leído y está buscando algo que ninguno de ellos puede proporcionar. Si es así, agregue detalles a su pregunta para guiar a aquellos que están tratando de ayudarlo.


ACTUALIZACIÓN: El OP hizo una pregunta complementaria: ¿cuándo deberían usarse los valores de “longitud de dirección de hardware” y “longitud de dirección de protocolo”?

Siempre .

La práctica de asumir que las direcciones de hardware siempre deben ser de 48 bits y que siempre se trata de IPv4 es descuidada. De hecho, IEEE definió dos estándares de direcciones MAC, EUI-48 y EUI-64, el último de 64 bits de ancho y utilizado en ZigBee y otras tecnologías de red de área personal (PAN), así como algunos casos de uso limitado en el ámbito de IPv6. Codificar un campo de dirección de hardware de 48 bits es solo pedirle a su código que falle tarde o temprano, cuando la moda de Internet de las cosas (IoT) realmente se pone en marcha y el espacio de direcciones EUI-48 se agota.

Consulte Protocolo de resolución de dirección Ethernet: o convertir direcciones de protocolo de red a una dirección Ethernet de 48 bits para transmisión en hardware Ethernet

El formato del paquete sigue. Capa de transmisión Ethernet (no necesariamente accesible para el usuario):

48 bits: dirección Ethernet de destino
48 bits: dirección Ethernet del remitente
16.bit: Tipo de protocolo = ether_type $ ADDRESS_RESOLUTION Datos del paquete Ethernet:
16.bit: (ar $ hrd) Espacio de direcciones de hardware (por ejemplo, Ethernet, Packet Radio Net.)
16.bit: (ar $ pro) Espacio de direcciones del protocolo. Para hardware de Ethernet, esto es del conjunto de campos de tipo ether_typ $ .
8.bit: (ar $ hln) longitud de bytes de cada dirección de hardware
8.bit: (ar $ pln) longitud de bytes de cada dirección de protocolo
16.bit: (ar $ op) opcode (ares_op $ REQUEST | ares_op $ REPLY)
nbytes: (ar $ sha) Dirección de hardware del remitente de este paquete, n del campo ar $ hln.
mbytes: (ar $ spa) Dirección de protocolo del remitente de este paquete, m del campo ar $ pln.
nbytes: (ar $ tha) Dirección de hardware de destino de este paquete (si se conoce).
mbytes: (ar $ tpa) Dirección de protocolo de destino.