IPv6 Winsock 應用程式的使用者介面問題
從 IPv4 到 IPv6 的最明顯變更之一是 IP 位址的大小。 許多使用者介面都會提供對話框,讓用戶能夠輸入IP位址,如下圖所示。
在 IPv6 中尋址,由於許多因素,例如長度、複雜度和 IPv6 位址空間內的區段重要性,不利於使用者的修改或規格。 因此,需要為使用者提供指定自己位址的功能會減少。 此外,由於與 IPv6 尋址相關聯的複雜度,為系統管理員提供指定 IPv6 位址資訊的功能,不太可能在每個節點上發生。
在UI中顯示IPv6位址並非不可思議,因此開發人員在修改應用程式以支援IPv6時,應考慮IPv6位址大小的變化。
本節的其餘部分將討論 IPv4 位址長度可預測性和 IPv6 位址長度考慮之間的差異。 本節假設 IPv6 位址會顯示在其十六進位表示法中。
IPv4 位址的大小是可預測的,因為它們嚴格遵循點數十進位表示法,如下列位址範例所示:
10.10.256.1
由於 IPv6 位址慣例可讓您使用雙冒號(::)代表一系列零,因此 IPv6 位址無法預測。 因此,下列 IPv6 位址表示法等同於相同的 IPv6 位址:
1040:0:0:0:0:0:0:1
1040::1
以雙冒號表示數列零的功能會導致任何指定的 IPv6 產生無法預測的長度,這需要程式設計人員在建立 IPv6 位址的使用者介面顯示時,將這項功能納入考慮。 當然,開發人員應該確保使用者介面能夠顯示IP位址,這些位址不會使用雙冒號來代表一系列零(第一個位址如下),以及能夠在建立IPv6功能的使用者介面時顯示最長可能的IPv6位址(第二個位址,以及內嵌的 IPv4 位址)。 請注意,將範圍識別碼 (ID) 新增至下列位址時,其長度會增加多達另一個 11 個字元:
21DA:00D3:0010:2F3B:02AA:00FF:FE28:9C5A
0000:0000:0000:0000:0000:ffff:123.123.123.123
另一個重要考慮是名稱型位址是否比數位型 IPv6 位址更合適。 如果名稱型位址更合適,則命名慣例的考慮應內建於使用者介面中,包括適用於工作的任何輸入錯誤檢查。
其他複雜度與顯示 IPv6 位址相關,開發人員在修改其應用程式時,以及在設計 IPv6 位址的使用者介面表示法時,必須考慮這些位址。 其中一些考慮如下:
- 地址應該包含所有零序列,還是要使用雙冒號表示法?
- 是否更適合使用以數位為基礎的位址表示法或以名稱為基礎的表示法?
- 使用者是否有興趣辨別尋址配置的特定層面,例如子網前綴、範圍標識元或其他子字段?
- 使用者是否有興趣判斷位址的其他層面,例如 TLA 識別碼、NLA 識別碼或 SLA 識別符?
- 您的使用者介面能否辨別內嵌的 IPv6 位址,如果是的話,如何處理和顯示這些位址? 在向使用者顯示位址資訊時,您是否會區分 IPv4 相容位址和 IPv4 對應 IPv6 位址?
還有其他考慮,開發人員也應該在開發IP位址使用者介面時,仔細考慮其客戶物件。
最佳做法
- 開發人員在修改應用程式以支援 IPv6 時,必須考慮每個使用者介面的適當方法。 確保使用者介面包含足夠的長度來顯示 IPv6 位址是命令式的,如同判斷該位址是數位或名稱為基礎。
- 盡可能使用 IPv6 位址時,使用現有的 Winsock 和 IP 協助程式函式,而不是重新實作此邏輯。 例如,RtlIpv6AddressToString、RtlIpv6AddressToStringEx、RtlIpv6StringToAddress和 RtlIpv6StringToAddressEx 函式可用來轉換這些 IPv6 位址的 IPv6 位址和字符串表示法。
要避免的程序代碼
- 相依於 IPv4 大小的位址的使用者介面元素必須經過審查,且該審查的一部分應包含您提供的資訊是否適用於 IPv6。
- 指定IP位址的功能也應該取決於IPv4正在使用中,還是可以使用IPv6。 如果可以使用 IPv6,是否適合指定以數位為基礎的位址或名稱型位址?
編碼工作
將現有的程式代碼基底從 IPv4 修改為 IPv4 和 IPv6 互作性
- 執行使用者介面的可視化檢視,尋找任何相依於IP位址字元串特定長度的專案。 具有容易識別的四節點十進位表示法的控件很容易發現,但其他人則不是。 可能會有可以顯示IP位址的位置,例如在對話框中,IPv6 位址可能會用盡顯示空間。
- 找到上述任一控件時,請仔細檢查是否適合在使用 IPv6 時顯示位址。 如果 IPv4 或 IPv6 可能正在使用中,請確定使用者介面可以容納其中一個。 以可顯示整個 IPv6 位址的使用者介面控制項取代或增強任何控制件。
- 請追蹤使用者介面的測試,以確保啟用 IPv6 位址顯示的變更在使用 IPv4 位址時維持預期的可用性。 此外,測試通訊協定地址顯示位置,例如資訊對話框,以確保它們能正確處理IPv6 位址。
相關主題
-
適用於 Windows 套接字應用程式的 IPv6 指南
-
適用於 IPv6 Winsock 應用程式的 Dual-Stack 套接字
-
IPv6 Winsock 應用程式的 函數調用