質問
第一に、私はIPv6の詳細に慣れていないので、これがIPv6ルーティングの単なる誤解であっても驚かないでしょう。 P2Pオーバーレイネットワークを実行している状況を考えてみましょう。その一部は、単一のLANの境界内にあります。このLAN内のノードには、次のリンクローカルアドレスがあります(自分で表示):
- ピア1 fe80 :: 225:4bff:fea8:e200%en0
- ピア2 fe80 :: 225:4bff:fea8:e201%eth1
- ピア3 fe80 :: 225:4bff:fea8:e202%en1
今、各ピアが何らかの方法で他のピアを発見し、お互いのアドレスを持っていると仮定します。各ピアは12345などのポートでリッスンしています。ピア1がピア2と通信したい場合は、URIを試して使用する可能性があります。
tcp:// [fe80:225:4bff:fea8:e201%eth1]:12345
ここで問題が発生します。ピア1には「eth1」という名前のアダプターがないため、このIPv6ゾーン識別子は認識されません。ゾーンIDがアドレスから取り除かれた場合、ピア1は、ホストに接続するために使用する必要があるアダプターを判別できません。
では、質問:標準的な方法でIPv6アドレスのゾーン識別子を解決することは可能ですか?そうでない場合、すべてのゾーン識別子についてシステムにクエリを実行し、成功するまで各ゾーン識別子を順番に使用してアドレスへの接続を試行する必要がありますか?または、リンクローカルアドレスを使用して通信しようとすることは、そもそも愚かなアイデアですか?
解決
ローカルアドレスのリンクは、何らかのメカニズムがある場合にのみ適切です問題の他のノードを自動的に見つけて接続し、正しいインターフェイスにバインドします。
ユーザーがアドレスを手動で入力すると予想される場合は、サイトを使用する必要があります-ローカルアドレス(またはより良いのは、固有のローカルアドレス)ユーザーが自分で設定するか、mDNSなどのリンクローカルアドレスの上にアドレス解決方法を設定します。