4

WiFiネットワークからパケット損失カウンターを読み取る方法を探しています。

それはadbシェルまたはJavaまたはC(NDK)またはあなたの方法の上にあるべきです

Androidは根付いていません。

サービスでパケット損失を2%に設定したアクセスポイントがありますDummynet

PCからコマンドを使用wgetし、ローカルサーバーから50 Mbファイルをダウンロードします(LANの帯域幅は `100 Mbである必要があります)。パケット損失の構成後、帯域幅が100Mbから3Mbに減少したことがわかります。これは、すべてが正常に機能することを意味します。

ここまでは順調ですね、

私のデバイス(Android)はWiFiで上記のAPに接続されています。

同じ50Mbファイルをダウンロードしようとしています。ダウンロードレートは3Mですが、エラーや再送信カウンターの上昇は見られません。

私はadb shellCLIを使用して、次sys/class/net/eth0/statisticsの場所に入力しました。

-r--r--r-- root     root         4096 2012-12-04 15:42 rx_packets
-r--r--r-- root     root         4096 2012-12-04 15:42 tx_packets
-r--r--r-- root     root         4096 2012-12-04 15:41 rx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:41 tx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 multicast
-r--r--r-- root     root         4096 2012-12-04 15:43 collisions
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_length_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_over_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_crc_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_frame_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_missed_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_aborted_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_carrier_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_heartbeat_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_window_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_compressed
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_compressed

だから私はcat *4を除いて0の値で上記のすべてのファイルを実行して取得します:

tx/rx_packets/bytesアクティブです、それは私が書き込みインターフェースを使用することを意味します:

cat rx_packets
9106

パケット損失を検出したり、プログラムで取得したりする他の方法を知っている場合は、大いに感謝します

4

2 に答える 2

3

私があなたの要件について間違えない限り。モバイルデバイスと同じネットワークに接続している場合は、wiresharkを使用できます。

または、tcpdumpを実行し、wiresharkで分析して、パケット損失を取得することもできます。

ここにあなたを助けるかもしれないたくさんのリンクがあります。

http://dennismillerdev.wordpress.com/2011/02/03/debug-network-activity-in-android-using-wireshark/ http://mobile.tutsplus.com/tutorials/android/analyzing-android-network-トラフィック/ wiresharkでの携帯電話トラフィックのキャプチャ

一般的な接続テストを実行しようとしているだけの場合。応答として同じパケットをエコーバックするサーバーに一連のUDPパケットを送信してみてください。サーバーからこれらのパケットを受信しようとしている別のスレッドを同時に実行します。他の測定が必要な場合はタイムスタンプを記録しますが、送信されたパケットよりも返されるパケットが少ない場合は、失われたパケットの数がわかります。パケットにIDを含む1バイトのペイロードを与える場合。(つまり、IDが1〜20の20個のパケットを送信します)。サーバーからパケットを受信すると、ペイロードをチェックして、失われたパケットや順序が狂っているパケットを確認できます。

それ以外は、あなたはあなたの電話を応援せずに制限されています。TrafficStatsを使用して、送信されたパケットの数を取得できます。getTotalRxPackets()またはgetTotalTxPackets()を使用して、送受信されたパケットの総数を取得できます。または、より高いレベルのAPIを使用している場合は、アプリケーションごとのUDPパケットの数を取得することもできます。したがって、送信および受信されたが失われなかったパケットの数を見つけることができます。

デバイスが送信しているパケットの数がわかっていて、サーバー側でそのデバイスから着信するパケットの数を検出する場合、この違いは、失われたパケットの数も把握するのに役立ちます。(この方法では、サーバーを制御し、デバイスとサーバー間の通信を増やす必要があります)

うまくいけば、これがお役に立てば幸いです。

于 2012-12-13T00:05:35.317 に答える
2

必要なカウンターは/proc/ net/netstatファイルにあると思います。

于 2012-12-14T14:00:34.020 に答える