質問: ipv6アドレスにパーセント記号 '%'があるのはなぜですか? 私は自分のマシンのipアドレスを取得するために.net frameworkクラスを使っています。dns.gethostaddresses(dns.gethostname()) 私はipv4とipv6の両方のアドレスを持つvirtualboxアダプタを持っています。 .netコードを使用して、ipv6アドレスをfe80::71a3:2b00:ddd3:753f%16として取得しています最後の%16に注意してください?ただし、wmiを使用して同じクエリを実行すると、アドレスは「fe80 :: 71a3:2b00:ddd3:753f」と表示されます。それで、%16は特別な意味を持ちますか?編集:これについてもう少し観察したところです。そして、彼らはスティーブンジェニングスが彼の答えで言ったこととかなりよく一致します。どのipv6アドレスが発行されたのかを確認するために、vmwareをインストールしました。アドレスは以下のとおりです。fe80 :: 3dd0:7f8e:57b7:34d5%19fe80 :: b059:65f4:e877:c40%20明らかに、%の後の数字は16進数表現ではありません。 wmiを使用してネットワークアダプタに使用できるすべてのプロパティを確認したところ、番号は各ネットワークアダプタのinterfaceindexプロパティとまったく同じであることがわかりました。 msdn に従って、各ネットワークアダプタを一意に識別します。このプロパティはvistaで導入されました。まだ私を混乱させていたのは、ipaddressクラスが有効でない限り、その形式でipアドレスを作成することを許可するのはなぜなのかということです。答えはスティーブンによって提供されました。番号はスコープidです。 ipaddressには、アドレスとスコープidを受け取るコンストラクタがあります。ああ、そしてこれら3つのネットワークアダプタはすべてリンクローカルでした。 ipconfigで確認しましたクール。おもしろかった!
回答: プレフィックスfe80 ::/64の付いたipv6アドレスは、そのプレフィックスとネットワークデバイスのハードウェアアドレス(例では71a3:2b00:ddd3:753f)を組み合わせて構成されたリンクローカルアドレスです。 (ipv4のアナログは169.254.0.0/16です。)プレフィックスはマシン上のすべてのリンクローカルアドレスで同じであるため、ルーティングではどのインタフェースを参照しているのかを知る必要がある場合があります。そしてそれが、ゾーンインデックスと呼ばれるパーセントの後の数字が指定するものです。詳細はオペレーティングシステムによって異なります。windowsでは、%16はインターフェイス番号16です。例えばlinuxでは、%eth0のようになるでしょう。一部のツールまたはapiは、このゾーンインデックスをその目的上重要ではないか暗黙的と見なします。例えば、linuxではifconfigツールはそれを表示しません。アドレスがどのインターフェースに属しているのかが明らかだからです。しかし一般的にそれは考慮に入れられるべきです。