追加読書

追加読書

ある時点で、私が(Linux Foundationで)見つけたいくつかのLinux教科書では、次のことが言及されました。

ipifconfigコマンドは、コマンドを使用するよりも多様で効率的です。インターネット接続代わりにソケットI/W制御システムコール。

後ろで何が起こっているのか理解できないので、誰でもこれについて詳しく説明できますか?

PS私も知っていますこのトピックただし、動作方法の具体的な違いは扱いません。

ベストアンサー1

FreeBSDやOpenBSDなどのオペレーティングシステムのコマンドは、ifconfig残りのオペレーティングシステムと一致するように更新されました。現在、これらのオペレーティングシステムでさまざまなネットワークインターフェイス設定を構成し、さまざまなネットワークプロトコルを処理できます。 BSDはioctl()これらのものをサポートしています。

Linuxの世界ではこれは起こりません。今日は3つのコマンドがありますifconfig

  • ifconfig~からGNU inetutils
    idebp%inetutils-ifconfig -l
    enp14s0 enp15s0 ルオ
    idebp%inetutils-ifconfig lo
    lo link encap: ローカルループバック
          inetアドレス:127.0.0.1ブロードキャスト:0.0.0.0マスク:255.0.0.0
          親ループバック操作MTU:65536指標:1
          RXパケット:9087エラー:0ドロップ:0オーバーフロー:0フレーム:0
          TXパケット:9087エラー:0ドロップ:0オーバーフロー:0キャリア:0
          衝突: 0 txqueuelen: 1000
          RXバイト:51214341 TXバイト:51214341
    ジェッドBP%
  • ifconfig~からNET-3ネットワークツール
    jdebp% ifconfig -l
    ifconfig: オプション --help' は使用法情報を提供します。-l' not recognised.
    ifconfig:
    idebp%ifconfig lo
    lo:flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 ネットマスク 255.0.0.0
        inet6::1 prefixlen 128scopeid 0x10<ホスト>
        inet6::2 prefixlen 128scopeid 0x80<互換可能、グローバル>
        inet6 fe80:: prefixlen 10scopeid 0x20<リンク>
        Loop txqueuelen 1000(ローカルループバック)
        RXパケット9087バイト51214341(48.8MiB)
        RXエラー0ドロップ0オーバーフロー0フレーム0
        TXパケット9087バイト51214341(48.8MiB)
        TXエラー0ドロップ0オーバーフロー0キャリア0クラッシュ0
    ジェッドBP%
  • ifconfig(バージョン1.40)からNoshツールセット
    jdebp% ifconfig -l
    enp14s0 enp15s0 ルオ
    idebp%ifconfig lo
    ルオ
        リンクループバック操作
        リンク先アドレス 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00
        inet4 アドレス 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
        inet4 アドレス 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
        inet6 アドレス::2 範囲 0 prefixlen 128
        inet6 アドレス fe80:: 範囲 1 prefixlen 10
        inet6 アドレス::1 範囲 0 prefixlen 128
    jdebp % sudo ifconfig lo inet4 127.1.0.2 エイリアス
    jdebp % sudo ifconfig lo inet6 ::3/128 エイリアス
    idebp%ifconfig lo
    ルオ
        リンクループバック操作
        リンク先アドレス 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00
        inet4 アドレス 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
        inet4 アドレス 127.1.0.2 prefixlen 32 bdaddr 127.1.0.2
        inet4 アドレス 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
        inet6 アドレス::3 範囲 0 prefixlen 128
        inet6 アドレス::2 範囲 0 prefixlen 128
        inet6 アドレス fe80:: 範囲 1 prefixlen 10
        inet6 アドレス::1 範囲 0 prefixlen 128
    ジェッドBP%

ご覧のとおり、GNU inetutilsとNET-3ネットワークツールはifconfigIPv6、複数のアドレスとのインターフェース、および-l

IPv6の問題の1つは、ツール自体にいくつかのコードがないことです。しかし、主な理由は、Linuxが他のオペレーティングシステムと同様にインターフェイスを介してioctl()IPv6機能を提供していないことです。プログラムはネットワーク経由でIPv4アドレスを表示および操作することができますioctl()

代わりに、Linuxは他のインターフェースsend()recv()特別でやや奇妙なソケットアドレスファミリを通してこの機能を提供しますAF_NETLINK

GNUとNET ifconfig-3できるこの新しいAPIを使用するために調整が行われました。これに反対する主張は、他のオペレーティングシステムに移植することはできませんが、これらのプログラムは実際には機能しているということです。すでにポータブルではありませんそれでもだから議論の余地はありません。

しかし、彼らは調整されておらず、今日まで上記のように維持されています。 (一部の人々は長年にわたってさまざまなポイントで作業してきましたが、残念ながら改善はプログラムに統合されていません。 Bernd Eckenfelsはパッチを受け取りませんでした。ifconfigパッチが作成されてから4年後、いくつかのnetlink API機能がNET-3 net-toolsに追加されました。 )

代わりに、いくつかのip新しいLinux APIを使用し、異なる構文を使用し、スタイリッシュなインターフェイスの背後にいくつかの異なる機能を組み合わせて、ツールセットをコマンドで完全に再作成します。command subcommand

ifconfigFreeBSDのコマンドライン構文と出力スタイルが必要なものがありますifconfig(GNUやNET-3にもなく、ifconfig確かにipありません)。だから1つ書きました。ifconfigLinuxでnetlink APIを使用して書くことができるという証拠です。

したがって、ifconfigあなたが引用したようなものについて受け入れられた知恵はもはや真実ではありません。これは今は本物ではありません。ifconfignetlinkを使用しないでください」と言います。二人を覆う毛布は三人を覆うことはできません。

それいつも「ネットリンクがより効率的だ」と言うのは事実ではありません。 netlinkを使用して実行される操作の場合、ifconfignetlink APIとAPIの間の効率に大きな違いはありませんioctl()。特定のタスクに対して、人々はほぼ同じ数のAPI呼び出しを実行します。

実際、すべてのAPI呼び出しは二つioctl()システムのシステムコールではなく、netlink ケースのシステムコールです。もちろん、netlink APIの欠点は、多くのシステムでツールがAPI呼び出しの結果を知らせる確認メッセージを受け取らない可能性を明示的に含むことです。

また、ipGNUやNET-3よりも「より一般的な」と言うのはifconfig事実ではありません。ネットリンクを使うので。別のプログラムが必要な1つの大規模プログラムでより多くのタスクを実行できるため、より汎用性があります。外の ifconfig。これらの追加操作を実行するために内部的にAPIを使用するだけでは、より多様にはなりません。これに対して、APIには一意のコンテンツはありません。ioctl()たとえば、FreeBSD APIを使用する一体型ツールを作成し、それがコマンドだけを使用するよりも「より一般的な」と同じように主張することがifconfigできます。routearpndp

netlink APIを使用してLinux用routearpおよびコマンドを作成することもできます。ndp

追加読書

おすすめ記事