將廣播應用程式移植到 IPv6
本節說明將 IPv6 廣播應用程式移植到 Windows 通訊端可用的多播功能的最佳做法。
比較 IPv4 與 IPv6
準備將 IPv4 廣播應用程式移植到 IPv6 時,最值得注意的考慮是:IPv6 沒有實作的廣播概念。 相反地,IPv6 會使用多播。
IPv6 的多播可以模擬 IPv4 中找到的傳統廣播功能。 將 IPv6 位址設定為連結本機範圍的所有節點位址設定為 IPV6_ADD_MEMBERSHIP 通訊端選項, (FF02::1) 相當於使用 SO_BROADCAST 通訊端選項在 IPv4 廣播位址上進行廣播。 此位址有時稱為 所有節點多播群組。 對於只想要廣播 IPv6 模擬的應用程式,該方法的運作方式相同。 不過,IPv6 有一個值得注意的差異,就是預設不會收到所有節點多播群組位址上的多播, (預設會接收 IPv4 廣播) 。 應用程式程式設計人員必須使用 [IPV6_ADD_MEMBERSHIP通訊端] 選項,從任何來源啟用多播接收,包括所有節點的多播群組位址。
注意
在 IPv6 中,介面選取是在傳遞至多播通訊端選項或 IOCTL 的引數結構中指定。
但對於更豐富、更強固、更選擇性且更容易管理的多部主機傳輸,應用程式開發人員應該考慮移至多播模型。
移至多播
透過多播,應用程式程式設計人員可以選擇性地選擇特定的來源/群組組,以啟用選擇性接收模型。 IPv6 上的多播接聽程式探索 (MLD) ,以及 IPv4 上的網際網路群組管理通訊協定第 3 版 (IGMPv3) 支援多播程式設計。 此外,多播可讓應用程式特別封鎖群組內的 (或解除封鎖) 寄件者,進一步保護應用程式免于惡意廣播者。 這項功能適用于 IPv4 (需要 IGMPv3) ,以及 IPv6 (需要 MLDv2) 。
應用程式程式設計人員使用多播有兩個主要案例:從 IPv4 廣播 (或多播) 應用程式移植到 IPv6,以及建立新的 IPv6 多播應用程式的應用程式。
若要移植現有的應用程式,有兩個選項可移至 IPv6 多播:使用通訊端選項和使用 IOCTL。
- 使用通訊端選項是以變更為基礎的方法,可讓開發人員視需要變更通訊端屬性 (,例如封鎖或解除封鎖傳送者、新增來源等) 。 此方法更直覺化,且建議的方法。 如需多播程式設計之變更型方法的詳細資訊,請參閱 使用 Windows 通訊端的 MLD 和 IGMP。
- 使用 IOCTLs 是以最終狀態為基礎的方法,因為它可讓開發人員提供完整設定的通訊端狀態,包括包含和排除清單,以及一次呼叫。 如需最終狀態型方法的詳細資訊,請參閱 最終狀態型多播程式設計。
針對建立新的 IPv6 多播應用程式,建議的做法是使用通訊端選項,而不是使用 IOCTLs。
另外還有一種方法可以使用 IPv6 建立多播應用程式,而且需要使用 WSAJoinLeaf 函式。 雖然使用 WSAJoinLeaf 函式不是建議的做法,但在某些情況下可能會規定其使用方式。 例如,在 Windows Server 2003 和更早版本上使用通訊端選項的其中一個缺點是 IP 版本是特定的。 在這些舊版 Windows 上,不同的通訊端選項必須適用于 IPv6 和 IPv4。 在 Windows Vista 和更新版本上,支援新的通訊端選項,可與 IPv4 和 IPv6 搭配使用。 相反地, WSAJoinLeaf 函式與 IP 版本和通訊協定無關,因此對於建置必須在 Windows Server 2003 和更早版本上使用多個 IP 版本的應用程式而言,這是有用的方法。 在某些需要通訊協定和 IP 版本無從驗證原則的情況下,使用 WSAJoinLeaf 函式可能更適合。