Datagramは絶対に使わないでください。
TCP vs UDP
- インターネットアプリケーションを開発する際には、TCPとUDPのどちらかを選ぶ必要がある。
- TCP: 信頼性のあるデータ転送を保証する。
- UDP: 信頼性のないデータ転送を提供する。
- 信頼性のない転送が本当に必要になる場面はほとんどない。
特性
- ソフトウェアエンジニアリングは、複数層の抽象化の上に成り立っている。
- 各層は特定の特性を提供し、開発者がすべてを一から作り直さなくて済むようにしている。
- 開発者はどの層を使うかを選ばなければならない。
「信頼性がない」
- リアルタイム動画プロトコルを設計する会合で、SUBSCRIBE は信頼性がなくあるべきだという意見があった。
- 実際に必要なのは 適時性 である。
- リアルタイム動画では、最新のデータを優先して届けることが重要だ。
Datagram
- Datagram(IPパケット)は、送信元アドレスから宛先アドレスへ送られるデータの単位である。
- Datagramは損失したり、順序が入れ替わったりする可能性がある。
- Datagramを使う理由は、ネットワーク混雑時にはパケットをドロップするほうがより良い選択だからである。
インターネットのキュー
- ネットワークが混雑したとき、パケットをドロップするのは一般的である。
- パケットをキューに入れて後で配送することは、バッファブロート の問題を引き起こしかねない。
- バッファブロートでは、すべてのパケットがキューに積み上がり、適時性が損なわれる。
あなた、アプリケーション開発者
- UDPを直接使うと、さまざまな問題に直面する可能性がある。
- UDPの上に独自の転送プロトコルを構築するなら、再送、輻輳制御などを実装しなければならない。
- QUICライブラリを使うほうがより良い選択である。
適時性
- 適時性 を達成するためにQUICを使うことができる。
- バッファを空にする: 輻輳制御によってキューを検知し、送信速度を下げる。
- データをストリームに分割する: 各ストリームは独立して送信される。
- ストリームに優先順位を付ける: 重要なストリームを優先して届ける。
Datagram擁護
- QUICとMoQはDatagramをサポートしている。
- Datagramサポートは、実験を可能にするうえで重要である。
- しかし、Datagramの使用は落とし穴になり得る。
結論
- Datagramの上にアプリケーションを設計するべきではない。
- UDPの上に別の動画プロトコルを作るのではなく、Media over QUICに参加するほうがよい。
GN⁺の見解
- 適時性の重要性: リアルタイムアプリケーションでは、データの適時性が非常に重要である。TCPよりUDPが適している場合もあるが、輻輳制御のような追加の考慮が必要になる。
- QUICの利点: QUICはUDPの欠点を補いながら高い性能を提供する。特にリアルタイム動画ストリーミングに適している。
- バッファブロート問題: ネットワーク混雑時にパケットをキューへ溜め込むことは、適時性を損なう可能性がある。これを避けるには輻輳制御が必要である。
- Datagramの限界: Datagramはリアルタイム転送に適しているが、信頼性や順序保証が必要な場合はQUICのようなプロトコルのほうが良い選択である。
- 技術選択の重要性: アプリケーションの要件に合った適切な転送プロトコルを選ぶことが重要である。誤った選択は性能低下やユーザー体験の悪化を招く可能性がある。
1件のコメント
Hacker Newsの意見