¿Cuál es la forma correcta de enviar una trama Ethernet a otra máquina en la red local?

¿Cuál es la forma correcta de enviar una trama Ethernet a otra máquina en la red local?

Recientemente comencé a aprender sobre el modelo OSI, redes y demás.
Como me gusta codificar en C, quería enviar mis propias tramas Ethernet.

Ahora lo tengo funcionando; sin embargo, todavía no estoy seguro de una cosa:
al enviar una trama Ethernet desde la máquinaAa máquinaB(suponiendo que ambas máquinas estén en la misma red), ¿qué dirección MAC debo especificar comoDestino¿Dirección MAC de la trama?
Probé tanto la dirección MAC de mi enrutador como la dirección MAC de la máquinaB, ambas formas funcionan. Para obtener la dirección MAC de la máquinaB, simplemente hice una solicitud ARP.

Sin embargo, ¿cuál es la forma correcta?

Supervisé el tráfico con Wireshark en la máquinaAy contcpdumpen la maquinaB. Esa es la salida en la máquina.B( e0:d5:5e:c6:52:9aes la dirección MAC de la máquinaB):

Al especificar la máquinaBLa dirección MAC como dirección de destino ( a0:ce:c8:10:75:8ces la NIC MAC de la máquina).A):

18:42:46.152800 a0:ce:c8:10:75:8c > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 64: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

Al especificar la dirección MAC del enrutador como dirección de destino ( c8:0e:14:fd:f3:23es la MAC de NIC del enrutador):

18:45:04.735375 c8:0e:14:fd:f3:23 > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 60: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

Este resultado muestra que el enrutador reescribe elFuentedirección MAC y probablemente use su caché para determinar la dirección MAC de destino correcta para la IP de destino.

¿Cómo maneja el enrutador la trama donde está la dirección MAC de la máquina?B¿está especificado?

¿Hay alguna diferencia entre ambas formas?

¿Existe una forma preferida/correcta?

Respuesta1

El método generalmente correcto, si sabe que la máquina de destino está en la subred local, es usar directamente la dirección MAC de la máquina de destino (realizando una búsqueda ARP si es necesario). esto funcionaráa pesar de tododel tipo de ether o del contenido de la trama, y ​​generalmente pasará por alto el enrutador (se cortocircuitará a través del conmutador Ethernet).

Sila trama contiene IPv4 o IPv6, puede enviarla al enrutador de la subred, que realizará una búsqueda ARP y reenviará la carga útil de la trama a cualquier host al que pertenezca la dirección IP de destino. (Después de todo, eso es lo que hacen los enrutadoreshacer:reenvían paquetes IP, incluso si eso solo significa reflejarlos en la misma interfaz).

Sin embargo, enviar paquetes locales a través de un enrutador es ineficiente y completamente innecesario en la mayoría de los casos. Para enrutadores más baratos, podría significar que el paquete sea procesado por una CPU muy lenta (en comparación con la velocidad de línea completa del conmutador Ethernet).

Dicho esto, el segundo métodoesSe utiliza ocasionalmente en la práctica, junto con funciones de "aislamiento de cliente" (también conocidas como "VLAN privada") en conmutadores y puntos de acceso.

Respuesta2

Recuerde que Ethernet no tiene enrutadores. Los enrutadores son un concepto de capa 3 (capa de red, donde, por ejemplo, se encuentra IP), que es una capa por encima de Ethernet, de la que se supone que la propia Ethernet no tiene conocimiento.

La dirección correcta para colocar en el campo de destino del encabezado de Ethernet es la dirección MAC de Ethernet del host de destino.

En su pregunta, también menciona el envío de una trama Ethernet a un host, y resulta que esa trama Ethernet contenía un datagrama IP para un host IP diferente al destino Ethernet al que la envió. Entonces, ese host IP actuó como un enrutador y enrutó su datagrama IP enviándolo de regreso a la misma LAN Ethernet, pero esta vez con la dirección de destino Ethernet correcta correspondiente a la dirección del host IP donde estaba el datagrama IP. a.

información relacionada