Perilaku yang diinginkan
Ketika suatu aplikasi mengirim paket ke alamat IP broadcast global 255.255.255.255
, saya ingin agar paket dikirim ke alamat broadcast global Ethernet ( ff:ff:ff:ff:ff:ff
), di semua antarmuka.
Di Linux dan mungkin juga OS lain, sepertinya ini berfungsi. Windows XP dan Windows 7 menunjukkan perilaku yang berbeda tentang ini, dan tidak ada perilaku yang diinginkan untuk situasi saya.
Perilaku Windows XP
Paket akan dikirim dengan benar ke antarmuka jaringan pertama (urutan antarmuka ditentukan dalam "Koneksi Jaringan / Pengaturan Lanjutan / Lanjutan"). Itu juga akan dikirim ke antarmuka lain.
Semuanya benar sejauh ini. Masalahnya adalah, saat mengirim ke antarmuka lain, alamat sumber paket siaran adalah alamat IP dari antarmuka pertama. Misalnya, bayangkan konfigurasi jaringan ini (urutan penting):
- Adaptor 1: alamat IP
192.168.0.1
- Adaptor 2: alamat IP
10.0.0.1
- Adaptor 3: alamat IP
172.17.0.1
Sekarang jika saya mengirim paket siaran, paket-paket berikut akan dikirim (dengan alamat IP sumber dan tujuan):
- Pada adaptor 1:
192.168.0.1
=>255.255.255.255
- Pada adaptor 2:
192.168.0.1
=>255.255.255.255
Pada adaptor 3:
192.168.0.1
=>255.255.255.255
Dalam praktiknya, aplikasi yang menggunakan paket siaran tidak akan berfungsi pada antarmuka apa pun selain adaptor 1. Menurut pendapat saya, ini adalah bug mencolok dalam tumpukan TCP / IP Windows XP.
Perilaku Windows 7
Mengubah urutan antarmuka jaringan tampaknya tidak berpengaruh pada Windows 7. Sebaliknya, siaran tampaknya dikendalikan oleh tabel rute 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
===========================================================================
Lihat 255.255.255.255
rutenya? Ya, mereka mengontrol paket siaran. Dalam situasi ini, paket siaran akan dikirim melalui 192.168.0.3
karena memiliki metrik yang lebih rendah ... tetapi tidak ke antarmuka lainnya.
Anda dapat mengubah antarmuka melalui mana paket siaran global akan dikirim dengan sangat mudah (cukup tambahkan 255.255.255.255
rute persisten dengan metrik rendah). Tetapi tidak peduli seberapa keras Anda mencoba, paket siaran hanya akan dikirim pada satu antarmuka saja, tidak semuanya ingin saya lakukan.
Kesimpulan
- Windows 7 hanya mengirim paket siaran ke satu antarmuka. Anda dapat memilih yang mana, tetapi bukan itu intinya di sini.
- Windows XP mengirim paket broadcast ke semua antarmuka, tetapi hanya mengirimkannya seperti yang diharapkan ke satu antarmuka, yang dalam praktiknya setara dengan perilaku Windows 7.
Target
Saya ingin mengubah dukungan siaran IP global ini di Windows (sebaiknya Windows 7) sekali dan untuk semua. Tentu saja cara yang lebih baik adalah memiliki semacam perubahan konfigurasi yang didukung (peretasan registri atau serupa), tapi saya terbuka untuk semua saran.
Ada ide?
sumber
Jawaban:
Bukannya saya dalam bisnis membela Microsoft, tetapi setelah membaca RFC berikut yang berupaya menentukan cara kerja siaran, saya tidak berpikir bahwa Microsoft selalu melanggar RFC apa pun. IMO masalahnya harus diperbaiki pada tingkat aplikasi (yaitu siaran langsung, bukan global) yang akan mengenai rute yang sesuai dalam tabel routing dan hanya dikirim dari antarmuka yang benar untuk jaringan IP tersebut.
Mereka berdua menyatakan bahwa tidak ada standar yang ditentukan untuk siaran. Juga disebutkan dalam 919 bahwa antarmuka fisik tertentu harus dipilih untuk siaran. Dalam kasus mesin multi-homed, multi-NIC yang menghasilkan siaran, saya tidak berpikir bahwa itu dengan jelas menyatakan apa yang harus terjadi. Siaran tidak seharusnya dilewatkan oleh router dari satu antarmuka ke antarmuka lainnya, jadi apakah mesin Windows adalah router atau tidak dalam hal ini?
Jika bertindak sebagai router, maka setiap host yang merespons siaran dengan alamat IP yang salah untuk jaringan tersebut (Adaptor 2 dan 3 dalam contoh Anda) harus mengirim paket kembali ke alamat ethernet dari Adapters 2 dan 3 sebagai respons terhadap Adapter Alamat IP 1 dan host Windows harus merutekannya ke antarmuka yang tepat.
Kedengarannya membingungkan ... tetapi tidak bisa memikirkan cara yang lebih baik untuk ungkapan ini
Dan akhirnya, RFC 919 secara khusus mengatakan Dari RFC 919
Membaca yang menunjukkan bahwa alamat IP sumber tidak relevan untuk siaran.
Karena setiap aplikasi tampaknya menangani siaran secara berbeda, saya pikir di situlah tanggung jawab berada. Sebagai contoh.
nbtstat
mengirimkan siaran langsung pada mesin multi-NIC, sedangkan game mungkin menggunakan siaran global.Singkatnya, aplikasi harus diperbaiki, bukan OS dalam hal ini ...
EDIT: Berikut ini tautan untuk keadaan yang sama, tetapi di Linux. Kernel linux menanganinya dengan hanya mengirim satu paket keluar dari antarmuka default (NIC A dalam contoh ini). Mereka merekomendasikan bahwa aplikasi menghitung NIC dan mengirim diarahkan broadcast keluar setiap NIC. Tautan
sumber
Akhirnya, saya menyelesaikannya secara terprogram. Saya menulis sebuah perangkat lunak yang sangat kecil yang disebut WinIPBroadcast yang bertugas menyampaikan frame siaran ke semua antarmuka.
Ini bekerja menggunakan fakta yang menarik: adalah mungkin untuk menerima paket siaran global yang dihasilkan secara lokal ketika mendengarkan pada alamat loopback (127.0.0.1). WinIPBroadcast mendengarkan alamat lokal untuk semua siaran menggunakan soket RAW, kemudian untuk setiap paket siaran, ia menyampaikannya ke semua antarmuka kecuali yang dipilih.
sumber
The program can't start becuase api-ms-win-core-rtlsupport-l1-2-0.dll is missing from your computer.
. Semoga berhasil menemukannya.dll
di Google.