Niedawno zacząłem uczyć się o modelu OSI, sieciach i tym podobnych.
Ponieważ lubię kodować w C, chciałem wysłać własne ramki Ethernet.
Teraz działam; jednak nadal nie jestem pewien jednej rzeczy:
kiedy wysyłam ramkę Ethernet z komputera A na komputer B (zakładając, że oba komputery są w tej samej sieci), jaki adres MAC muszę określić jako docelowy adres MAC ramki?
Próbowałem zarówno adresu MAC mojego routera, jak i adresu MAC maszyny B , oba sposoby działają. Aby uzyskać adres MAC maszyny B , po prostu złożyłem żądanie ARP.
Jaka jest jednak właściwa droga?
I monitorować ruch z Wireshark na maszynie A i tcpdump na maszynie B . To jest wynik na maszynie B ( e0:d5:5e:c6:52:9a
jest to adres MAC maszyny B ):
Podczas określania adresu MAC maszyny B jako adresu docelowego ( a0:ce:c8:10:75:8c
to NIC MAC maszyny 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
Określając adres MAC routera jako adres docelowy ( c8:0e:14:fd:f3:23
jest to NIC MAC routera):
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
Ten wynik pokazuje, że router przepisuje źródłowy adres MAC i prawdopodobnie używa swojej pamięci podręcznej do ustalenia poprawnego docelowego adresu MAC dla docelowego adresu IP.
Jak router obsługuje ramkę, w której określono adres MAC maszyny B ?
Czy istnieje różnica między tymi dwoma sposobami?
Czy istnieje jeden preferowany / prawidłowy sposób?
źródło