2009-03-26 2 views
2

問題:ネットワーキングアプリケーションを設計する

ネットワーク障害を処理し、障害が発生した場合に別のネットワークに切り替えるネットワーキングアプリケーションを設計する必要があります。

私は3つのイーサネット接続と1つのワイヤレスを使用しているとします。特定の瞬間に、ただ1つの接続が使用されています。

故障した場合に別のネットワークに切り替えることができるようにシステムを設計する方法を教えてください。

私はこれが非常に広範な質問であることを知っていますが、あらゆる指針が役立ちます!

答えて

1

ドメインモデルを作成し、ネットワーク要素、検出および処理できる障害の種類、およびその動作を実証します。次に、ネットワークコードを接続します。

1

は、接続のための1つのクラスポーリングを持っています。ポーリングタイムアウトが発生すると、イーサネット設定が切り替わります。ワイヤレスの場合は、Wi-Fi設定を自動接続に設定してから、ワイファードを有効/無効にします。

2

私は通常、ネットワーク上でそこのルーティングだことを確認すると、ホスト上の1つ(またはそれ以上)のルーティングプロトコルのインスタンスを実行したい(しかし、私はあなたがイーサネット接続を切り替える方法を知りません)。このようにして、ホストOSはパケットを適切に送信するため、ネットワーク障害は(ほとんど)アプリケーションにとって透過的です。

オープンソース側では、少なくともLinuxマシンでは、zebraとquaggaの経験があります。

1

まず、ネットワーク切断イベントを与えるAPIを探します。 私はまた、ネットワーク接続の状態を確認する方法を見つけるでしょう。

これらは使用するOSや使用言語によって異なりますので、アプリケーションでこれを抽象化したい場合があります。

例:

RegisterDisconnectionEvent(DisconnectionHandler); 

function DisconnectionHandler() 
{ 
    FindActiveNetworkConnection(); 
    // do something else... 
} 
1

それを行うには原始的な方法は、ネットワーク切断イベントの外を見ることであろう。あなたのシーケンスは次のようになります。 ネットワーク接続の状態の変化を登録/ポーリングします。すべてのアクティブなネットワーク接続のリストを維持します。 最初に使用可能なネットワーク接続を使用します(代わりに、インターフェイスの帯域幅に基づいてソートし、最も帯域幅の広いものを使用できます)。 ダウン接続を検出すると、次のアクティブな接続を使用します。

ただし、使用するネットワーク接続に基づいて、アプリケーションの機能に影響がある場合は、ルーティングプロトコルを使用してジョブを実行するか、アプリケーション内にトラッキングアプリケーション。この追跡アプリケーションは、使用可能なすべてのインターフェイスでネットワークパスを(ping、tracerouteなどのさまざまな方法で)追跡して、最終的な宛先に到達できるかどうかを確認し、適切なネットワークインターフェイスを使用します。

また、ステータスの変更だけでなく、入出力エラーについてネットワークインターフェイスを監視し、それに応じて選択を変更できます。これは、任意の時点で最も効率的なネットワークを使用するのに役立ちます。しかし、これは、ネットワーク接続を切り替えることによって引き起こされるチャーンとバランスを取る必要があります。

0

関連するすべてのホストを制御すると、Multipath TCPはすべての接続を調べ、自動的にその接続を選択します。複数の接続が機能している場合は、複数の接続が負荷分散されます。

エンドポイントを制御しない場合は、アプリケーションでプロービングする以外に選択肢はありません。 Moshは非常に優雅にそれを行うアプリケーションの例です。

あなたのアプリケーションが何をしているかは言及していません。 BitTorrentのやり方と同じように、使用可能なすべての接続を同時に使用するように、プロトコルを再設計することが可能であり、したがって、特定の時点でいくつかのリンクがダウンしているのを気にしませんか?

関連する問題