ARP (Address Resolution Protocol). Cuando una máquina A quiere enviar datos a la máquina B, la capa de red de la máquina A construye un paquete con dirección IP de origen la de A y con dirección IP de destino la de B, e inserta la carga útil a enviar a B. Después, pasa este paquete a la capa de enlace de A para su transferencia hacia B. Sin embargo, las capas de enlace no entienden las direcciones IP; necesitan una dirección propia del medio de transmisión en uso. En una red Ethernet (802.3), por ejemplo, cada tarjeta Ethernet tiene una dirección de 48 bits asignada en fábrica, exclusiva de esa tarjeta (única), de modo que la colocación de dos tarjetas Ethernet cualesquiera en la misma red local no produciría nunca una colisión de direcciones, ya que no habrá nunca dos direcciones iguales (al menos si los fabricantes se ciñen a los conjuntos de direcciones que se les han asignado). Las tarjetas Ethernet se comunican entre sí referenciando estas direcciones de 48 bits. Se hace patente entonces la necesidad de manejar algún tipo de mapeo entre direcciones IP y direcciones de capa de enlace, en lo posible con poco o ningún trabajo administrativo. El protocolo ARP es capaz de manejar ese mapeo sin intervención administrativa. ARP, Address Resolution Protocol o protocolo de resolución de direcciones (definido en la RFC 826), resuelve el problema de direccionamiento de capa de enlace en medios de difusión: establece un mapeo entre direcciones de capa de red (direcciones IP en TCP/IP) y direcciones de capa de enlace, cuya naturaleza depende del medio físico que soporta la subred. El mensaje ARP va como carga útil de la trama. En las redes de difusión la subcapa MAC, Medium Access Control o subcapa de control de acceso al medio, es la encargada de arbitrar el uso del medio compartido, ya sea disponiendo turnos de transmisión o manejando colisiones; es usual denominar las direcciones usadas en medios de difusión como direcciones de capa MAC o simplemente direcciones MAC. Las direcciones de 48 bits de las redes Ethernet son las direcciones MAC de estas redes. El protocolo ARP funciona por sí solo, no requiere administración, como sería el caso si se usaran tablas completadas manualmente por el administrador de la red (IP,MAC): sería necesario cambiar la correspondencia entre número IP y dirección MAC en todas las máquinas de la red, cada vez que se cambie tanto una tarjeta de red como una dirección IP; trasformándose en una tarea pesada y propensa a error, sobre todo si la red es grande. Cuando la máquina A precisa enviar un paquete a la máquina B, el protocolo ARP es capaz de averiguar la dirección MAC de B conociendo sólo el número IP de B; el paquete es enviado sin más trámite. Formato del paquete ARP. El paquete ARP va como carga útil en la trama de capa MAC. Contiene, entre otros campos, las direcciones IP y MAC de origen y destino; no hay otra forma de hacer llegar esta información al otro extremo, porque las direcciones de capa MAC contenidas en los encabezados de la capa de enlace no llegan al proceso que se encarga de procesar ARP ya que cada capa suprime su encabezado al pasar el contenido a la capa superior. Formato de mensaje ARP. Detalle de los campos del mensaje ARP: Hardware Type: tipo de hardware - código del tipo de interfaz de hardware para el cual el interrogador busca respuesta, es 1 para Ethernet. Protocol Type: tipo de protocolo - código de tipo de dirección proporcionada por el transmisor, es 0x0800 para la dirección IP. Operation: operación - indica el tipo de operación: 1 para solicitud ARP, 2 para respuesta ARP, 3 para solicitud RARP, 4 para respuesta RARP. HLEN: longitud de la dirección de hardware - permite usar ARP en distintos tipos de redes. PLEN: longitud de la dirección de protocolo (de capa 3) - permite usar ARP en distintos tipos de redes. SenderHA: dirección hardware del emisor. Sender IP: dirección IP del emisor. Target HA: dirección hardware del destinatario. Target IP: dirección IP del destinatario. Funcionamiento de ARP. La figura muestra dos redes LAN pertenecientes a departamentos distintos de una organización. Ambas redes están unidas a un backbone corporativo de fibra óptica interno a la organización, posiblemente uniendo varios edificios separados cada uno con su LAN, o los diferentes pisos de un edificio, cada piso con su LAN. Analizaremos los casos de transferencia de paquetes dentro de una misma LAN y entre dos LANs distintas. Dos redes LAN y el backbone de una organización. Comunicación entre máquinas de una misma LAN. 1 La máquina 1 con dirección IP1 desea enviar un paquete a la máquina 3 con dirección IP3 : 1. Primeramente, la máquina 1 consulta su tabla de ruteo, detectando que la máquina 3 (con dirección IP3) se encuentra directamente conectada (IP1 AND MASK = IP3 AND MASK). 2. Utilizando el protocolo ARP (protocolo distinto de IP), la máquina 1 arma una trama con dirección MAC origen la suya propia (MAC origen = E1), MAC destino la dirección de difusión de 802.3 (Ethernet) (MAC destino = FF:FF:FF:FF:FF:FF) y con la pregunta "tQuién tiene la dirección IP IP3?". Además incluye la dirección MAC e IP origen en el contenido de ARP. 3. El paquete enviado por la máquina 1 es recibido por todas las máquinas de la red LAN, incluida la máquina 3, que reconoce su propia dirección IP en la pregunta. La máquina 3 responde enviando una trama con dirección MAC origen E3, dirección MAC destino E1, y la respuesta a la pregunta, "IP3 tiene dirección MAC E3". Dado que la correspondencia (IP1, E1) de la máquina 1 venía en el paquete recibido por la máquina 3, esta dispone de dicha información, almacenándola. 4. La máquina 1 recibe la respuesta, dirigida específicamente hacia ella, hacia la dirección MAC E1. Por el contenido del paquete dispone ahora de la dirección MAC de la máquina 3 (E3), y puede intercambiar paquetes con ella directamente. Dispone también de la dirección IP de la máquina 3, presente en el paquete recibido; tiene conocimiento entonces de la correspondencia (IP3, E3). La máquina 1 ha obtenido la dirección Ethernet de la máquina 3 (E3) sin intervención administrativa alguna; el protocolo ARP ha logrado averiguarla interrogando en la propia red. Algunas optimizaciones mejoran la eficiencia del proceso: Dado que el paquete de interrogación difundido en la red contiene el mapeo (IP1, E1) de la máquina 1 (emisora de la pregunta); la máquina 3 no necesita usar ARP para averiguar la dirección de subcapa MAC de la máquina 1 cuando quiera responderle. Caché de ARP: las parejas de direcciones (dirección IP, dirección MAC) se guardan en memoria por un cierto tiempo; ulteriores consultas se realizan primero sobre este caché. El tiempo de validez existe previendo un cambio de tarjeta Ethernet (implica un cambio de dirección, no hay dos tarjetas Ethernet con la misma dirección), y para evitar mantener indefinidamente en la tabla entradas inactivas. Transcurrido ese tiempo de validez la entrada se borra del caché y la consulta a la red, por difusión, debe repetirse. Las entradas en la tabla se actualizan en dos instancias: cuando se recibe una difusión o cuando se recibe una pregunta por la dirección IP propia: o Cuando la máquina A de dirección IPa recibe una difusión (broadcast) de ARP, si la máquina A tiene una entrada (IPx, Ex) en su tabla de ARP, al recibir una difusión ARP originada por IPx, actualiza su tabla de ARP con la nueva (o eventualmente la misma) dirección Ex. Si la máquina A no tenía una entrada (IPx, Ex) y la difusión de ARP no buscaba la IP de A ("tQuién tiene IPa?"), entonces se ignora y no se introduce la entrada en la tabla. o Cuando la máquina A recibe una pregunta por su propia dirección IPa desde una máquina con dirección IPy, guarda en su tabla la correspondencia (IPy, Ey) extraída de la trama donde viene la pregunta, asumiendo la alta probabilidad de pronta comunicación con la máquina que realizó la pregunta. 1 Las direcciones IP las supondremos conocidas (pueden ser el resultado de una consulta al DNS). ARP gratuito: cuando una máquina se prende, envía un paquete de interrogación de su propia IP, por difusión. Nadie debería contestar, puesto que no debería haber otra máquina con la misma dirección IP; sin embargo, si fuese contestado, la máquina anunciaría al usuario el conflicto y no arrancaría hasta que el administrador resuelva la colisión asegurando la inexistencia del mismo número IP en la red. Además de esta comprobación, como el paquete de interrogación se envió por difusión, todas las máquinas de la LAN lo recibieron; el paquete contiene el número IP y la dirección MAC del emisor, por lo que todas las máquinas de la red que tuvieran una entrada para esa IP en su tabla de ARP la actualizan con la nueva dirección MAC. Los paquetes ARP viajan dentro de la red local como carga útil de una trama Ethernet, el 2 campo "Tipo" en capa MAC tiene el valor 0x0806 , distinto del correspondiente a IP (0x0800). Comunicación entre máquinas de diferentes LANs. La máquina 1 en la red local A desea comunicarse con la máquina 8 en la red local B. El esquema corriente funciona así: 1. La máquina 1 ve la dirección IP destino de la máquina 8, IP8; por la búsqueda en su tabla de ruteo reconoce que ese destino no pertenece a su red local, sino que el próximo salto es (en el ejemplo) la dirección IP4, correspondiente al enrutador de conexión al backbone corporativo de la red local A. La dirección IP4 del enrutador está en la propia red local de la máquina 1, por lo que la dirección Ethernet E4 del enrutador se obtiene por comunicación ARP en la propia red como se describió anteriormente. 2. El enrutador de la red local A recibe el paquete, verifica que la dirección IP de destino pertenece a otra red, y lo reenvía según la información de sus tablas de ruteo, en este caso hacia el backbone, por su interfaz FI, con destino al enrutador de la red local B, interfaz F2. 3. El enrutador de red local B recibe el paquete en la interfaz F2, consulta su tabla de ruteo y lo reenvía hacia la máquina 8. El enrutador de la red local B, (IP7, E5) está en la red de la máquina 8 (IP8, E6); la resolución de direcciones Ethernet por ARP es la descrita anteriormente. 4. La máquina 8 responde a la máquina 1 dirigiendo su paquete al enrutador de la red local B, siguiendo un camino inverso al descrito. Las direcciones en el backbone de fibra óptica se obtienen igualmente por ARP dentro del backbone. Los paquetes IP entre redes locales A y B viajan dentro del backbone como carga útil de una trama FDDI de acuerdo al ejemplo. Proxy ARP. Se hace necesario a veces implementar una misma red IP (un conjunto de números IP determinados por una cierta red y máscara) sobre varias LANs físicamente diferentes. Un ejemplo es una máquina R con dos tarjetas de red Ethernet; en una de ellas se encuentra una máquina A, en la otra una máquina B. A quiere comunicarse con B, ambas están en la misma red IP pero en distintas LANs. Es posible configurar la máquina R para responder directamente consultas ARP relativas a cualquiera de las dos LANs; esta técnica se denomina proxy ARP: 1. La máquina A pide por ARP la dirección MAC de la máquina B, de la cual conoce la IP. 2. La máquina R responde con su propia dirección MAC. 3. A arma su trama con la dirección MAC de R. 4. Cuando la máquina R recibe esta trama la enruta hacia la red LAN donde está la máquina B. Tabla de ARP. Las máquinas almacenan los mapeos (dirección IP, dirección MAC) de las máquinas que conocen. Esto mejora mucho la eficiencia: no es necesario interrogar en cada comunicación. Los mapeos se capturan reteniendo la información según se explicó el funcionamiento de ARP. Las entradas de la tabla se borran transcurrido su tiempo de validez (típicamente 20 minutos). También pueden ingresarse entradas específicas, o borrarse, por comandos emitidos por el supervisor. El comando Unix arp permite conocer el contenido de la tabla ARP de la máquina local: # arp -a c3.ls.iie.edu.uy (172.16.0.11) at 00:03:B3:00:5B:87[ether] orieth1 d3.ls.iie.edu.uy (172.16.0.12) at 00:E0:06:EC:20:2E[ether] orieth1 ? (172.16.0.253) at52:54:4C:19:16:A2[ether] orieth1 gw-380.firig.edu.uy (164.73.38.1) at 00:D0:95:91:36:2C [ether] ori eth0 ... La salida de este comando muestra los datos almacenados en una entrada ARP: dirección IP, tipo de hardware (Ethernet en este caso), la dirección de hardware (dirección de capa MAC: en este caso una dirección Ethernet de 48 bits) y el nombre de la interfaz (eth0 o ethi en este caso). Adicionalmente el comando arp trata de averiguar los nombres asociados a las direcciones IP incluidas en la tabla usando el DNS. Este comportamiento se puede evitar con la opción -n. RARP. En algunas circunstancias, en particular cuando se trata de máquinas sin disco, es necesario obtener un número IP correspondiente a una dirección MAC determinada. Este es el caso inverso de ARP; el protocolo que lo resuelve se denomina RARP, Reverse Address Resolution Protocol (definido en la RFC 903). Una máquina sin disco carga su sistema operativo desde una máquina remota que actúa como servidor. Para comunicarse con esta máquina remota se necesita su dirección IP, además de la propia. Como carece de disco, ninguna de estas direcciones están disponibles. Lo único disponible es la dirección MAC de la propia interfaz de red. A través del protocolo RARP, por difusión, la máquina puede obtener su dirección IP, mediante una pregunta tal como "Tengo la dirección MAC El, ¿sabe alguien mi dirección IP?" El servidor RARP recibe este paquete, como todos los de la red, y responde a la dirección MAC El de la máquina emisora. La principal limitación de RARP es que obliga a tener un servidor RARP en cada red local, porque al igual que ARP dirige sus mensajes a la dirección de difusión de la red, y estos mensajes no son reenviados por los enrutadores. Además, solo informa la dirección IP de la máquina que se está iniciando pero no brinda datos del servidor de arranque ni la máscara a utilizar, entre otras cosas. BOOTP. BOOTP (descrito en las RFCs 951, 1048 y 1084) es un protocolo similar a RARP en su función, pero usa mensajes UDP, que sí son reenviados por los enrutadores. Además de permitir a una máquina sin disco obtener su propia IP, BOOTP provee información adicional como la dirección IP del servidor donde está su imagen de memoria con sistema operativo, la dirección IP del enrutador por defecto y la máscara de subred a usar. DHCP. BOOTP presenta el inconveniente de requerir administración para cada nueva máquina ingresada a la red: el mapeo (dirección MAC, dirección IP) de la nueva máquina debe ingresarse a mano. Para superar esta limitación fue desarrollada una extensión de BOOTP llamada DHCP, Dynamic Host Configuration Protocol o protocolo dinámico de configuración de máquinas (descrito en las RFCs 2131 y 2132). DHCP permite tanto la asignación manual como automática de números IP. Este protocolo ha desplazado a RARP y BOOTP en la mayoría de las instalaciones. Se basa en un servidor DHCP capaz de asignar números IP (y otros parámetros) a máquinas que lo soliciten. El servidor DHCP puede estar en una LAN diferente a la máquina que solicita el IP; esto lo hace inalcanzable por difusión, haciendo necesario disponer de un agente relay DHCP en cada LAN. El proceso de descubrimiento del número IP de una máquina requiere lo siguientes pasos: 1. La máquina A arranca y desea obtener su número IP. Para ello, emite por difusión un paquete llamado DHCP DISCOVER. 2. Este paquete es recibido por todas las máquinas de la red LAN de A, en particular por el agente relay DHCP. 3. El agente relay DHCP reconoce el paquete DHCP DISCOVER y lo envía al servidor DHCP en exclusiva (unicast), posiblemente en una red remota. El único dato necesario para este envío es el número IP del servidor DHCP. 4. El servidor DHCP responde con un mensaje OFFER conteniendo una dirección IP y otros parámetros. El servidor obtiene un número IP de un conjunto (pool) de direcciones IP disponibles, llevando el control de cuáles están asignadas. 5. La máquina A recibe el paquete OFFER a través del agente relay DHCP. Responde al servidor DHCP con un paquete REQUEST en el cual acepta la oferta. 6. El servidor DHCP responde con un paquete ACK y asigna la dirección. El paquete ACK incluye varios parámetros configurables, entre otros la duración de la asignación. 7. La máquina A dispone de su número IP; lo verifica mediante ARP: si alguien responde (el IP recibido ya está siendo usado) la máquina A se queja al servidor emitiendo un paquete DECLINE, recomenzando las negociaciones. Si el IP no está siendo usado (nadie responde) la máquina A puede iniciar comunicaciones normalmente. 8. Cuando se acerca el fin del tiempo de validez del IP la máquina envía al servidor un nuevo paquete REQUEST para renovar su asignación y continuar usando el número IP asignado. 9. Cuando la máquina A desea terminar su uso del IP envía al servidor un paquete RELEASE. El servidor libera ese IP para asignarlo a otra solicitud. El tiempo de validez de la dirección IP resuelve el problema de máquinas que no devuelven correctamente sus números IP: la máquina se desconecta pero el servidor no se entera, y no puede reasignar el número. La técnica de asignar números IP con un cierto tiempo de validez se denomina "leasing".