2011-08-09 7 views
1

私はtcpreplayとtcpdumpを使用してあるマシンから別のマシンにパケットを送信しようとしています。パケットを最初にキャプチャするのは誰ですか?カーネルまたはドライバですか?

NICから直接パケットをキャプチャするためのドライバを作成すると、どのパスが追跡されますか?

1)N/Wパケット----> NICカード---->アプリケーション(カーネルの役割なし)

2)N/Wパケット----->カーネル---- - > NICカード--->アプリ

おかげ

+3

どのオペレーティングシステムですか?また、あなたの質問は貧弱です。ドライバは、カーネル内の他のものと同じくらいカーネルの一部です。 – Nemo

+0

@Nemoカーネルの一部であるドライバに関するあなたのコメントは、私をこの質問に導いたものです。私は同じ欠陥を指摘するつもりでした。 –

答えて

6

それがこの順に通常は次のとおり

  • NICハードウェアは、電気信号を取得し、ハードウェアは、通常、コンピュータの物理メモリにマッピングされ、そのレジスタおよびバッファの一部は、
  • ハードウェアIRQラインを活性化させる更新
  • カーネルが割り込み処理ルーチンにトラップし、ドライバのIRQ処理関数を呼び出します。
  • ドライバがRXまたはTX用かどうかを確認します
  • RX tドライバは、NICハードウェアバッファからネットワークバッファ用に予約されたカーネルメモリに設定します。
  • ドライバは、入力が利用可能であることを上位レイヤカーネルネットワークスタックに通知します。
  • ネットワークスタック入力ルーチンは、この入力に関心のあるアプリケーションを持っていれば、アプリケーション処理のためのパケットをバッファし、入力待ちのプロセスがブロックされた場合、カーネルはそれを実行可能とマークします。
  • カーネルスケジューラは、再開はアプリケーションがネットワーク入力を消費する

次に、d特定のハードウェア/ OSの特殊なケースです。ハードウェアへのユーザ直接接続を行うベンダーの1つはSolarflareです。

+0

これはあまりにも明確な質問に答えるためにタイムアウトを取ってくれてありがとう。あなたの説明は詳細です。あなたはそれについてもっと読むことができるリソース/チュートリアルを知っていますか?そのような質問をすることによって恥ずかしいことをやめますか? – Anon

+0

参照は1つだけありません。 OSの内部およびネットワークに関するすべての書籍(特にStevens)が役立ちます。あなたがLinuxにいるなら、 "Linux Device Drivers"(http://lwn.net/Kernel/LDD3/)が非常に教育的かもしれません。 –

3

ドライバは、ハードウェアと直接対話するコードの一部です。パケットを見る最初のコードです。

ただし、ドライバはカーネル空間で動作します。それ自体はカーネルの一部です。そして、それは確かにその仕事をするためにカーネル施設(例えばメモリ管理)に依存するでしょう。したがって、「カーネルの役割はありません」は真実ではないでしょう。

+0

ありがとうございます。はい、私の質問はあまり明確ではありません、私は同意します、申し訳ありません。 – Anon

関連する問題