Бажана поведінка
Коли програма надсилає пакет на IP-адресу глобальної трансляції 255.255.255.255
, я хотів би, щоб пакет був надісланий на глобальну електронну адресу Ethernet ( ff:ff:ff:ff:ff:ff
), на всіх інтерфейсах.
На Linux і, ймовірно, інших ОС також, здається, це працює. Windows XP та Windows 7 демонструють різну поведінку щодо цього, і жодна поведінка не бажана для моєї ситуації.
Поведінка Windows XP
Пакет буде правильно надісланий до першого мережевого інтерфейсу (порядок інтерфейсу вказаний у "Мережеві з'єднання / Додаткові / розширені налаштування"). Він також буде надісланий на інші інтерфейси.
На сьогодні все правильно. Проблема полягає в тому, що при відправці на інші інтерфейси адресою джерела широкомовного пакету є IP-адреса першого інтерфейсу. Наприклад, уявіть цю конфігурацію мережі (важливий порядок):
- Адаптер 1: IP-адреса
192.168.0.1
- Адаптер 2: IP-адреса
10.0.0.1
- Адаптер 3: IP-адреса
172.17.0.1
Тепер, якщо я надішлю широкомовний пакет, будуть надіслані наступні пакети (із вихідною та цільовою IP адресами):
- На адаптері 1:
192.168.0.1
=>255.255.255.255
- На адаптері 2:
192.168.0.1
=>255.255.255.255
На адаптері 3:
192.168.0.1
=>255.255.255.255
На практиці програми, які використовують широкомовні пакети, не працюватимуть на будь-яких інтерфейсах, крім адаптера 1. На мою думку, це кричуща помилка в стеку TCP / IP Windows XP.
Поведінка Windows 7
Зміна порядку мережевого інтерфейсу, схоже, не впливає на Windows 7. Натомість трансляція, як видається, контролюється таблицею маршруту 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
===========================================================================
Бачите 255.255.255.255
маршрути? Так, вони контролюють широкомовні пакети. У цій ситуації пакети широкомовної передачі будуть надсилатись через те, 192.168.0.3
що він має нижню метрику ... але не на інші інтерфейси.
Ви можете змінити інтерфейс, через який глобальні широкомовні пакети будуть надсилатися дуже легко (просто додайте стійкий 255.255.255.255
маршрут із низькою метрикою). Але як би ви не старалися, трансляційні пакети надсилатимуться лише в одному інтерфейсі, не всі вони, як я хотів би це зробити.
Висновок
- Windows 7 надсилає лише широкомовні пакети в один інтерфейс. Ви можете вибрати, який із них, але тут справа не в цьому.
- Windows XP надсилає широкомовні пакети на всі інтерфейси, але він надсилає їх лише, як очікувалося, одному інтерфейсу, який на практиці еквівалентний поведінці Windows 7.
Мета
Я хочу змінити цю глобальну підтримку широкомовної IP-адреси в Windows (бажано Windows 7) раз і назавжди. Звичайно, кращим способом було б мати якесь підтримуване зміна конфігурації (злом реєстру чи подібне), але я відкритий для всіх пропозицій.
Будь-які ідеї?