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 アドレスのユーザー インターフェイス表示を作成するときにこの機能を考慮する必要があります。 確かに、開発者は、IPv6 対応ユーザー インターフェイスを作成するときに、二重コロンを使用して一連のゼロ (下の最初のアドレス) を表す IP アドレスを表示できるだけでなく、可能な限り長い 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 アドレスの表示には、他にも複雑な点があります。 これらの考慮事項の一部を次に示します。
- アドレスに 0 のすべてのシーケンスが含まれているか、または二重コロン表記を使用する必要がありますか?
- 数値ベースのアドレス表現または名前ベースの表現を使用する方が適切ですか?
- ユーザーは、サブネット プレフィックス、スコープ識別子、その他のサブフィールドなど、アドレス指定スキームの特定の側面を識別することに関心がありますか?
- ユーザーは、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 アドレスが適切に処理されていることを確認します。
関連トピック