たぶん動く...

多分GIS系の人。あくまで個人的見解であり、所属団体を代表するものではありません。

Pingの応答から通信距離を推定してみる

Go言語のICMPパッケージでPingを打ってみました。Pingを打つだけではつまらないので、通信距離の推定のようなことができるか実験してみました。

通信速度について

インターネットの世界においては、「通信速度」という言葉はたいていの場合、bpsという単位を使い、1秒間にデータをどれだけ送れるかを表します。が、私が疑問に思ったのは「秒速何キロで情報が送られているのか?」 という点です。SSHでコマンドを叩いたり、簡易的なwebサーバを立てて表示してみる分にはデータ量が小さいのでどれだけ速い回線を使用しても体感する速度はほとんど変わらないです。 (激遅回線を使用しているときやネットワークの調子が悪い時を別として。) この私が疑問に思っている速度についてググってみると、群速度とか位相速度というらしい。(大学物理で習った気がする...) また、この値はケーブルの規格の満たすべき性能の指標の一つ「最大伝搬遅延」として基準が決められていることが分かった。

ケーブルカテゴリ 真空中の光の速さに対する割合(%)
Cat-7 74-79
Cat-6A 65
Cat-5e 65
Cat-3 58.5

おおよそCat-6A, 5eのケーブルで1.95x108 m/sくらい、Cat-7で2.2x108 m/s くらいで信号が伝わるらしい。 もっと光速に近いと思っていました。

光ファイバーの通信速度

光ファイバーの通信速度は、LANケーブルより通信速度がずっと速いことが知られています。これは、使える帯域幅が広いことに由来します。特に海底ケーブルに使われる光ファイバーの速さ(群速度)について調べてみました。
調べてみましたと書きましたが、NTT技術資料館にメールで問い合わせしました。丁寧な返答をいただきました。(本当にありがとうございました。)
一般的に使用される光ファイバー中の信号伝達速度は 約2.1x108 m/s これも光速にもっと近いと思っていました。

通信速度(というか遅延速度)まとめ

自分の調べたかった速度というのが、群速度、遅延速度というらしいことがわかりました。また、これらの値がケーブルの規格として定められていることがわかりました。

新たな疑問

信号が伝搬する速度が分かったので遅延時間が分かれば、通信距離がわかるのでは? 調べてみると、遅延の定義は、アプリケーションの応答遅延、通信経路上のネットワーク機器の輻輳による遅延、通信経路伝搬の遅延の和らしいです。

調べてみる

通信経路がほぼ同一とみなせて、地図上の直線とほぼ一致してそうなインターネットの回線経路を考えました。そんな回線があるのかと探すとありました。 オーストラリア・シドニーからアメリカ・カリフォルニアまでの海底ケーブルです。この2つの都市はAWSのリージョンが存在し、海底ケーブルが敷設されています。 両都市間の直線距離は約12000 kmになります。

https://www.submarinecablemap.com より抜粋

AWSの説明より抜粋

てことでこの2つのリージョンにEC2インスタンスを立ち上げ、お互いにPingをうち、帰ってくる時間から距離を推定してみます。

実行環境

go version go1.18 linux/arm64

Go言語でPing

Go言語にはネットワーク関係のモジュールが用意されており、ネットワーク関係の実装ができます。 また、Pythonよりも時刻が正確で、nano秒単位の時刻が取得できます。

すっごく軽くPingを打つプログラムを書いてみました。100ミリ秒ごとにPing送信します。 ソースコードは以下です。 結果をcsvに出力します。

GitHub - TTY6335/go_icmp_message

実験

シドニーでのPingTTL AWSのリージョン間は回線で結ばれているだけあって、安定したTTLが得られています。

対向のEC2インスタンスからの応答はほぼ一定であり、非常に安定したレスを返しています。 カリフォルニアでのレスポンス

カリフォルニア -> シドニー

上と同じ実験をしました。

結果

海底ケーブルの群速度 21000km/sとした場合、片道14000 km という値が出ました。片道12000kmなので、オーダー的には近い値が出ました。

考察

Ping応答時間と、システム応答時間を除いた時間から、通信距離を導出したところ、オーダーは会いましたが、2000kmほどの誤差が生まれました。 回線の経路が直線距離とは必ずしも一致しないこと、ネットワーク機器の応答時間が未知数なのでこの辺が誤差に影響していそうですね。

参考文献

ネットワークの世界における遅延とは - Apposite Technologies

15.3. time — Time access and conversions — Python 2.7.18 documentation

Velocity factor - Wikipedia

https://home.jeita.or.jp/is/seminar/110210_igcs/pdf/2.pdf

グローバルインフラストラクチャネットワーク

Submarine Cable Map