Pożądane zachowanie
Gdy aplikacja wysyła pakiet na adres IP globalnej emisji 255.255.255.255, chciałbym, aby pakiet został przesłany na adres globalnej emisji Ethernet ( ff:ff:ff:ff:ff:ff) na wszystkich interfejsach.
W systemie Linux i prawdopodobnie także w innych systemach operacyjnych wydaje się, że to działa. Windows XP i Windows 7 wykazują różne zachowania w tym zakresie i żadne z nich nie jest pożądane w mojej sytuacji.
Zachowanie Windows XP
Pakiet zostanie poprawnie wysłany do pierwszego interfejsu sieciowego (kolejność interfejsów jest określona w „Połączenia sieciowe / Ustawienia zaawansowane / zaawansowane”). Zostanie również wysłany do innych interfejsów.
Jak dotąd wszystko jest w porządku. Problem polega na tym, że podczas wysyłania do innych interfejsów adresem źródłowym pakietu rozgłoszeniowego jest adres IP pierwszego interfejsu. Na przykład wyobraź sobie tę konfigurację sieci (kolejność jest ważna):
- Adapter 1: adres IP
192.168.0.1 - Adapter 2: adres IP
10.0.0.1 - Adapter 3: adres IP
172.17.0.1
Teraz, jeśli wyślę pakiet rozgłoszeniowy, zostaną wysłane następujące pakiety (z źródłowym i docelowym adresem IP):
- Na adapterze 1:
192.168.0.1=>255.255.255.255 - Na adapterze 2:
192.168.0.1=>255.255.255.255 Na adapterze 3:
192.168.0.1=>255.255.255.255W praktyce aplikacje korzystające z pakietów rozgłoszeniowych nie będą działać na żadnym interfejsie innym niż adapter 1. Moim zdaniem jest to rażący błąd w stosie TCP / IP systemu Windows XP.
Zachowanie Windows 7
Modyfikacja kolejności interfejsu sieciowego nie wydaje się mieć żadnego wpływu na system Windows 7. Zamiast tego, transmisja wydaje się być kontrolowana przez tablicę tras IP.
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.202.254.254 10.202.1.2 286
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.3 10
10.202.0.0 255.255.0.0 On-link 10.202.1.2 286
10.202.1.2 255.255.255.255 On-link 10.202.1.2 286
10.202.255.255 255.255.255.255 On-link 10.202.1.2 286
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.3 266
192.168.0.3 255.255.255.255 On-link 192.168.0.3 266
192.168.0.255 255.255.255.255 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 10.202.1.2 286
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.3 266
255.255.255.255 255.255.255.255 On-link 10.202.1.2 286
===========================================================================
Widzisz 255.255.255.255trasy? Tak, kontrolują pakiety rozgłoszeniowe. W tej sytuacji pakiety rozgłoszeniowe będą wysyłane przez, 192.168.0.3ponieważ mają niższą metrykę ... ale nie do innych interfejsów.
Możesz zmienić interfejs, przez który globalne pakiety emisji będą wysyłane bardzo łatwo (po prostu dodaj trwałą 255.255.255.255trasę o niskim wskaźniku). Ale bez względu na to, jak bardzo się starasz, pakiety emisji będą wysyłane tylko na jednym interfejsie, a nie na wszystkich tak, jak chciałbym.
Wniosek
- Windows 7 wysyła pakiety rozgłoszeniowe tylko do jednego interfejsu. Możesz wybrać który, ale nie o to tutaj chodzi.
- Windows XP wysyła pakiety rozgłoszeniowe do wszystkich interfejsów, ale wysyła je tylko zgodnie z oczekiwaniami do jednego interfejsu, co w praktyce jest równoważne zachowaniu systemu Windows 7.
Cel
Chcę raz na zawsze zmienić obsługę globalnej emisji IP w systemie Windows (najlepiej Windows 7). Oczywiście lepszym sposobem byłoby wprowadzenie jakiejś obsługiwanej zmiany konfiguracji (włamanie do rejestru lub podobne), ale jestem otwarty na wszystkie sugestie.
Jakieś pomysły?