ip a による inet/inet6 ライン出力

ip a による inet/inet6 ライン出力

ip aコマンドの出力を理解しようとしています。

たとえば、ここでは次のような出力を取得できます。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever 
     inet6 ::1/128 scope host 
         valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 
     link/ether 00:15:5d:4c:26:18 brd ff:ff:ff:ff:ff:ff 
     inet 172.21.254.173/20 brd 172.21.255.255 scope global eth0 
         valid_lft forever preferred_lft forever 
     inet6 fe80::215:5dff:fe4c:2618/64 scope link 
        valid_lft forever preferred_lft forever

私が知りたいのはinetとinet6です。

情報を見ると、IPv4とIPv6、IPアドレス(およびブロードキャストアドレス)と範囲が表示されます。

ただし、スコープ情報の後に続くコンテンツのドキュメントが見つかりません。たとえば。loinet 127.0.0.1/8 scope host

たとえば、追加情報がある可能性があることを確認しましたdynamic

誰でもその文書を知っていますか?

(また、inet行の末尾にインターフェイス名が表示されますが、inet6行には表示されない理由はわかりません。)

ありがとうございます!

答え1

man ipコマンドのヘッダー文書が提供されていますip。最後に、コマンドip-addressの詳細をip address知ることができる相互参照(「参照」)を提供します。

文書を見ると、man ip-addressその範囲への参照を見つけることができます。たとえば、次のようになります。

IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label LABEL ] [ scope SCOPE-ID ]

SCOPE-ID := [ host | link | global | NUMBER ]

同じマニュアルページをさらに検索すると、以下がSCOPE定義されます。

scope SCOPE_VALUEこの住所が有効な地域です。利用可能な範囲はファイルにリストされています/etc/iproute2/rt_scopes。事前定義された範囲値は次のとおりです。

  • global- この住所は世界中で有効です。
  • site- (IPv6のみ、廃止)アドレスはサイトローカルです。つまり、住所はサイト内で有効です。
  • link- アドレスはリンク - ローカルアドレスです。つまり、このデバイスでのみ有効です。
  • host- このアドレスはこのホスト内でのみ有効です。

質問の2番目の部分は、アドレスタイプの定義で答えられますlink

答え2

IPv6リンク - ローカルアドレスの特別な点は、通常の操作の一部として、すべてのIPv6リンクで同じアドレス範囲が使用されることです。scope linkリンクローカルアドレスはfe80::215:5dff:fe4c:2618/64ホストでのみ有効であり、eth0他のネットワークインターフェイスのホストには有効なアドレスではないことを強調する部分です。 (実際には、アドレスが通常MACアドレスに基づいて割り当てられる方法を考えると、これらのケースはまれですが、他のリンクの他のホストで同じアドレスを使用できます。)

これは、すべてのリンクとインターフェイスで有効なグローバルアドレスとは異なります。

たとえば、「アドレス範囲」および「範囲リテラルIPv6アドレス(ゾーンインデックスを含む)」セクションを参照してください。Wikipediaページ「IPv6アドレス」

答え3

私はあなたが尋ねるいくつかの質問に答えようとします:

「インターフェイス名がinet行の末尾に表示されますが、inet6行には表示されない理由はわかりません。」

inet(またはipv4)は、歴史的な理由でインターフェース名をリストしているようです。これは、1つのインターフェイスに複数のアドレスを使用したい場合によく使用される「エイリアス」インターフェイスに関連しているようです。 Linuxは現在、エイリアシングなしで単一のインターフェイスで複数のIPアドレスをサポートできるようになりましたが、過去にはそうではありませんでした。以前のバージョンとの互換性のために、インターフェースエイリアスはまだ存在します。

inet6(またはipv6)は対応する(エイリアス)情報を使用しません。あるいは、より正確には、Linuxカーネルのnetlinkインターフェースがインターフェースinet6アドレス情報を照会するときにインターフェース名(IFA_LABEL)を報告しません。

私はUbuntuディストリビューションでLinuxを使用していると仮定するために、あなたの質問に関連するタグを使用しています。コマンドip address show(またはip aあなたが言うもの)は次のようになります。IP ルート 2パック。このコマンドは、netlink 機能を使用して Linux カーネルからネットワークインタフェースとネットワークアドレス情報を取得します。

次のコマンドを使用しますman 7 rtnetlink(またはhttps://man7.org/linux/man-pages/man7/rtnetlink.7.html)は、netlinkインターフェースとIFA_LABELがある場所に関するいくつかの情報を提供します。

「Linux ネットワーク内部の理解」という本では、ifa_label について次のように説明します。 「主に2.0.xカーネルとの以前のバージョンとの互換性のために使用される文字列で、eth0:1のような名前のエイリアスインタフェースを使用できます。」

次のリンク(https://www.kernel.org/doc/html/latest/networking/alias.html) また、Linux IP エイリアス機能は古くなっていますが、以前のバージョンとの互換性のためにまだ存在していると説明しています。

詳細を詳しく知りたい場合は(UnixLinuxよりStackOverflowに適しています)、ipファイルで「if(rta_tb [IFA_LABEL])」を含む「ipアドレスを表示する」(iproute2)行を見つけます。 /ipaddress.c ソースコード。コマンドがカーネルからIFA_LABELメッセージを受け取ると、それをコマンドの出力として印刷することがわかります。

他の人が指摘したように、ipとip-addressのマニュアルページは、inetとinet6の後の出力で見ることができる他の値のいくつかに関する追加情報を提供するかもしれません。

これがどのように機能するかについての私の理解であり、他の人はより多くの/より良い情報を持っているかもしれません。

関連情報