JP / EN
Networks / Communication

恋人時代はTCP、夫婦になったらUDP

恋人時代は、送った言葉に返事が来る。届かなければ、もう一度送る。 夫婦になると、必要な情報は送るが、受信確認は省略されることがある。 この変化は、どこかTCPとUDPに似ています。

この記事の会話は、TCPとUDPの特徴を説明するために作った架空の例です。 実際のチャットアプリの通信方式や、すべての恋人・夫婦の会話を表すものではありません。

1. 恋人時代 ― TCP

Dating / Connected

彼

おはよう。

彼女

おはよう。今日も早いね。

彼

昨日はよく眠れた?

彼女

うん。そっちは?

彼

僕も眠れたよ。

送れば返事が来る。返事が来なければ、届かなかったのではないかと心配してもう一度送る。 恋人同士の会話は、相手との接続を確かめながら進むTCPのようです。

2. 会話を始める前にも会話する

TCPでは、いきなり本題を送りません。最初に通信できる状態かを3段階で確認します。

Three-way handshake

彼

今、話せる? SYN

彼女

話せるよ。そっちは? SYN + ACK

彼

こちらも大丈夫。 ACK

これが3ウェイハンドシェイクです。 TCPは接続を確立してから、データのやり取りを始めます。 本題の前に三つのパケットが必要ですが、双方が送受信できることを確かめられます。

3. 返事がなければ再送する

Acknowledgement timeout

彼

日曜日、会える? SEQ 101

……受信確認が返ってこない

彼

日曜日、会える? SEQ 101 / 再送

彼女

会えるよ。 ACK

TCPは送ったデータのバイト位置をシーケンス番号で管理し、受信側から確認応答のACKが返るのを待ちます。 一定時間たってもACKがなければ再送します。同じ範囲のデータが届いた場合、受信側は重複を見分けます。

例えの限界:TCPのACKが示すのは、相手側のTCP処理までデータが届いたことです。 相手本人が画面を読み、内容を理解したという「既読」ではありません。

4. 話の順番も元に戻す

ネットワークでは、後から送ったデータが先に届くことがあります。

1. 帰りに牛乳をお願いします 2. 低脂肪でお願いします 3. なければ普通の牛乳で大丈夫です

もし1番、3番、2番の順で届いても、TCPは番号を見て元の順番へ並べ直します。 アプリケーションには、順序のそろった連続したデータとして渡されます。

ただし、TCPは「メッセージ単位」ではなく連続したバイト列を扱います。 どこまでが一つの発言かは、アプリケーション側で決める必要があります。

5. 夫婦になった後 ― UDP

Marriage / Connectionless

夫

今日は少し遅くなります。

応答なし

妻

帰りに牛乳をお願いします。

応答なし

双方とも必要な情報は送っています。しかし受信確認はありません。 UDPは事前に接続を確立せず、データグラムをそのまま送ります。 届いたかどうかをUDP自身は確認せず、返事を待たずに次の処理へ進みます。

Out of order

夫

牛乳は普通のでいい?

妻

あと洗剤もお願いします。

夫

低脂肪?

妻

詰め替え用です。

メッセージは届いているのに、会話が少しかみ合いません。 UDPには、到着順を並べ直す機能もありません。

6. パケットロスと大きな遅延

Packet loss

妻

帰りに牛乳をお願いします。

このパケットは途中で失われました

夫

ただいま。

妻

牛乳は?

夫

聞いてないよ。

妻

再送機能くらい付けてください。

UDPは、途中で失われたデータを自動では再送しません。 必要なら、アプリケーション側で受信確認や再送を実装します。

Very high latency

妻

今度、棚を直してほしい。

……数日後

夫

今度やります。

パケットは失われていませんでした。非常に大きな遅延が発生していただけです。

7. UDPは雑なのではなく、待たない

UDPはTCPの劣化版ではありません。確認や再送を標準で行わない分、処理が単純で、 遅れて届く古いデータよりも最新データを優先したい用途に向いています。

  • リアルタイム音声・映像:一瞬前の音を再送して会話全体を止めるより、先へ進みたい。
  • オンラインゲーム:古い位置情報を待つより、最新の位置を受け取りたい。
  • DNS:短い問い合わせを少ない手順で処理したい。

UDPの上に、用途に必要な確認や再送だけを追加することもできます。 例えばHTTP/3で使われるQUICはUDPを土台にしながら、独自に信頼性や輻輳制御を実現しています。

8. TCPとUDPを並べてみる

項目TCPUDP
通信開始接続を確立する接続確立なしで送る
到着確認ACKで確認するUDP自身は確認しない
再送失われたデータを再送するUDP自身は再送しない
順序元の順序へ並べる到着順を保証しない
データ連続したバイト列データグラム単位
代表例HTTP/1.1・HTTP/2、メール、ファイル転送DNS、音声・映像、ゲーム、QUIC

9. 結婚生活に必要なプロトコル

妻

今日の夕飯はカレーです。 UDPでも可

妻

明日は結婚記念日です。 TCP推奨

恋人時代は、すべてのメッセージにACKが返ってきた。
夫婦になると、重要なパケットだけ選んで返事をするようになった。

通信は効率化された。
それを最適化と呼んでよいかは、まだ分からない。