問題タブ [multihomed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winsock - recvfrom() UDP パケットを受信したインターフェイスの IP を取得する (Microsoft)
Microsoft マルチホーム PC の INADDR_ANY にバインドされたソケットで recvfrom() を使用する。recvfrom() が UDP パケットを取得するとき: パケットを受信したインターフェイス (IP) を見つけるにはどうすればよいですか?
sockets - 同じ PC 上の複数のプロセスに対する UDP ブロードキャストのパフォーマンスが低い
UDP を使用してサーバー システムから複数の Windows XP PC で実行されているクライアント アプリケーションにデータをブロードキャストするアプリケーションがあります。これは LAN 上にあり、通常はギガビットです。これは数年間うまくいきました。
ここで、各クアッド コア PC で 2 つ (またはそれ以上) のクライアント アプリケーションを実行し、アプリケーションの各インスタンスがブロードキャスト データを受信する必要があります。これを実装するために私が使用した方法は、各クライアント PC に複数の IP アドレスを与えることです。次に、各クライアント アプリは、同じポート番号を使用してサーバーに接続しますが、IP は異なります。これは機能的には機能しますが、何らかの理由でパフォーマンスが非常に低下します。データ転送速度が約 10 分の 1 になりました。
複数の IP アドレスを取得するために、2 つの NIC アダプターを使用することと、TCP/IP ネットワークの詳細プロパティで複数の IP アドレスを 1 つの NIC に割り当てることの両方を試しました。どちらの方法も同様にパフォーマンスが低下しているようです。また、いくつかの異なるメーカーの NIC を使用してみましたが、どちらも役に立ちませんでした。
私が気づいたことの 1 つは、データがより断片化されているように見えることです。PC 上のクライアントが 1 つだけの場合、クライアントに 20k バイトのデータを送信すると、ほとんどの場合、すべてのデータが 1 つのチャンクで受信されます。しかし、2 つのクライアントが実行されていると、データはほとんどがフレームのサイズ (1500 バイト) のブロックに収まるように見えるため、私のコードはさらに何度も繰り返す必要があります。しかし、これだけでパフォーマンスに劇的な影響を与えるとは思いません。
だから私の質問は、なぜパフォーマンスが非常に遅いのか、そしてそれをスピードアップするために何かできることがあるのか知っている人はいますか?
サーバーが PC ごとに 1 つのクライアントにのみデータを送信し、そのクライアントが同じ PC 上の他のクライアントにデータをミラーリングできるように、再設計できることはわかっています。しかし、それは大規模な再設計と再コーディングの作業であるため、最後の手段として保持したいと思います。
c# - 複数の接続とマルチホーミングを使用したファイルのダウンロード
私は大学4年生の学生です。私の卒業プロジェクトは、C# でコーディングする予定のダウンロード マネージャーです。MSDN のドキュメントを確認すると、プロジェクトは簡単に見えました。しかし問題は、私の先生がプロジェクトにマルチホーミングを組み込むように求めていることです。彼は、ダウンロード マネージャーに次のことを望んでいます。
- ユーザーがダウンロードしたいファイルを複数のセグメントに分割します。
- セグメントごとに、DM は接続を作成し、サーバーからそのセグメントを要求する必要があります。
- すべてのセグメントのダウンロードが完了すると、DM はセグメントを 1 つのファイルに結合する必要があります。
- マルチホーミングが存在する場合、各接続は異なる ISP を経由する必要があります (マルチホーミングが使用されている場合、コンピューターは複数のネットワーク アダプターを介して複数の ISP に接続されます)。これは、このプロセスがファイルのダウンロードを高速化するためです。
最初の 3 つのステップは達成できますが、4 番目のステップの解決策を見つけることができませんでした。
私は経験豊富なネットワーキングおよびプロトコル プログラマーではありませんが、ファイルの送信と要求のプロセスを簡素化するため、C# のみを選択しました。
java - JMXと2つのネットワークインターフェース
職場では、WindowsXPとJDK1.6.0_07(現在Javaの更新はできません)を備えた2台のPCがあり、両方とも2つのネットワークインターフェイス(NIC)を備えており、最初のPCは190.1.XXX.XXXの形式のIPを持っています(それはIA)であり、2番目は190.2.XXX.XXX(IB)です。「ipconfig/all」は両方のNICのホスト名HOSTNAMEをもたらすので、「nbtstat/aIA」と「nbtstat/aIB」も同様です。IBからIAへのpingは存在しません(チェックしていませんが、IAからIBへのpingは存在しないと思います)。堅牢性を確保するために、実際のアプリケーションが両方のNICでJMXで動作することを確認する必要があります。そしてここから問題が始まります。同じ動作は、次の場合にも観察される可能性があります。
2台目のPCで、JConsoleを持ってきて、IA:9000またはIB:9000またはHOSTNAME:9000のいずれかを使用してリモートプロセスに接続します。それらはすべて機能します。しかし、最初のPC(Java2Demoが実行されている)でIAを無効にすると、接続はまったくできなくなります(IBでもHOSTNAMEでも)。IBによるpingは機能するため、mstscも機能します(IBによる接続があります)。しかし、IBを無効にすると、IAとHOSTNAMEの両方で添付ファイルを取得します。
- そのような場合、JConsoleがIBに接続しないということは、どうして可能かわかりません。AFAIK、java.rmi.server.hostnameを定義しない場合、JMXは0.0.0.0を使用し、両方のNICでリッスンします。これがネットワーク自体に関係している場合は、IT部門に何を依頼するかをアドバイスしてください。
- 実際のアプリケーションには回避策があります。最初のPCで、それぞれが1つのNICにのみJMXを持つ2つの別個のプロセスを開始し、3番目のプロセスがクライアントからのデータを3番目のJMXとマージします。3つのプロセスは、.batファイルから個別に開始されます。私は本当にこれを変更したいと思います。両方のNICに1つのJMXを持つ1つのプロセスがあります。または、可能であれば、少なくとも、NICごとに1つずつ、2つのJMXで1つのプロセスを開始します。それは...ですか?
どうもありがとうございます。
java - マルチホーム構成でソース IP を制御する方法
1 つのブレードで 14 の Java プロセスを実行しています。各プロセスは、ProxyServer (F5) によって認識される仮想 IP にバインドされているため、外部クライアントが F5 を呼び出すと、その呼び出しは 14 のプロセスのいずれかにリダイレクトされます。
何よりも、私のプロセス (14 のうちの 1 つ) は、別のブレードで実行されている別のアプリケーションへの呼び出しを実行します。
質問は次のとおりです。TCP クライアントで仮想 IP を使用して実行されている Java プロセスで、発信 TCP パケットのソース IP を制御するにはどうすればよいですか? つまり、発信 TCP パケットの送信元アドレスとして仮想 IP を設定する方法を探しています。(デフォルトでは、ブレードの物理 IP に設定されています)。
linux - マルチホーミングを使用してローカル仮想ネットワークを構成する
64Kを超える接続を持つアプリケーションをテストする必要があります。同じホストを使いたい。
今日は127.0.0.1でリッスンするサーバーを起動し、同じマシンから接続しますが、もちろん64K接続に制限されています。
1台のサーバーと多くのクライアントが特定の単一IP上の単一サーバーに接続しているような状況をシミュレートしたいと思います。
したがって、クライアントが複数のアドレス指定されたサーバーとリッスンするサーバーから接続できるように、マルチホーミングを使用して仮想ネットワークをセットアップする必要があります。
これはどのように構成できますか?Linuxでは?
c++ - マルチホーム ネットワークでの Qt5 バインド TCP ソケット
Qt5 の QTcpSocket クラスの新しいバインド機能を使用して困っています。これを理解するための助けをいただければ幸いです。
それぞれ別の IP アドレスを持つ 2 つの NIC を含むマルチホーム サーバーがあります。サーバー上でルーティングをセットアップして、送信元アドレスからの送信がターゲットのリモート アドレスに関係なく適切な NIC から送信されるようにしました。つまり、データの送信先に関係なく、xxx0 からの送信は eth0 を介して送信され、xxx1 は eth1 を介して送信されます。これらの NIC は、イーサネット経由で長距離の Wifi リンクに接続され、スイッチに接続されます。これらの Wi-Fi リンクはトランスペアレント ブリッジとして機能し、むしろ 2 本のイーサネット ケーブルと見なすことができます (ただし、帯域幅は制限されています)。次に、スイッチをコンピュータに接続します。目標は、サーバーとコンピューターの間でデータを転送し、2 つの Wi-Fi リンクを並行して使用して帯域幅を増やすことです。サーバーは物理的にはサーバーですが、ソフトウェアには、ソフトウェアサーバーとして実行されているコンピューターがあります(他の人がそれに接続するため)。つまり、物理サーバー (ソフトウェア クライアント) は TCP ソケットを開き、リッスンしているコンピューター (ソフトウェア サーバー) への接続を試みます。
Qt5 のバインド機能を使用して、1 つの TCP ソケットを eth0 IP アドレスにバインドし、別の TCP ソケットを eth1 IP アドレスにバインドします。これが PING や SCP 経由のファイル転送などの他のプログラムで動作することを確認しました。http://qt-project.org/doc/qt-5.0/qtnetwork/qabstractsocket.html#bindを参照してください
bind を呼び出すと、呼び出しは成功し、ローカル IP アドレスに対する後続の要求は正しい値を返します。たとえば、socket->bind(ip) は true を返し、socket->localAddress() は ip に等しくなります。ただし、connectToHost を呼び出すと、接続の試行を開始したときに localAddress が失われ、接続後に必要な localAddress とは異なる localAddress が設定されます。
何が起こっているのか誰にも光を当てることができますか? これらのプログラムは非常に大きいため、ソフトウェアクライアント/サーバーの役割を逆にするためにソフトウェアを書き直すことは避けようとしています。助けてくれてありがとう。
node.js - マルチホーム サーバー上の Meteor?
マルチホーム サーバーで Meteor を実行した経験のある人はいますか? アプリを本番環境に持ち込んでおり、それぞれ 2 つのネットワーク カードを備えたサーバーがいくつかあります。eth0 の 1 つのインターフェイスは Mongo クラスターを使用して内部ネットワークに接続し、もう 1 つのインターフェイス eth1 は DMZ に接続します。私たちは開発をはるかに過ぎており、バンドル後のワークフローに入っています。したがって、次のコマンドを eth1 でのみ実行するのは問題です。
MONGO_URL='mongodb://mongodb:27017/?replicaSet=meteor' PORT='80' ROOT_URL=' http://app.domain.org ' node main.js
単一のインターフェースを指定する方法を正確に知るには、ノードについて十分に知りません。これは環境変数で指定されていますか? /etc/network/interfaces ファイルで? iptables? 他の何か?
Web で次のようなリソースを見つけましたが、正しい方向に進んでいるかどうかわかりません。特定のインターフェイスで実行される node.js サーバーを取得するには、この種の手間が必要ですか? もっと簡単なものはありますか?
https://gist.github.com/logicalparadox/2142595
プライベートサーバーで node.js をサービスとして設定する方法は? [node アプリケーションにアクセスできない]
どんな助けでも大歓迎です!ありがとう!
アビゲイル
sockets - 複数のソケットとインターフェースを介したデータ転送の多重化
それぞれ 12 個のネットワーク インターフェイスを持つ 2 台のマシンがあります。各インターフェイスは、ポイント ツー ポイント無線リンクを介して他のマシンの対応するインターフェイスに接続されます (例: machine1:intf0 -> machine2:intf0、machine1:intf1 -> machine2:intf1 など)。各リンクは、マルチホーム サーバーに似た独自の MAC アドレスを持つイーサネット リンクと考えることができます。
私は、これらすべてのインターフェイスでデータをストライピングし、1 つまたは複数のインターフェイスでデータ損失とリンク停止を処理できるシステムを作ろうとしています。
この問題は何度も解決された気がします。車輪を再発明する前に、Linux システムでそのようなことを処理できるオープンソース ライブラリを誰かが知っているかどうかを調べようとしています。
ありがとう