Jaki jest właściwy sposób wysłania ramki Ethernet do innego komputera w sieci lokalnej?


1

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:9ajest to adres MAC maszyny B ):

Podczas określania adresu MAC maszyny B jako adresu docelowego ( a0:ce:c8:10:75:8cto 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:23jest 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?

Odpowiedzi:


2

Ogólnie poprawną metodą, jeśli wiesz, że komputer docelowy jest w lokalnej podsieci, jest bezpośrednie użycie adresu MAC maszyny docelowej (w razie potrzeby wyszukiwanie ARP). Działa to niezależnie od typu ramki lub zawartości ramki i zwykle omija router (zostanie zwarty przez przełącznik Ethernet).

Jeśli ramka zawiera IPv4 lub IPv6, możesz wysłać ją do routera podsieci, który przeprowadzi wyszukiwanie ARP i przekaże ładunek ramki do dowolnego hosta, do którego należy docelowy adres IP. (W końcu to właśnie robią routery : przesyłają pakiety IP - nawet jeśli oznacza to po prostu odzwierciedlenie ich z powrotem w tym samym interfejsie).

Jednak wysyłanie lokalnych pakietów przez router jest nieefektywne i całkowicie niepotrzebne w większości przypadków. W przypadku tańszych routerów może to oznaczać przetwarzanie pakietu przez bardzo wolny procesor (w porównaniu z pełną prędkością linii przełącznika Ethernet).

To powiedziawszy, druga metoda jest okazjonalnie stosowana w praktyce, wraz z funkcjami „izolacji klienta” (aka „prywatnej sieci VLAN”) na przełącznikach i punktach dostępu.


2

Pamiętaj, że Ethernet nie ma routerów. Routery to koncepcja warstwy 3 (warstwa sieci, gdzie np. IP żyje), która jest warstwą powyżej Ethernetu, o której sam Ethernet nie powinien wiedzieć.

Prawidłowy adres, który należy wpisać w polu docelowym nagłówka Ethernet, to adres MAC Ethernet hosta docelowego.

W swoim pytaniu wspominasz również o wysłaniu ramki Ethernet do hosta, a jak się okazuje, ramka Ethernet zawierała datagram IP dla innego hosta IP niż miejsce docelowe Ethernet, do którego go wysłałeś. Tak więc host IP działał jak router i skierował dla ciebie twój datagram IP, wysyłając go z powrotem do tej samej sieci Ethernet LAN, ale tym razem z poprawnym adresem docelowym Ethernet odpowiadającym adresowi hosta IP był datagram IP do.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.