インターネットアクセスがなく、約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
}
を、私はパケットを失う確率は、ネットワークに依存するであろうと言うだろうルーターarduinos自体配線(またはWi - Fi)の種類、ノード間の距離など...あなたが何をやっているかによって再送する必要があるかどうか。パケットを失うものは大したことではなく、再送信する価値があるかもしれない他のもののために無視することができます。 – litelite
arduinosはすべて公式のEthernet Shield(TCPなしのもの)を使用して配線されています。ケーブルの長さは約4mで、TP-Linkのマネージドスイッチです。 – Nidhoegger