IPv6 Winsock 應用程式的使用者介面問題
從 IPv4 到 IPv6 的最明顯變更之一是 IP 位址的大小。 許多使用者介面都會提供對話方塊,讓使用者能夠輸入 IP 位址,如下圖所示。
由於 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 位址,這些 IP 位址不會使用雙冒號來代表) 下方第一個位址 (一系列零,以及能夠在下方顯示最長可能的 IPv6 位址 (第二個位址,以及建立其 IPv6 支援的使用者介面時,內嵌的 IPv4 位址) 。 另請注意,將範圍識別碼 (識別碼) 新增至下列位址,將長度增加為另一個十一個字元:
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 大小位址的使用者介面元素必須經過檢查,而該檢查的一部分應該包含您在 IPv4) 下提供的資訊是否適用于 IPv6 (。
- 指定 IP 位址的功能也應該取決於 IPv4 正在使用中,還是可以使用 IPv6。 如果有 IPv6 可用,是否適合指定以數位為基礎的 (十六進位) 位址或名稱型位址?
程式碼撰寫工作
將現有的程式碼基底從 IPv4 修改為 IPv4 和 IPv6 互通性
- 執行使用者介面的視覺化檢閱,尋找任何相依于 IP 位址字串特定長度的專案。 容易識別四個區段小數點標記法的控制項很容易發現,但其他則不是。 可能會有一些位置可以顯示 IP 位址,例如在對話方塊中,IPv6 位址可能會用盡顯示空間。
- 尋找任何這些控制項時,請仔細檢查是否適合在使用 IPv6 時顯示位址。 如果 IPv4 或 IPv6 正在使用中,請確定使用者介面可以容納其中一個。 以可顯示整個 IPv6 位址的使用者介面控制項取代或增強任何控制項。
- 請追蹤使用者介面的測試,以確保啟用 IPv6 位址的變更在使用 IPv4 位址時維持預期的可用性。 此外,測試通訊協定位址顯示位置,例如參考對話方塊,以確保它們能正確處理 IPv6 位址。
相關主題