2010-12-12 4 views
-1

ルータは、受信したパッケージの送信元MACアドレスを前のホップのアドレスで置き換え、宛先のMACアドレスを次のホップのアドレスに置き換えます。Linuxカーネルのルータコードは、MACアドレスを置き換えます

linuxはルータとして機能する機能を提供します。私の質問は、どのようにカーネルコードは、そのパッケージ転送プロセス中にMACアドレスの更新機能を実装していますか?どこで実際に何が起こるかされていないことを...

+2

私の理解では、ソフトウェアによっては発信パケットのMACを直接制御しないカードもあります。つまり、ifconfigで設定することはできますが、そのようなカードの場合はカーネルがMACを挿入していません。だから、たとえそのような場所があっても必ず使用されるとは思われません。 – asveikau

+0

しかし、私はまだカーネルコードがパッケージの内容を変更する場所があるはずだと思います。 Linuxマシンもブリッジとして機能することができます。その場合、マシンによるMACアドレスの転送/転送は変更されません。ルータのケースでは、変更されているので、カーネルがパッケージを更新するかどうかを選択できる場所があるはずだと思います。 –

答えて

2

私は/ネット/ IPv4のコードを探してみてくださいコード

のこの部分ですが、何かを見つけることができません。

IPはイーサネットに依存しないため、下位層のプロトコルに依存します。

ローカルで送信されたIPパケットである場合、または別のホスト用にルーティングされている場合も同じことが起こります。

LinuxのIPv4スタックは決してイーサネット依存ではありません。実際には、他の多くのリンク層プロトコルがカーネルでサポートされています。 IPはWANプロトコルであるため、異なる基礎となるプロトコル間をルーティングできます。いくつかの例としては、

  • PPP、スリップ(シリアルライン)
  • トークンリング(主にレガシー、私は思う)
  • ATM
  • 上(トンネル、主にVPNの)PPTP、GRE
  • IPです
  • 無線LAN(ローカル通信のみのための)ループバックとダミー(これは、実際には、イーサネットとほとんど同じであるが)

したがって、あるイーサネットインターフェイスから別のイーサネットインターフェイスにIPフレームをルーティングすると、リンクレイヤが完全に取り除かれ、ルーティング後に新しいリンクレイヤが形成されます。プロトコルがイーサネットでない場合、代わりにそのプロトコルのための適切なリンク層パケットが使用されるでしょう。

誰も「MACアドレスを変更する」というわけではなく、むしろ、リンク層パケットは完全に再構築されています。

+0

Linuxカーネルが新しいコードを再構築するというコードをどこで見つけることができますかリンク層フレーム/パッケージヘッダ?私の目標はLinuxのルータによって転送されているときにパッケージのMACアドレスを変更しないようにすることだと思うので、この新しいリンクレイヤヘッドを構築してその動作を変更するコードを見つけることができます.. –

+1

私の印象は、それがハードウェアに固有であるため、各デバイスドライバはそれを別々に行うということです。デバイスの中には、ヘッダーの一部をハードウェアに書き込むものもあります。 – MarkR

関連する問題