信頼性の高いバイトストリームは、コンピュータネットワークにおける一般的なサービスパラダイムです。これは、通信チャネルから受信側に出力されるバイトが、送信者がチャネルに挿入したときとまったく同じであり、まったく同じ順序であるバイトストリームを指します。
信頼性の高いバイトストリーム通信プロトコルの典型的な例は、インターネットの主要な構成要素の1つである伝送制御プロトコル(TCP)です。
しかし、コンピュータネットワーク通信プロトコルが提供する信頼性の高いサービスパラダイムは、信頼性の高いバイトストリームだけではありません。他のプロトコル( SCTPなど)は、信頼性の高いメッセージストリームを提供します。つまり、データは個別の単位に分割され、データの利用者に個別のオブジェクトとして提供されます。
一般的に信頼性の低い下位レベルの上で、信頼性の高いバイトストリームを実現する通信プロトコルは、その信頼性を確保するために様々なメカニズムを使用します。自動再送要求(ARQ)プロトコルは、信頼性を実現する上で重要な役割を果たします。
すべてのデータ項目にはシーケンス番号が付与され、これはデータが正しい順序で相手側に配信されることを保証するため、およびデータ項目の欠落をチェックするために使用されます。受信側は、正常に受信されたデータ項目に対して確認応答を返信します。送信側のタイマーは、妥当な往復時間内に確認応答が受信されない場合、タイムアウトを引き起こし、(おそらく欠落した)データが再送信されます。データ項目に破損がないことを確認するために、チェックサムが使用されます。チェックサムは、送信前に各データブロックごとに送信側で計算され、受信側でチェックされます。誤ったデータまたは欠落したデータは送信側に報告され、送信側はそれを再送信します。重複したデータ項目は破棄されます。
信頼性の高いバイト ストリームでは、先頭ブロッキングが発生する可能性があります。パケットが並べ替えられたり失われたりして再送信が必要になった場合 (つまり、順不同で到着する場合)、ストリームの連続的に後の部分のデータが、連続的に前の部分のデータよりも先に受信される可能性があります。ただし、通常は前のデータが受信されるまで後のデータは使用できず、ネットワーク遅延が発生します。複数の独立した上位レベルのメッセージがカプセル化され、単一の信頼性の高いバイト ストリームに多重化されている場合、先頭ブロッキングにより、後から送信された完全に受信されたメッセージの処理が、先に送信されたメッセージの配信を待つことになる可能性があります。[ 1 ]これは、たとえば、複数のリクエスト-レスポンス ペアを単一のストリームにフレーム化するHTTP/2に影響します。アプリケーション レイヤー フレーム設計を採用し、ストリーム トランスポートではなくデータ グラムを使用するHTTP/3では、この問題は回避されます。 [ 2 ] [ 3 ]先頭ブロッキングによる遅延の悪化は、基盤となるパケット損失率とラウンドトリップ 時間に依存し、損失が大きいほど遅延が悪化します。[ 4 ] [ 5 ]ストリーム抽象化を変更せずにパケット損失を減らすことで、ヘッドオブラインブロッキングによる被害を軽減できます。代替案としては、前方誤り訂正を使用して冗長データを送信することで、再送信を起こさずに一定量の損失を許容できる信頼性の高いバイトストリームを実装する方法があります。[ 1 ]