数年前から、月や火星、宇宙のニュースが増えてきましたね。
先日、久々に火星移住の記事を目にして、ふと
「火星にいる知人へ SNS でメッセージを送ったら、どれくらいかかるのか」
と考えてみました。
その結果、そもそも宇宙空間では、TCP/IP が実用レベルでは成り立たないという結論に至りました。
AWS やオンプレで日常的に扱っている TCP のハンドシェイク、再送、タイムアウト、輻輳制御、、
これらはすべて、「通信相手が比較的近くにいて、ほぼ常時つながっている」という前提の上に成り立っています。
今回は、宇宙における TCP/IP の実用性について調べてみました。
1. 光速でも時間がかかる
まず最初の課題が、物理的な距離です。
地球と火星の距離は、
- 最短:約 5,500 万 km
- 最遠:約 4 億 km
光速(約 30 万 km/s)で通信しても、
- 片道 約 3〜22 分(位置関係によって異なる)
- 往復(RTT) 約 6〜44 分(同上)
という世界です。
TCP の 3-way ハンドシェイクが終わらない
TCP の接続確立には、以下の 3 ステップが必要です。
- SYN(送信元 → 宛先)
- SYN/ACK(宛先 → 送信元)
- ACK(送信元 → 宛先)
地球上では数ミリ秒で終わるやり取りですが、地球と火星では事情が異なります。
- SYN を送信
- SYN/ACK が返ってくるまで 最大 44 分
- ACK を返して、ようやく通信開始
接続だけで数十分以上かかります。
多くの OS やミドルウェアでは、TCP のコネクション確立待ち時間は数十秒〜数分がデフォルトです。
そのため、SYN/ACK が返ってくる前に「相手が応答しない」と判断され、タイムアウトしてしまいます。
理論上は TCP は動きますが、デフォルトの設定のままでは、接続は難しくなります。
2. 「常時切れる」が前提になる
次の課題は、通信の安定性です。
宇宙空間は何も遮るものがないように思えますが、実際には、惑星が障害物になります。
探査機や衛星が惑星の裏側に回り込むと、地球との通信は完全に遮断されます。
例えば、
- 火星周回衛星
- 月周回衛星
などは、数時間単位で通信不能になるようです。
(衛星やロケットとの通信に関する話題では、必ず出てきますね)
地上なら、トンネルで数分切れることはありますが、
宇宙では「数時間つながらない」ことが普通に起こります。
TCP はエンドツーエンドでの「継続的な接続」を前提にしたプロトコルです。
数時間通信できなければ、コネクションは破棄され、再接続が必要になります。
そして再接続するためには、上記の「ハンドシェイク」が必要になります。
3. TCP の「親切な設計」
TCP には、「輻輳制御」という、親切な仕組みがあります。これは、
- ACK が遅い
- パケットが欠落している
といった状況を検知すると、
「ネットワークが混雑している」と判断し、送信速度を自動的に落とす仕組みです。
地球上のネットワークでは、これは非常に優秀な設計です。
しかし、宇宙では、以下が常時発生します。
- ACK が返っくるのに、非常に時間がかかる
- パケットロスしていなくても RTT(パケットの往復時間)が長い
そのため、「送りたいデータが全然送れない」
となってしまいます。
4. 宇宙では TCP/IP は実用的ではない
ここまでの話をまとめると、
- TCP/IP は、理論上は宇宙でも動く
- しかし、実用的ではない
ということになります。
まとめ
宇宙での通信は、以下のように、地上の通信とは事情が異なります。
- 光速でも往復数十分かかる
- 数時間単位で通信が途切れる
- 常時接続を前提とした通信は成立しない
このような環境では、上記を前提とした技術が必要になります。
そこで登場するのが、
DTN(Delay / Disruption Tolerant Networking) です。
次回は、この DTN がどのようにして「遅れても切れても大丈夫」な通信を実現しているのか、そして、深宇宙ネットワーク(Deep Space Network) についても記載します。