ローカル ネットワーク内の別のマシンにイーサネット フレームを送信する正しい方法は何ですか?

ローカル ネットワーク内の別のマシンにイーサネット フレームを送信する正しい方法は何ですか?

最近、OSI モデルやネットワークなどについて学び始めました。C
でのコーディングが好きなので、独自のイーサネット フレームを送信したいと考えていました。

今は動作していますが、まだ1つ不明な点があります。
マシンからイーサネットフレームを送信するとき機械加工するB(両方のマシンが同じネットワーク内にあると仮定して)、どのMACアドレスを指定すればよいでしょうか?行き先フレームのMACアドレス?
ルーターのMACアドレスとマシンのMACアドレスの両方を試しましたBどちらの方法でも動作します。マシンのMACアドレスを取得するにはB、私は単に ARP 要求を作成しました。

しかし、正しい方法は何でしょうか?

私はマシン上のWiresharkでトラフィックを監視しましたそしてtcpダンプ機械でB。これがマシンの出力ですBe0:d5:5e:c6:52:9aはマシンのMACアドレスですB):

機械を指定する場合BのMACアドレスを宛先アドレスとして(a0:ce:c8:10:75:8cマシンのNIC MAC)):

18:42:46.152800 a0:ce:c8:10:75:8c > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 64: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

ルーターの MAC アドレスを宛先アドレスとして指定する場合 (c8:0e:14:fd:f3:23はルーターの NIC MAC です)。

18:45:04.735375 c8:0e:14:fd:f3:23 > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 60: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

この結果は、ルータがソースMAC アドレスであり、おそらくキャッシュを使用して、宛先 IP の正しい宛先 MAC アドレスを決定します。

ルータはマシンのMACアドレスがB指定されていますか?

両方の方法に違いはありますか?

好ましい/正しい方法はあるのでしょうか?

答え1

宛先マシンがローカルサブネット上にあることがわかっている場合、一般的に正しい方法は、宛先マシンのMACアドレスを直接使用することです(必要に応じてARPルックアップを行います)。これは機能します。関係なくフレームのイーサタイプまたは内容に基づいており、通常はルーターをバイパスします (イーサネット スイッチを介して短絡されます)。

もしフレームにIPv4またはIPv6が含まれている場合は、サブネットのルータに送信します。ルータはARPルックアップを実行し、フレームのペイロードを宛先IPアドレスが属するホストに転送します。(結局のところ、ルータはする:IP パケットを転送します (同じインターフェースにパケットを戻すだけの場合でも)。

ただし、ほとんどの場合、ローカル パケットをルーター経由で送信するのは非効率的であり、まったく不要です。安価なルーターの場合、パケットが非常に遅い CPU (イーサネット スイッチのフル ライン速度と比較して) で処理される可能性があります。

とはいえ、2番目の方法は実際には、スイッチやアクセス ポイントの「クライアント分離」(別名「プライベート VLAN」) 機能と組み合わせて使用​​されることもあります。

答え2

イーサネットにはルーターがないことを覚えておいてください。ルーターはレイヤー 3 (IP などが存在するネットワーク レイヤー) の概念であり、イーサネットの上位レイヤーであり、イーサネット自体はルーターを認識しないことになっています。

イーサネット ヘッダーの宛先フィールドに入力する正しいアドレスは、宛先ホストのイーサネット MAC アドレスです。

質問では、イーサネット フレームをホストに送信することについても触れられていますが、そのイーサネット フレームには、送信先のイーサネット宛先とは異なる IP ホストの IP データグラムが含まれていました。そのため、その IP ホストはルーターとして動作しており、IP データグラムを同じイーサネット LAN に送り返すことで IP データグラムをルーティングしましたが、今回は IP データグラムの宛先 IP ホスト アドレスに対応する正しいイーサネット宛先アドレスを使用していました。

関連情報