見出し画像

TWSNMPに回線診断機能をつけた話

TWSNMPにPINGを使ってネットワーク回線の診断をする機能をつけました。この時の試行錯誤した書いておきます。助手の猫は膝の上でキーボードを打つのを邪魔してます。

オリジナルTWSNMPの回線速度測定機能

PINGで回線速度を測るアイデアはオリジナルのTWSNMPに搭載したものです。20年以上前に作ったものです。

画像1

PINGの画面に回線速度測定というモードがあります。このモードでPINGを実行するとPINGのパケットサイズ変えてPINGを実行して応答時間を測ります。この結果から回線速度と回線遅延を予測します。上の画像の場合だと回線速度が15.9Mbpsで遅延時間4mSecとなっています。(オリジナルのTWSNMPだ時計の精度が1000分の1秒でしたが、今は、3桁ぐらい良くなっているので、応答時間の測定精度も上がっています。)

どういう原理か?

PINGは、

画像2

のようにTWSNMPから対象ノードにPINGのリクエストを送信して戻ってきた応答を確認します。リクエストの送信から応答の受信までの時間を測定することで応答時間(RTT)を調べることができます。このRTTには、2つの要素があります。経路の遅延と回線速度に関係する部分です。遅延に関係する部分は通過するルーター(通信を中継する機器)の数や距離に依存しています。通過するルーターが多ければ当然遅くなります。静止衛星を経由する場合は36000Km*2の距離があるので光の速度でも時間がかかります。
この2つを測定した応答時間から得るためには、サイズの違うパケットでPINGを実行する方法を使います。遅延に関係するほうはサイズに関係なく一定です。回線速度に関係する時間はサイズが大きくなれば長くなります。

応答時間 = 回線速度✕サイズ + 遅延 

という関係です。サイズを変えて応答時間は測定することで回線速度と遅延を計算できそうです。この式は

y=ax+b

 と書くことができます。サイズを変えて2回測定すれば、二点を通る直線の傾きと切片を求める問題として解くことができます。これは中学校の数学で習う問題です。

測定が不安定

復刻版のTWSNMPでは簡単に実装しようとサイズの違うPINGを2回実行して、その結果から回線速度を計算する方法にしました。

画像3

安易な方法はあえなく失敗でした。回線速度がマイナスやあり得ない大きな値になってしまいました。大きなサイズのPINGより小さいサイズのPINGのほうが応答時間が長いなどの測定が不安定なことが原因でした。

方法の改善

次の日から回線速度の測定方法をいろいろ試行錯誤しました。このために、平均、分散、標準偏差、変動係数といった高校の数学の復習をしました。

検討の結果

・回線速度がマイナスなどあり得ない値ならば再試行する
・失敗した回数も記録する
・5回測定した結果から回線速度と遅延の平均値と変動係数を計算

という改善を行いました。あり得ない値を記録することはなくなりました。

シンプルなPINGの応答時間測定でも効果的

本来の目的だった回線速度を測定することはできたのですが、その値は思っていたものではありませんでした。ネットワークサービスでサッカー中継をみている間、自宅回線帯域が圧迫されて遅くなるのかと思いましたがほとんど変わりません。

画像4

赤い枠がサッカー中継の時間ですがあまり特徴がありません。傾向を見るとなんとなく夜中は回線速度が上がっているようにも見えます。5回の応答遅延データのばらつきを表す変動率を見ると、

画像5

夜間は変動しないような傾向が見えます。これはちょっとした発見です。もとからある単純なPINGの応答時間測定を見ると

画像6

同じ傾向はこのデータにも現れています。苦労して作ったのに、ちょっとがっかりでした。

AIの分析に期待

今回の回線診断のポーリングでは記録するデータが増えたのでAIが分析する特徴量も増えました。しばらく、このポーリングを実施してAIがどのように分析するか楽しみにしています。何かわかるのは、1ヶ月後ぐらいです。


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。