3

ゾーン インデックスは、sockaddr_in6 構造体の scope_id とどのように関連していますか?

機能はプラットフォームによって異なるようです。それらがどのように関連しているか知りたいです。たとえば、Windows にはSCOPE_ID 構造体(および 32 ビット値のみ) があります。Mac OSX には 32 ビット値しかありません。明らかに 32 ビット値が適していますが、正確にはどのように配置されているのでしょうか? それでも上位4ビットは「レベル」ですか?ネットワークバイトオーダーはこれにどのように影響しますか?

また、Windows では、IP アドレスで指定されたゾーン インデックス (例: FF80::1%1) は、前述の構造の下位 28 ビットに直接変換されると想定しています。番号ではなく名前を使用する Mac OSX ではど​​のように機能しますか (例: FF80::1%en0)。4 CC としてエンコードしますか? 同様に、Linux はおそらく 28 ビットに収まらない 4 文字を使用していることを思い出すようです。

それで、誰かがこの混乱を私に説明できますか?ネット上にはipv6に関する貴重な情報がほとんどないため、終了したら、これらすべてに関するチュートリアルを書く必要があります。

編集: scope_id はネットワーク バイト順ですか? recvfrom から返された scope_id を見ているところですが、リトルエンディアン順になっているように見えます...それは正しくありませんか?

4

1 に答える 1

1

ゾーンとスコープのインデックスは同じで頻繁に交換されますが、用語自体は異なります。

スコープは、「グローバル スコープ」、「ローカル スコープ」、「ユニバーサル スコープ」のように使用され、特定の IPv6 アドレスの一意性を表します。すべてのインターフェイスには、直近の LAN セグメントに固有のローカル スコープがあり、ネットワークに接続したばかりのプリンターなどのローカル デバイスの自動構成と検出に役立ちます。グローバル スコープの IPv6 アドレスは、DHCP サーバーによって提供される場合があります。

ゾーンは、ローカル スコープ内の特定の有効なインターフェイスを指定することです。

スコープ インデックスはインターフェイス インデックスとは異なるため、インターフェイスを指定するには、次のような構造を使用します。

struct interface_req_t {
        uint32_t                                ir_interface;
        uint32_t                                ir_scope_id;
};

値を解釈する方法はプラットフォームごとに異なります。Windows では、ドメインに応じてインターフェイス列挙の再解釈がいくつかあります。Windows 実装の欠点は、アダプタをホット スワップするとインデックスが変更される可能性があることです。Unixでは、必要に応じて数値形式に解決できるインターフェース名%qe0、などを目にする傾向があります。Windows Vista では、互換性のある API が追加されています。%eth0if_nametoindex()

アドレス プレフィックス fe80::/10 によって識別できるのは、ローカル スコープのみです。

Windows の SCOPE_ID は、IPv4 マルチキャストにも存在する設計、つまりアドレスの管理ドメインの分割を示しています。それはすべて純粋にオプションであり、頻繁に無視されます。

于 2010-07-06T10:14:39.630 に答える