テストピア
テストピアは、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 つ目の無線ホップが結果に入りません。
実行手順
- 01
コンピューターのアドレスを調べる
iPhone と同じネットワーク上にあるインターフェイスの IP アドレスを使います。
macOS · Wi-Fi は通常 en0ipconfig getifaddr en0Windows · 「IPv4 アドレス」を確認ipconfigLinuxhostname -I - 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. - 03
受信接続を許可する
Python による受信接続の受け入れを許可するかどうかファイアウォールで確認されたら、プライベートネットワークで許可してください。ファイアウォールをオフにする必要はありません。
- 04
Linkalyst にアドレスを入力する
「スループットテスト」では、ピアが出力したアドレスとポートを「テストピア」に入力します。UDP モードの「遅延テスト」では、そのアドレスとポートで UDP ターゲットを追加し、UDP ピアが出力した 16 文字のアクセスコードを入力します。
- 05
コンピューターをスリープさせず、終わったらピアを停止する
テストの間は、コンピューターがスリープしないようにしておく必要があります。Mac では、
caffeinate -i python3 …でピアを起動するとアイドルスリープを防げます。終わったら Ctrl+C を押してピアを停止します。
オプション
throughput_peer.py
| --host ADDRESS | 待ち受ける数値アドレスです。デフォルトは 127.0.0.1 で、コンピューター自身からしか接続できません。 |
| --port PORT | TCP ポートです。デフォルトは 5202 です。 |
| --once | 1 回の接続の後に終了します。 |
echo_peer.py
| --bind ADDRESS | 待ち受けるプライベート、ループバック、またはリンクローカルの数値アドレスです。デフォルトは 127.0.0.1 です。 |
| --port PORT | UDP ポートです。デフォルトは 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 を閉じた後はもう一度入力してください。