web-dev-qa-db-ja.com

UDPパケット損失を測定して最小化する方法

VOIPアプリケーションから電話をかけると、音声が途切れることがあります。すべてのVOIPアプリケーションはデータ転送にUDPを使用するため、パケット損失の量を測定し、ネットワークのパフォーマンスを測定するためのツールがLinuxにあります。

UDPパケット損失の一般的な理由は何ですか?また、パケット損失が多い場合に実行する必要がある対策は何ですか?

5
Supratik

特にLANでのUDP損失の主な原因の1つは、バッファオーバーフローです。これらは、スイッチ、または送信側サーバーまたは受信側サーバーで発生する可能性があります。 Linuxでパケット損失を確認するために使用できるメカニズムの1つは、次のコマンドを実行することです。

watch -n 1 -d 'cat /proc/net/udp'

これにより、次のような出力が表示されます。最後の列は、ドロップされたパケットの数です。

Every 1.0s: cat /proc/net/udp                                                                                                                                 Mon Sep 28 15:01:00 2015

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
11362: 00000000:3443 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 18224 2 ffff880808040000 0
19543: 00000000:D438 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 3809742 2 ffff8808060c8400 0
30819: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 12644 2 ffff88100f2b0400 0

次に、いくつかの異なるトリックを試して、これらに対処することができます(ここでも、例としてLinuxを使用しています)。

  • データを消費するアプリが十分なCPUを使用できることを確認します。
  • i/Oを実行するスレッドがネットワークデバイスにできるだけ近くなるようにします。
  • udpバッファーサイズがすべてデータを収容するのに十分な大きさであることを確認します(再び、watchコマンドの出力を監視して、tx_queueまたはrx_queue列が増加するかどうかを確認できます)。次に、次を使用してudpバッファーを増やします。 Sudo sysctl -w 'net/ipv4/udp_mem=xxx yyy zzzz'、またはsysctl -w 'net/core/rmem_default=????'、またはsysctl -w 'net/core/wmem_default=????'(注、xxx、yyyy、zzzが定義されている here

恥ずかしがらないセルフプロモーションで、私は Pontus Vision Thread Manager という製品を作成しました。これは、これを継続的に自動的に調整します。

4
Leo

UDPパケット損失の一般的な理由は何ですか

QOSの欠如(ランダムなパケットがドロップされ、VoIPが優先的に処理されない)および/または障害のある機器(回線品質など)を伴う輻輳(パケットが多すぎる)。スイッチ、何でも)悪いことのために。

インターネット接続の場合、両端にQOSルーターが必要です-これはありません(プロバイダーからVoIPが提供されている場合を除き、プロバイダーがインフラストラクチャを配備している可能性があります)。つまり、ダウンチャネルは通常アップチャネルよりもはるかに大きいため、ダウンチャネルのみを優先するローカルルーターは通常「十分」です。

ただし、回線の品質が悪いと、処理が困難になります。

1
TomTom

UDPパケット損失が発生している場合は、ほぼ確実にTCPパケット損失も発生しています。違いはTCPが失われたパケットを再送信し、 UDPはそうではなく、VoIPアプリケーションは再送信できません。再送信した場合、情報はもはや適切ではなくなるからです。

私はあなたのVoIP通話がインターネットを経由していると仮定します。 QoSが必要な場合がありますが、インターネット接続が適切に機能していない場合は、効果がありません。この パケット損失テスト を使用して確認してください。パケット損失が発生していた、つまりISPまたはローカルサイトであることがわかります。

ローカルサイトで問題が見つかった場合は、ケーブルまたはDSLモデムを調べて、信号ノイズ比、出力電力、および減衰(DSL)が適切かどうかを確認します。

0
James Waldrop