5

信頼できる完全に順序付けされたマルチキャスト システムを Python でゼロから作成する必要があります。外部ライブラリを使用できません。セントラルシーケンサーの使用を許可されています。

2つの直接的なアプローチがあるようです:

  1. 効率的なシステムを作成し、マルチキャストされた各メッセージに一意の ID を添付し、受信したメッセージ ID のシーケンサー マルチキャスト シーケンス番号を持ち、ACK と NACK をやり取りします。
  2. 各マルチキャスターが一度受信した各メッセージを単純に再送信する非効率的なフラッディング システムを作成します (その特定のマルチキャスターによって送信された場合を除く)。

私は 2 番目のオプションを使用することを許可されており、そうする傾向があります。

現在、UDP メッセージをマルチキャストしています (これが唯一のオプションのようです) が、これは、一部のメッセージが失われる可能性があることを意味します。つまり、#2 に従って再送信できるように、送信された各 UDP メッセージを一意に識別できなければなりません。本当に一意の番号を生成し (たとえば、送信者アドレスとカウンターを使用して)、それらを送信されるすべての UDP メッセージにパックする必要がありますか? どうすればそれを行うことができますか?データのストリームではなく、単一の UDP メッセージを Python で受信するにはどうすればよいですか (つまりsocket.recv)?

4

3 に答える 3

4

洪水のアプローチは、悪い状況を悪化させる可能性があります。ネットワーク負荷が高いためにメッセージがドロップされた場合、すべてのノードにすべてのメッセージを再送信させると、状況が悪化するだけです。

最善のアプローチは、送信するデータの性質によって異なります。例えば:

  1. マルチメディアデータ:再試行なし、ドロップされたパケットはドロップされたフレームであり、次のフレームがいつそこに到達するかは問題ではありません。
  2. 固定期間データ:受信者ノードは、更新を受信するたびにリセットされるタイマーを保持します。時間が経過すると、マスターノードに欠落している更新を要求します。再試行は、要求元ノードにユニキャストできます。

これらの状況のいずれにも当てはまらない場合(すべてのパケットをすべてのノードで受信する必要があり、パケットのタイミングが予測できないため、受信者が自分で欠落したパケットを検出できない場合)、オプションは次のとおりです。

  1. 各パケットのすべてのノードからの明示的なACK。送信者は、ACKされていないパケットを再試行(ユニキャスト)します。
  2. TCPベースのグリッドアプローチでは、各ノードが受信したパケットを隣接ノードに手動で繰り返し、TCPメカニズムに依存して配信を保証します。

後のシーケンス番号のパケットを受信すると、受信者がパケットの欠落に気付くことに依存する可能性がありますが、これには、少なくとも1つの追加パケットが送信されるまで、送信者がパケットを保持する必要があります。正のACKを要求することは、より信頼性が高く(そして証明可能です)。

于 2008-10-06T21:32:46.827 に答える
1

どのアプローチを取るかは、送信するデータの性質、ネットワークの規模、および送信するデータの量に大きく依存します。特に、各ノードが接続されているターゲットの数に依存します。

これが各ノードの多数のターゲットと大量のデータにスケーリングされることを期待している場合、すべてのパケットに ACK/NAK を追加するオーバーヘッドがスループットを不利に制限するのに十分であることに気付くかもしれません。ミックスに再送信を追加します。

Frank Szczerba が言ったように、マルチメディア データには失われたパケットから回復できるという利点があります。送信するデータを制御できる場合は、パケットがドロップされる可能性を最小限に抑えるようにペイロードを設計する必要があります。

送信しているデータがパケットのドロップを許容できず、ネットワークの使用率を高くしようとしている場合、おそらく udp は使用するのに最適なプロトコルではありません一連の tcp プロキシ (各ノードが接続されている他のすべてのノードにユニキャストで再送信する - フラッディングのアイデアと同様) を実装すると、より信頼性の高いメカニズムになります。

以上のことから、このアプリケーションに真のマルチキャストを使用することを検討しましたか?


「宿題」タグを見たばかりですが、これらの提案は宿題の問題には適していない可能性があります。

于 2008-10-06T22:42:25.563 に答える