ネットワークインターフェイスが他のデバイスのように/ devに配置されていないのはなぜですか?

ネットワークインターフェイスが他のデバイスのように/ devに配置されていないのはなぜですか?

疑問に思うのに、ネットワークインタフェースがなぜ/ devにないのですか? / devの下にノードとして表示されない他の種類のデバイスはありますか?

ベストアンサー1

多くのデバイスでは、基本的な作業はコンピュータから周辺機器にバイトを送信するか、コンピュータの周辺機器からバイトを受信することです。これらの機器はパイプに似ており、うまく機能します。キャラクターデバイス。非読取りおよび書込み操作 (シリアル ラインのフロー制御など) の場合、デバイスは以下を提供します。I/W制御

一部のデバイスは通常のファイルと非常によく似ています。限られた数のバイトで構成されており、特定の場所に書き込んだ内容を後で同じ場所から読み取ることができます。これらのデバイスを呼び出します。ブロックデバイス

ネットワークインタフェースはより複雑です。バイト以外のパケットを読み書きします。との一般的なインターフェイスを使用することはまだ可能ですが、readこれはwriteぎこちないかもしれません。おそらくwrite、呼び出しごとに1つのパケットが送信され、呼び出しごとに1つのreadパケットが受信されます(バッファが小さすぎてパケットを保持できない場合、パケットは失われます)。 )。

ネットワークインターフェースは実際に提供できますioctl。実際、一部のUNIXバリアントではこれを行いますが、Linuxではそうではありません。このアプローチにはいくつかの利点があります。たとえば、Linuxでは、ネットワークインタフェースが利点を享受できます。ウデブ。しかし、利点は限られており、まだ試していません。

ほとんどのネットワーク関連アプリケーションは、個々のネットワークインターフェイスに興味がなく、より高いレベルで動作します。たとえば、WebブラウザはTCP接続を確立しようとし、WebサーバーはTCP接続を受信しようとします。この目的のために、次のような高レベルのネットワークプロトコル用のデバイスが便利です。

{ echo $'GET http://www.google.com/ HTTP/1.0\r';
  echo $'Host: www.google.com\r';
  echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80

実際、kshとbashはTCPとUDPクライアントにこれらのインターフェースを提供します。しかし、通常、ネットワークアプリケーションはファイルアクセスアプリケーションよりも複雑です。ほとんどのデータ交換はやreadなどの呼び出しを介して行われますが、write接続を確立するにはファイル名よりも多くの情報が必要です。たとえば、TCP接続を受信するには2つのステップが必要です。最初のステップはサーバーが受信を開始すると実行され、2番目のステップはクライアントが接続するたびに実行されます。これらの追加の手順はファイルAPIとうまく合いません。これがネットワークが独自のAPIを持つ主な理由です。

通常、Linuxにはエントリがありませんが、/dev他のUNIXバリアントにはエントリがある別の種類のデバイスはビデオアダプタです。原則として、単純なビデオアダプタは次のように公開できます。フレームバッファデバイスは、各ピクセルの色を表すブロックからなるブロックデバイスであり得る。アクセラレーションビデオアダプタは、アプリケーションがコマンドを送信する文字デバイスとして表示できます。ここで、デバイスインタフェースの欠点は、速度が遅いことです。ディスプレイアプリケーション(実際にはXサーバー)は、何でも表示する前にカーネル呼び出しを行う必要があります。代わりに、Xサーバーはより高速なので、主にビデオアダプタのメモリに直接書き込みます。

おすすめ記事