【エンジニア長期インターン報告】QUICを利用した報道写真の高速送信
自己紹介
所属:早稲田大学基幹理工学部
名前:加藤響
趣味:珈琲(自分で淹れるのもお店で飲むのも好き)
インターンの参加時期と頻度:2022年9月~11月の約3ヶ月間、週2回程度出勤しました。
応募のきっかけ
もともと情報が整理され発信されていく過程に関心があり、募集要項にネットワークについての記載があったため、ニュースの配信システムなどに関わることを期待して応募しました。
3ヶ月で取り組んだ内容
課題
共同通信のフォトグラファーは、撮影した写真を東京・汐留の本社にインターネット経由で送信しています。最近のモバイル通信環境は高速で安定していますが、それでも回線断やファイル欠損が起こることがたびたびあります。また、海外から東京に画像を直接送信する場合は、高遅延に由来するスループット低下の問題があり、速報の障害となっていました。
共同通信は、アフガニスタンやウクライナのような通信環境が劣悪な地域にも記者やフォトグラファーを派遣しています。また、2024年のパリ五輪・パラリンピック開会式はネットワーク設備の整ったスタジアムではなく、セーヌ川やコンコルド広場などパリの街中で行われます。多数の人が密集しモバイル通信が輻輳し使用できなくなることが予想され、これも課題となっています。
しかし従来のTCPベースのプロトコル(FTP、HTTPなど)にはHoLブロッキングやロスベースの輻輳制御アルゴリズムなどに由来する問題があるため、高速で、通信障害に強い送信プロトコルの導入が求められています。
QUICプロトコルとHTTP/3
QUICプロトコルは2021年に標準化された、UDPを利用するプロトコルです。HTTP/3を支える技術であり、TLS1.3を利用したセキュリティや、パケットロスや輻輳などに対応する仕組みを備えています。UDPベースであるため、3ウェイハンドシェイクによるコネクションの確立が必要なく、またTLS1.3の利用により鍵交換に必要であった往復も短縮されています。そのため従来よりも高速な通信が期待できると考えました。今回の実験はHTTP/3を利用して行いました。
結果
実装したシステムを環境をいじりながら検証した結果をまとめたものが以下の表となります。FTPと比べるとかなりいい線行ってると思います。
しかし、ジッタ(Ping値の揺らぎ)が増えた時が怪しいですね。TCPにはウィンドウサイズを調整しながらジッタを吸収する仕組みが、FTPがQUICよりジッタの影響を受けなかった理由だと思います。
追加実験
検証内容
QUICが速いのか、それともFTPが遅いのかについても検証するため、HTTP/3とHTTP/2(+TLS1.3)を土俵に上げて追加の実験を行いました。
ネットワーク環境の悪化による画像1枚の送信速度への影響を
遅延
パケットロス
ジッタ(Ping値の揺らぎ)
の3つの要素を変動させる実験により調査することにしました。
検証環境のエミュレートにはLinux traffic controllerを利用しました。
検証結果
検証結果をグラフに起こしたものが以下です。縦軸が画像1枚の送信にかかった時間、横軸がそれぞれの数値(上から遅延、パケットロス、ジッタ)となります。
グラフから見て取れる通り、パケットロス以外の影響に対しては微妙な結果となりました。パケットロスに関してはめちゃくちゃ強いですね。しかし、特に遅延に関してはTCPは送信速度をそこまで落とさなかったのに対して、送信時間を線形に増加させてしまっています。
考察
現在のrfc標準に従うQUICだとまだ性能が不十分に感じます。特にACKの頻度に関してはまだドラフトであるため、今回の実験に含めることができていませんが、固定値で設定しながら実験してみるなど、追加で実験してみたらおもしろいと思います。
3ヶ月の振り返り
感想
めちゃくちゃ楽しい3ヶ月のインターンに参加できたと感じています。私の関心をヒアリングしていただきながらメンターの方と一緒に課題設定をして、考えたことを相談しながら好きに実装しながら実験を進めることができました。
得られたこと
ネットワーク未経験の学生でしたが、パケットを見ながらシステムを構築するなど得がたくいい経験をさせていただきました。また、途中で詰まったときには教えていただき解決しながら実装を進めることができました。特に私の知識が足りずに詰まっているときにはインプットをするための時間をとっていただけたのがとてもありがたかったです。
今後の課題
考察でも述べたとおり、このままのQUICを社内のシステムに適用するよりも先に、性能改善のために実験するべきことはたくさんあると感じています。また、共同通信が抱える課題を解決する手段としては汎用的な状況で高性能を出すプロトコルよりも、極端に悪い状況を前提としてそれなりの性能を出すプロトコルの方が相応しいようにも感じます。
この記事が気に入ったらサポートをしてみませんか?