コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
UDP の用途 (DNS / 動画 / ゲーム)
落ちてもかまわない通信なんて、本当にあるのか
送ったデータが届かなくてもいい場面など、あるのでしょうか。振込が 1 件落ちたら事故です。ファイルの一部が欠けたら開けません。
それでも、諦めたほうが結果が良くなる通信は確かにあります。共通しているのは、落ちた分を取り戻す価値より、いま先へ進む価値のほうが大きい、という性質です。
言い換えると、UDP を選ぶ理由は「落ちても平気だから」ではありません。落ちた分をどう扱うかを自分で決める、という宣言です。
過去を取り戻している間に、現在が止まる
通話とビデオ会議が典型です。音声は 1 秒間に何十回も細かく刻んで送られます。ここで 1 つ落ちたとして、送り直しを待つとどうなるでしょうか。
待っている間、その後ろにすでに届いている音は再生できません。順番を守るとはそういうことです。結果として、一瞬のノイズで済んだはずの欠けが、数百ミリ秒の無音に化けます。会話としては後者のほうがはるかに苦しい。だから落ちた分は捨てて、次の音を鳴らします。
映像も同じ考え方です。しかも動画の圧縮方式は、多少の欠けを前後の絵から補えるように作られています。欠けても崩れきらないので、諦める判断と相性が良いのです。
1 コマ落ちても、次のコマがすぐ来る
対戦ゲームも UDP が中心です。キャラクターの位置は 1 秒間に 30 回から 60 回、送り続けられています。
ここで 1 つ落ちたとして、送り直す意味はほとんどありません。届くころには、その位置はすでに過去のものだからです。それより次の位置がすぐ来るので、落ちた分は捨てて上書きするほうが自然です。順番待ちで動きが引っかかるほうが、プレイヤーにとっては致命的です。
短い問い合わせが 1 往復で完結する用途も UDP が向きます。挨拶に往復 1 回半かけていては、本題より前置きのほうが長くなってしまうからです。失敗したらもう一度聞き直せば済みます。センサーのように、電池と処理能力が限られていて、1 件落ちても次の値が来る機器も同じ理由で UDP を選びます。
諦めない UDP という選択肢が出てきた
面白いのはここからです。UDP は何も保証しない代わりに、上で好きなものを自作できます。この余白を使って、TCP に相当する信頼性を自前で載せ直したのが QUIC です。
なぜ TCP を使わずに作り直したのでしょうか。TCP の順番の守り方が大雑把だからです。TCP は 1 本の接続の中では、無関係なデータどうしでも順番を守ってしまいます。ページの画像が 1 つ詰まると、関係のない別の画像まで待たされます。QUIC は流れを複数に分け、詰まった流れの外は先に進めます。
もう 1 つ QUIC が得たものが、回線が切り替わっても続く接続です。TCP は相手と自分の番号の組で接続を識別するので、外を歩いていて Wi-Fi から携帯回線に切り替わると、自分の番号が変わって接続が切れます。QUIC は番号とは別の目印で識別するため、切り替わっても同じ接続として続けられます。動画を見ながら家を出たときに止まらないのは、こうした作り直しの成果です。
いまのブラウザが使う HTTP/3 は、この QUIC の上で動いています。古いだけのプロトコルだと思われていた UDP が、最前線に戻ってきた形です。
復習ミニクイズ
HTTP/3 が UDP 上に構築されている主な理由はどれですか