3

Linux でクロスオーバー ケーブルで接続された 2 つのイーサネット インターフェイス間でデータを送信したいと考えています。2 つのイーサネット インターフェイスは同じボックスにあります。私は異なる静的 IP アドレス (1.2.3.4 と 5.6.7.8) を持つようにイーサネット インターフェイスを定義し、ソケットを使用してある IP アドレスから別の IP アドレスにバイトを送信しています。データがボックスの 1 つのインターフェイスを離れ、同じボックスの他のインターフェイスで受信されることを強調したいと思います。この結果の 1 つは、ケーブルのプラグを抜くと、同じボックス上のクライアントとサーバー間の通信が妨げられることです。

カーネルは私が推測するよりも賢く、ネットワーク上で情報を送信する必要はないと判断し、データを内部のソケット間で直接ルーティングして、テストを無効にします。SO_BINDTODEVICE を使用してクライアントに特定のインターフェイスからデータを送信させようとしましたが、サーバーはそれを認識しません。私は本当に立ち往生しており、これはそれほど難しいことではないようです。

route -n テーブルには 2 つのエントリがあります

Dest       Gateway    Genmask        flags  metric  use  interface
1.2.3.0    0.0.0.0    255.255.255.0    U       0     0   eth0
5.6.7.0    0.0.0.0    255.255.255.0    U       0     0   eth1
4

2 に答える 2

1

次の2つのIPアドレスを使用してみてください。

  • 192.168.64.1
  • 192.168.64.2

これが問題かどうかはわかりませんが、1.2.3.4と5.6.7.8は同じサブネット上にありません。(それぞれにマスクを適用すると、[宛先]列に表示されているのと同じネットワークアドレスを取得できないためです。)

于 2010-02-19T21:39:02.307 に答える
1

1.2.3.4/24 から 5.6.7.8/24 の間では、ルーターを経由しないと IP を使用して通信できません。問題は、IP が同じネットワーク セグメント内の他のコンピュータとしか通信できないことです。ネットワーク アドレスを計算するには、インターフェイス アドレスとサブネット マスクの論理ANDを実行する必要があります。これにより、ネットワークアドレスが得られます。2 つのネットワーク アドレスが異なる場合は、ルーターが必要になります。この例では、ネットワーク アドレスは 1.2.3.0 と 5.6.7.0 になります。これらは異なるため、データを送信します。

さらに重要なことに、ほとんどのネットワーク スタックは、両方のインターフェイスが同じコンピューター上にある場合、物理インターフェイスまでデータを送信しないことを確認できるほどスマートです。おそらく、IP スタックを介してメッセージを送信するだけです。ただし、これが機能するには有効なアドレスである必要があります。

ループバック ネットワーク デバイスだけを使用して、同様のセットアップをテストすることもできるはずです。(仮想ネットワーク カード。)

于 2010-02-19T21:40:33.180 に答える