わざと接続を壊す
遅いのは悪さの一種です。消えるのはもう一種で、誰も書いていないコードパスを見つけ出すのはこちらです。再接続、再試行、何が起きたかをユーザーに伝えるメッセージなどです。
ケーブルを抜かずにアプリをオフラインでテストする方法でもあります。LANモードはローカルネットワークを動かしたままインターネットを奪い、1つのアドレスをブロックすれば、残りの接続が無事なまま、特定のサービスだけを到達不能にできます。
消える5つの方法
| 設定 | アプリに何が見えるか |
|---|---|
| 接続のリセット | ファイアウォールやロードバランサーに切られたときのように、転送の途中で接続が死にます。頻度をパーセントで指定します。 |
| 回線のオン・オフ | ネットワークがしばらく消えては戻ることを、何度も繰り返します。周期の長さと、そのうちどれだけが断になるかを指定します。 |
| ポートのブロック | そのポート宛のものはすべて消えます。ほかには何も影響しません。 |
| アドレスのブロック | インターネットのほかの部分が動いたまま、1台のサーバーに到達できなくなります。 |
| LANモード | ローカルネットワークは動き続け、インターネットは使えません。キャプティブポータルや、切れたアップリンクそのままの状態です。 |
コマンドラインから
1つのアプリで、およそ10本に1本の接続を切る例:
BeanNetworkTester.exe --rst-prob 10 --target myapp.exe --duration 60
10秒周期で、そのうち4秒を断にします。出たり消えたりし続ける回線です:
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
1台のサーバーだけが到達不能で、ほかはすべて正常:
BeanNetworkTester.exe --block-ip 203.0.113.10
ブロックは指定したものにだけ当たる
パケットロスや遅延と違い、ポートやアドレスのブロックは、一致する通信だけに影響します。そのため、プロセスを指定せずに実行できるものの中で最も安全で、「この依存先1つだけを消す」が1行のコマンドで済むのもこのためです。
ダウンロードが死ぬ罠
最大パケットサイズの設定もあります。少し下げると、大きな転送が遅くなります。576のような値まで下げると、ダウンロードはエラーも出ずに完全に止まったままになります。それは単に小さくなったパケットサイズではなく、大きすぎるものをネットワークが捨てて何も知らせない、古典的なブラックホールだからです。
これは意図的に再現する価値のある、現実の障害モードですが、偶然出会うと本当に混乱します。この設定を変えた直後にダウンロードが黙って止まったなら、原因はこれです。
元に戻す
STOPを押すとすべてが元に戻ります。プログラムを閉じても、時間制限を設定していた場合にその時間が来ても同じです。万一ツール自体がセッション中に落ちても、内部のウォッチドッグがキャプチャを止め、ネットワークを壊れた状態のままにはしません。