IPv6 Winsock アプリケーションのユーザー インターフェイスに関する問題
IPv4 から IPv6 への最も明白な変更の 1 つは、IP アドレスのサイズです。 多くのユーザー インターフェイスには、次の図に示すように、ユーザーが IP アドレスを入力できるようにするダイアログ ボックスが用意されています。
ユーザー インターフェイスする
IPv6 でのアドレス指定は、長さ、複雑さ、IPv6 アドレス空間内のセクションの重要性などの多くの要因により、ユーザーによる変更や指定に役立つものではありません。 そのため、ユーザーに自分のアドレスを指定する機能を提供する必要性が軽減されます。 さらに、IPv6 アドレス指定に関連する複雑さのため、管理者に IPv6 アドレス情報を指定する機能を提供することは、ノードごとに発生する可能性は高くはありません。
UI に IPv6 アドレスを表示することは考えられません。そのため、開発者は、IPv6 をサポートするようにアプリケーションを変更するときに、IPv6 アドレスのサイズの変動を考慮する必要があります。
このセクションの残りの部分では、IPv4 アドレス長の予測可能性と IPv6 アドレス長の考慮事項の違いについて説明します。 このセクションでは、IPv6 アドレスが 16 進数で表示されていることを前提とします。
IPv4 アドレスは、次のアドレス例に示すように、ドット付き 10 進表記に厳密に従うため、サイズを予測できます。
10.10.256.1
IPv6 アドレスは、二重コロン (::) を使用して一連のゼロを表すことができるようにする IPv6 アドレス規則により、それほど予測できません。 そのため、次の IPv6 アドレス表現は同じ IPv6 アドレスに相当します。
1040:0:0:0:0:0:0:1
1040::1
二重コロンを使用して一連のゼロを表す機能により、特定の IPv6 の長さが予測不能になります。そのため、プログラマは IPv6 アドレスのユーザー インターフェイス表示を作成するときに、この機能を考慮する必要があります。 確かに、開発者は、ユーザー インターフェイスで、二重コロンを使用しない IP アドレスを表示して一連のゼロ (下の最初のアドレス) を表し、IPv6 対応のユーザー インターフェイスを作成するときに、可能な限り長い IPv6 アドレス (次の 2 番目のアドレス、埋め込み IPv4 アドレス) を表示できることを確認する必要があります。 また、次のアドレスにスコープ識別子 (ID) を追加すると、その長さが 11 文字も長くなる点にも注意してください。
21DA:00D3:0010:2F3B:02AA:00FF:FE28:9C5A
0000:0000:0000:0000:0000:ffff:123.123.123.123
もう 1 つの重要な考慮事項は、名前ベースのアドレスが番号ベースの 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 が使用可能な場合は、数値ベース (16 進数) アドレスまたは名前ベースのアドレスを指定するのが適切ですか?
コーディング タスク
既存のコード ベースを IPv4 から IPv4 と IPv6 の相互運用性に変更するには、
- IP アドレス文字列の特定の長さに依存する要素を探して、ユーザー インターフェイスを視覚的に確認します。 識別しやすい 4 セクションのドット付き 10 進表記を持つコントロールは見つけやすく、他のコントロールは見つけやすくなります。 ダイアログ ボックスなど、IP アドレスを表示できる場所があり、IPv6 アドレスが表示ルームを使い果たされる可能性があります。
- これらのコントロールのいずれかを見つけたら、IPv6 を使用するときにアドレスを表示することが適切かどうかを調べます。 IPv4 または IPv6 が使用されている可能性がある場合は、ユーザー インターフェイスがどちらかに対応できることを確認します。 すべてのコントロールを、IPv6 アドレス全体を表示できるユーザー インターフェイス コントロールに置き換えるか拡張します。
- ユーザー インターフェイスのテストに従って、IPv6 アドレスの表示を有効にする変更によって、IPv4 アドレスを使用するときに意図した使いやすさが維持されることを確認します。 また、情報ダイアログ ボックスなどのプロトコル アドレスの表示場所をテストして、IPv6 アドレスが適切に処理されることを確認します。
関連トピック
-
IPv6 Winsock アプリケーションの Dual-Stack ソケット
-
IPv6 Winsock アプリケーションの 関数呼び出し
-
ハードコーディングされた IPv4 アドレスの使用 の