ループバックネットワークインタフェースはどのように実装されますか?

ループバックネットワークインタフェースはどのように実装されますか?

レポートによると、ループバックネットワークインターフェースは「完全にソフトウェアで実装された仮想ネットワークデバイス」です。Unix.SEについての他の質問

しかし、この実装は実際にどのように行われ、どのように動作しますか?

私が知る限り、IPはローカルルーティングテーブルにローカルに表示されます。

ip route show table local  

ローカルでマークされた IP に送信すると、ループバックデバイスがトリガされます。しかし、この検出は純粋にルーティングテーブルを介して行われますか、それとも別のカーネル操作を介して行われますか?

私の究極の目標は、ループデバイス構成を操作して、ラップトップの2つのWLANアダプタ間でデータグラムを送信するときにネットワークに実際のトラフィック/データグラムが発生するようにすることです。いいえローカルループで。それは:

Interface 1 -> WLAN -> Interface 2 

いいえ:

Interface 1 -> LOOP -> Interface 2

答え1

非常に基本的なレベルでは、純粋にソフトウェアで実装されたデバイスです。仮想マシンが完全にソフトウェアであるのと同様に、ループバックも同様です(完全に異なるメカニズムを使用しますが)。

通常、インターフェイスがパケットを送信すると、最終的に有線に送信され、フラッシュされます。一方、ループバックは発信パケットを有線で接続するのではなく、そのインターフェイスの着信キューに移動し、着信パケットのように処理します。

パケットを評価すると、netfilterルーティングの決定が 2 回行われます。着信パケットに対して1回(たとえば、このパケットが正しいインターフェイスで受信されましたか?)、発信パケットに対して1回(たとえば、このパケットをどのインターフェイスで送信する必要がありますか?)このルーティング決定は、カーネルがローカルルーティングテーブルにパケットを調べるときに行われます。

答え2

ルーティングテーブル→デバイス→デバイスドライバ(ループバック)

UPD。 (2012-10-20):最近sysctlドキュメントを見つけました:«...

accept_local - BOOLEAN
    Accept packets with local source addresses. In combination
    with suitable routing, this can be used to direct packets
    between two local interfaces over the wire and have them
    accepted properly.

    rp_filter must be set to a non-zero value in order for
    accept_local to have an effect.

...»、それであなたの質問の2番目の部分への答えになることを願っています。

関連情報