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