2017-08-03 42 views
0

現在、複数のarduinoボードと通信するサーバーソフトウェアを作成しています。ハードウェアのため、私はUDPプロトコルを使用しています。私は彼らが紛失したときのほとんどのケースでパッケージを再送する非常に単純なメカニズムを持っています。私は今、2つの質問があります:UDPパケット損失シミュレーションと確率

UDPパケットは、インターネットにアクセスできないネットワークと約20台のコンピュータと1台のコンピュータで失われますか?再送信方法が必要なのでしょうか?

再送メカニズムが動作しているかどうかを確認するために、このネットワークでUDPパケット損失をシミュレートする方法はありますか?

+0

を、私はパケットを失う確率は、ネットワークに依存するであろうと言うだろうルーターarduinos自体配線(またはWi - Fi)の種類、ノード間の距離など...あなたが何をやっているかによって再送する必要があるかどうか。パケットを失うものは大したことではなく、再送信する価値があるかもしれない他のもののために無視することができます。 – litelite

+0

arduinosはすべて公式のEthernet Shield(TCPなしのもの)を使用して配線されています。ケーブルの長さは約4mで、TP-Linkのマネージドスイッチです。 – Nidhoegger

答えて

2

インターネットアクセスがなく、約20個のarduinosと1台のコンピュータでUDPパケットが失われる可能性はありますか?

確率は100%であり、遅かれ早かれパケットが廃棄されます。

特定の期間内にパケットがドロップされる確率のような、より詳細な統計情報が必要な場合、実際に知る唯一の方法は、パケットを試してみることです(パケット内のシーケンス番号を使用して受信機は、スキップされたシーケンス番号に気付くことによってパケットがドロップされたことを検出することができる)。この確率は、パケットのサイズ、パケットの送信速度、レシーバのCPU速度、レシーバがCPU時間を費やしているその他のタスク、イーサネットスイッチの品質、品質に大きく依存しますあなたのイーサネットケーブルの位相、月の位相など

再送方法が必要なのでしょうか?

これは、パケットを落とすことがどのような結果になるかによって異なります。アプリケーション(ストリーミングオーディオやビデオ、オーディオメータリングデータなど)によっては、パケットをドロップすることは大きな問題ではありません。一部のデータが失われたという事実を無視し、いつものように次のパケットを続けます。他のアプリケーション(ファイル送信/受信など)の場合、パケットの損失は受信者が必要とするデータの損失を意味するため、その損失から回復するための方法が必要です。それを検出して再送をトリガーするか、または転送全体が失敗します(または、少なくとも受信者は部分ファイルのみで終了します)。

再送メカニズムが動作している場合、 をチェックするために、このネットワークでUDPパケット損失をシミュレートする方法はありますか?確かに

、彼らは時折パケットを受信して​​いないふりをするように、単に受信機の中にいくつかのロジックを置く:

int numBytesReceived = recv(...); 
if ((rand()%100) == 0) // Simulate a 1% packet loss rate 
{ 
    printf("Pretending to have dropped a packet!\n"); 
} 
else 
{ 
    // handle the incoming packet as usual 
} 
+0

詳細な回答ありがとうございました! – Nidhoegger

関連する問題