スループットテスト · UDP による遅延テスト

テストピア

テストピアは、iPhone や iPad と同じネットワーク上のコンピューターで、自分で実行する小さなプログラムです。Linkalyst 独自のテストプロトコルに応答するので、両端の間のリンクを測定できます。

インターネットの速度測定サービスではなく、iperf などの既存のツールでもありません。Web サイトや通常の TCP サービスでは、このプロトコルに応答できません。

テストピアが必要なツール

スループットテスト
throughput_peer.py · TCP 5202
UDP モードの遅延テスト
echo_peer.py · UDP 9999

これらはデフォルトのポートで、どちらもピアの起動時に変更できます。そのほかのツールと、ping モードの「遅延テスト」は、テストピアなしで動作します。

ダウンロード

各ピアは、標準ライブラリだけを使う単一の Python ファイルです。コンピューターに必要なのは Python 3.9 以降だけで、ほかには何も要りません。Python がない Mac では、最初に python3 コマンドを実行したときに、Python を含む Apple のコマンドライン・デベロッパ・ツールをインストールするよう提示されます。

throughput_peer.py 4.8 KB

「スループットテスト」用です。1 本の TCP 接続で合成データを送信または受信します。

SHA-256
6f3cf1a7bb8b076d8df0ddf77eb642cb8bdfc4a626e470b0231a8e2bd1d9643c
ダウンロード

echo_peer.py 7.8 KB

UDP モードの「遅延テスト」用です。このピアのアクセスコードを含むパケットをエコーします。

SHA-256
d92e20436907a11897c9b14086360d9a4d92586c8c05250d5398e19a6bebfab4
ダウンロード

ダウンロードしたファイルを確認するには、上記の SHA-256 と、macOS または Linux では shasum -a 256 echo_peer.py、Windows では certutil -hashfile echo_peer.py SHA256 の出力を比較します。

どちらのプログラムも、利用規約のセクション 5 に基づき、現状のまま提供されます。

実行する前に

  • ピアはプライベートネットワークでのみ実行してください。どちらも平文で送信し、暗号化されていません。スループットピアにはアクセスコードもまったくありません。インターネットからピアのポートへ転送しないでください。
  • ピアは、アドレスを指定するまではコンピューター自身(127.0.0.1)でのみ待ち受けるため、指定するまで iPhone からは接続できません。UDP ピアはパブリックアドレスとワイルドカードアドレスを拒否し、プライベートアドレスからのパケットにのみ応答します。
  • スループットピアは合成データを送受信します。ファイルを読み取ったり、受信したものを保存したり、何かを転送したりすることはありません。
  • 測定したいインターフェイスのアドレスでピアを起動してください。有線接続のコンピューターを使えば、2 つ目の無線ホップが結果に入りません。

実行手順

  1. 01

    コンピューターのアドレスを調べる

    iPhone と同じネットワーク上にあるインターフェイスの IP アドレスを使います。

    macOS · Wi-Fi は通常 en0
    ipconfig getifaddr en0
    Windows · 「IPv4 アドレス」を確認
    ipconfig
    Linux
    hostname -I
  2. 02

    そのアドレスでピアを起動する

    ファイルを保存したフォルダでターミナルを開きます。例では 192.168.1.20 を使っているので、自分のコンピューターのアドレスに置き換えてください。Windows では、python3 の代わりに py と入力します。

    スループットテスト
    python3 throughput_peer.py --host 192.168.1.20
    出力
    Listening on 192.168.1.20:5202 (single connection; 64 MiB / 60 s maximum)
    UDP による遅延テスト
    python3 echo_peer.py --bind 192.168.1.20
    出力
    Linkalyst UDP echo peer: 192.168.1.20:9999
    Access code: 3f9c2a61d04b7e85
    Private networks only. Do not forward this port from the Internet; the access code is not encryption. Press Ctrl+C to stop.
  3. 03

    受信接続を許可する

    Python による受信接続の受け入れを許可するかどうかファイアウォールで確認されたら、プライベートネットワークで許可してください。ファイアウォールをオフにする必要はありません。

  4. 04

    Linkalyst にアドレスを入力する

    「スループットテスト」では、ピアが出力したアドレスとポートを「テストピア」に入力します。UDP モードの「遅延テスト」では、そのアドレスとポートで UDP ターゲットを追加し、UDP ピアが出力した 16 文字のアクセスコードを入力します。

  5. 05

    コンピューターをスリープさせず、終わったらピアを停止する

    テストの間は、コンピューターがスリープしないようにしておく必要があります。Mac では、caffeinate -i python3 … でピアを起動するとアイドルスリープを防げます。終わったら Ctrl+C を押してピアを停止します。

オプション

throughput_peer.py

--host ADDRESS待ち受ける数値アドレスです。デフォルトは 127.0.0.1 で、コンピューター自身からしか接続できません。
--port PORTTCP ポートです。デフォルトは 5202 です。
--once1 回の接続の後に終了します。

echo_peer.py

--bind ADDRESS待ち受けるプライベート、ループバック、またはリンクローカルの数値アドレスです。デフォルトは 127.0.0.1 です。
--port PORTUDP ポートです。デフォルトは 9999 です。
--token CODEランダムなアクセスコードの代わりに、指定した 16 文字のアクセスコードを使います。

すべてのオプションを確認するには、どちらかのファイルを --help 付きで実行します。UDP ピアの障害注入オプション(--drop-every など)は Linkalyst 自体をテストするためのもので、結果が実態を表さなくなります。

App からピアに接続できない場合

すべてのリクエストがタイムアウトする、または接続に失敗する

iPhone とコンピューターが同じネットワークにあり、デバイス同士を分離するゲストネットワークではないこと、App に入力したアドレスがピアの出力したものであること、ファイアウォールが Python を許可していることを確認してください。

UDP ピアが --bind must be a numeric private/loopback/link-local address と表示して終了する

そのコンピューターのプライベートな IPv4 または IPv6 アドレスを、数値で指定してください。ホスト名、0.0.0.0、パブリックアドレスは拒否されます。

Address already in use

別のピアまたはプログラムがそのポートを使用しています。それを停止するか、--port を付けてピアを起動し、App に同じポートを入力してください。

UDP ピアは動作しているのに、何も返ってこない

アクセスコードを確認してください。ピアは、自身が出力したコードを含まないパケットを無視します。また、App は実行中にしかコードを保持しないため、App を閉じた後はもう一度入力してください。