私の次の質問は非常に初心者レベルであり、ネットワークの基本についての重要な知識が不足している可能性があります。質問はどういうわけかサーバー/クライアントの概念に関連していますが、背後にある主な問題は間違いなくプログラミングではありません。だから私はここで試してみて、完全に話題から外れないことを望んでいます。質問がどこに配置されたほうがよいかわかりません...何が問題なのかについてのヒントを与えずに質問を閉じないでください。
単一のマシン(私の場合はPC)の場合、複数のネットワークカードをインストールして、たとえば2つの物理インターフェイスA
、B
を提供できます。 前 の質問によると、これら2つのインターフェイス(レイヤー1)を2つの異なるIPアドレス(レイヤー3)に割り当てることができます。
インターフェイスのレイヤ2モジュールに登録されているレイヤ3モジュールには、そのインターフェイスのレイヤ3アドレスが割り当てられます。
たとえば、IP(A)
= 192.168.1.10およびIP(B)
= 192.168.2.10;両方とも、特定のインターフェイスカードのTCP/IPのプロパティによって割り当てられます。
質問:
たとえば、同じマシン上でを実行しているサーバープロセスは、着信接続のリッスンを開始する前に、IP(B)といくつかのポートに自分自身を登録することによって開始されます。したがって、インターフェイスBを介して到着する着信要求をリッスンしています。
これで、TCPクライアント同じマシン上があり、IP上のサーバーへのTCP接続を開きたい) (B)したがって、AとBを外部ループバックケーブルで単純に接続し、Bへの接続が要求されたときにトラフィックがそのケーブルを通過することを期待します。しかし、クライアントにどのインターフェイスを使用するかをX
する方法はありません。 .. A
またはB
を使用しますか?B
とA
は選択したサブネットマスクに応じて異なるネットワークであり、したがってB
の終了アドレスへの要求はインターフェイスB
を介して発行されるため、B
を使用すると思います。副次的な質問:ケーブルが不要なため、パッケージの方法はどうなっていますか?内部ループバックはありますか?
しかし、forceループバックケーブルを介したトラフィック(何らかの理由で)を実行したい場合はどうなりますか?それは可能ですか?クライアントがIP(B)
をアドレス指定するときに、発信インターフェイスとしてAを使用していることをどのように確認できますか。最後に:クライアントとサーバー間で送信されたすべてのパケットがケーブルを介して転送されることを確認したいだけです。
A
とB
、さらにサーバーとクライアントがそれぞれ単一のネットワークインターフェイスを持つ異なるマシン上にある場合、私は問題なく理解できます。しかし、ここで?
なぜそれが必要なのですか?
実際には、次のステップとして、A
とB
の間のケーブルを実験的なセットアップに置き換えたいと思います。実験的なセットアップでは、非常に悪いチャネルをシミュレート/エミュレートするために、ある種のノイズと統計エラーを意図的に追加することでビットエラーレートを変更できます。それぞれの側を異なるマシンに置くこともできますが、両方を同じマシンに置くことをお勧めします。
ほとんどのOSのネットワークスタックは、送信先のアドレスがローカルマシン自体が所有するアドレスであることを認識し、内部ソフトウェアループバックメカニズムを使用して、トラフィックがホストを離れるコストやさらにはコストを負担しないようにします。イーサネットハードウェアにぶつかる。実際、ほとんどの場合、ネットワーキングの人々はループバックについて話します。彼らは、ネットワーキングソフトウェアスタックの完全に内部にあるこれらのループバックメカニズムについて話します。 「ループバック」ほとんどありませんは「1つNICそしてネットワークケーブルの外部ループを越えて別のNICに戻る」」を意味します。
トラフィックを強制的に1つNICに戻し、別のトラフィックに戻す方法は、OSによって異なる場合があります。たとえば、FreeBSDやmacOSなどのUNIXのBSDファミリの一部のメンバーには、net.link.ether.inet.useloopback
というsysctlがあります。 、デフォルトでは1(有効)に設定されていますが、0(無効)にクリアすると、同じマシン上の別のIPアドレス宛ての場合でも、トラフィックを強制的に送信することができますNIC 。
より詳細なソリューションを提供するには、オペレーティングシステムまたはデバイスのマークが必要だと思いますが、この設定をネットワークのデフォルトルートとして実現できます。
これは、ネットワーク192.168.1.0/24からのすべてのトラフィックがx.x.x.xのIPアドレスまたは特定のポートからloとして送信されることを定義することを意味します。
そのポート/アドレスを介してトラフィックを取得するためのルートを定義したルーティングテーブルが必要です。