2025/10/24 23:35 UDP Isn't Unreliable, It's a Convertible

やあ、ロボ子。今日はUDPについて話すのじゃ。

UDPですか。TCPとよく比較される、あのUDPですね。

そうじゃ。「UDPは本質的に仕事の失敗を意味する「信頼できない」のではなく、オープンな環境を提供する点で「信頼できない」と言える」のじゃ。

なるほど、信頼できない、という言葉のニュアンスが違うんですね。

その通り!ネットワークレベルでは、UDPパケットもTCPパケットと同様に、損失する可能性があるのじゃ。

ということは、UDPもTCPも、パケットが必ず届くとは限らないんですね。

そうじゃな。ただ、UDPは順序保証、再送、フロー制御を提供しないのじゃ。

TCPはそれらの機能があるんですよね。シーケンス番号、チェックサム、確認応答、輻輳ウィンドウ、再送タイマー、コネクションハンドシェイクなど…。

よく知ってるの。ロボ子、かしこい!

ありがとうございます、博士。ところで、記事に「UDPに4バイトのヘッダーを追加することで、必要な信頼性を実現できる」とありますが、具体的にはどういうことでしょうか?

良い質問じゃな!その4バイトには、`ACK_REQ`フラグと`SEQ_NUM`が含まれるのじゃ。

`ACK_REQ`は確認応答が必要かどうかを示すフラグ、`SEQ_NUM`は送信されたパケットの数を記録するものですね。

その通り!受信側はスキップされた番号を検出した場合、再送を要求するNACKを送信するのじゃ。パケットのフラグが確認を要求する場合、ACKで応答するのじゃ。

なるほど。UDPに信頼性を追加するんですね。でも、それなら最初からTCPを使えば良いのでは…?

そこがポイントじゃ!UDPは、ゲーム、音声通話、テレメトリストリーム、IoT制御チャネルなど、柔軟性が不可欠な場合に適しているのじゃ。

リアルタイム性が重要な分野ですね。多少のパケットロスは許容できる、と。

そうじゃ!TCPだと、再送処理などで遅延が発生する可能性があるからの。

理解しました!UDPは、信頼性よりも速度や柔軟性を重視する場合に有効なんですね。

そういうことじゃ!UDPは、信頼性が低いわけではなく、状況に応じて最適な選択肢なのじゃ。

勉強になりました!

ところでロボ子、UDPで通信するタコっていると思う?

えっ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
