1 チャンク再送の概要
1.1 定義と目的
チャンク再送とは、データを一定のまとまり(チャンク)に分割して送る通信において、受信側が欠落を検出した場合に、送信側が問題のチャンクだけを再送する方式である。目的は、通信の成功率を高めつつ、欠落があっても全体を丸ごと再送する必要を減らし、帯域や再送量を抑える点にある。特に回線の一時的なパケット損失や揺らぎがある環境で効果が出やすい。
1.2 通信方式との関係
1.2.1 分割送信(チャンク化)の考え方
分割送信は、大きなデータ列を複数の単位に分けて送る発想である。これにより、受信側はどこまで届いたかを単位ごとに扱えるようになり、欠落の特定が現実的になる。チャンク化は、ファイル転送のようなバルクデータから、映像や音声のストリームまで幅広い領域で用いられる。
1.2.2 信頼性確保との役割分担
信頼性確保は、欠落を見つける検出、届いたことを示す確認、再送を決める制御、重複や遅延の影響を抑える設計に分解できる。チャンク再送は主に「欠落検出→該当チャンクのみ再送」という部分を担い、確認応答やタイムアウトと組み合わせて全体の挙動を成立させる。
1.3 用語の整理
1.3.1 チャンク
チャンクは、送信単位として切り出されたデータのまとまりである。各チャンクは識別子や位置情報を伴い、受信側が欠落や重複を判断できるようにするのが一般的である。
1.3.2 欠落検出
欠落検出は、受信側が「本来届くはずの範囲にデータがない」ことを判断する処理である。受信順序の乱れや遅延を考慮しつつ、欠けたチャンクを特定できる根拠(番号・ビットマップ等)をもとに行う。
1.3.3 再送要求
再送要求は、受信側が欠落したチャンクを補うために送信側へ伝える指示である。要求の粒度は通常「欠落した識別子の集合」で表され、再送制御の設計により抑制やまとめ送りが行われる場合もある。
2 基本メカニズム
2.1 送信側の処理フロー
2.1.1 チャンク管理
2.1.1.1 送信履歴とバッファリング
送信側は、チャンクに対応する番号や範囲を付与し、必要期間保持できる形で管理する。再送に備えて、送信済みチャンクを一定量バッファに蓄える設計が一般的である。保持期間は確認応答の受領や再送要求の到達可能性に基づき、過剰なメモリ消費を避ける上限が設定される。
2.1.2 確認応答への対応
送信側は受信側からの確認情報を受け取り、どのチャンクが成功裡に受領されたかを更新する。欠落が示された場合は、そのチャンクだけを再送対象として選び直す。これにより、遅延で後から到達したチャンクと再送チャンクが混在しても、受信側の重複排除と組み合わさって整合性を保つ。
2.2 受信側の処理フロー
2.2.1 欠落チャンクの検出
受信側は受け取ったチャンクの集合と期待される範囲から欠落を推定する。たとえば、先頭からの進行を示す番号を基準に、ある番号の飛びが継続して観測される場合に欠損とみなすなどの方法がある。順序が入れ替わる可能性があるため、単に「次が来ていない」ではなく、到達状況の記録に基づいて判断することが重要になる。
2.2.2 再送要求の生成
欠落が特定されると、受信側は該当チャンクの識別子をまとめて再送要求を作る。要求を即時送るのか、一定間隔でまとめるのかは帯域や遅延の性質に依存する。さらに、要求が繰り返されることによる負荷を抑えるため、同一欠落に対する重複要求を制限する仕組みが導入されることもある。
2.3 再送制御の要点
2.3.1 タイムアウト設計
タイムアウトは、送信側が「再送してよい」判断をするための時間基準である。短すぎると不要な再送が増え、長すぎると復元の遅れが目立つ。遅延変動や観測可能な往復時間を考慮し、再送の頻度と回復までの時間のバランスを取ることが設計の中心になる。
2.3.2 再送回数の上限
再送回数の上限は、通信が永続的に成立しない場合に無限ループを防ぐための安全装置である。上限を超えた場合は、転送の中止、上位層へのエラー通知、別経路の利用などの後処理へ移行する。上限値は通信の重要度や利用目的(リアルタイム性の有無)に応じて調整される。
2.3.3 重複チャンクの扱い
再送や遅延により同じチャンクが複数回届くことがある。そのため受信側は、到達済みの識別子を記録し、再構成時に二重計上しないようにする。場合によっては、重複の受領は無視しつつ、メタ情報(たとえば到達統計)だけ更新する設計も可能である。
3 性能・品質への影響
3.1 遅延(レイテンシ)への影響
欠落が発生した場合、再送までの待ち時間が増えるため、完全に復元できる時点の遅延は増加しやすい。特に受信側が欠落判定から要求生成、送信側が再送準備、再到達を経るまでの一連の流れが遅延要因となる。遅延を抑えるには、欠落判定の早さとタイムアウトの長さの調整が重要になる。
3.2 スループットへの影響
再送が生じると、実効的な送信量は増加するため、スループットは低下する傾向がある。一方で、全量再送よりは対象を絞れるため、損失が軽微なら全体としての効率は保ちやすい。結果は「損失率」「チャンク化の粒度」「再送頻度」に強く依存する。
3.3 損失率と再送の関係
損失が低い場合は再送の発生が少なく、通常は性能劣化が限定的になる。損失率が上がると欠落が増え、要求の回数や再送量が増えるため、通信は徐々に不利になる。ただし、チャンク単位での補完が可能である限り、損失がどこで起きたかに応じた局所的な修復が起き、致命的な全体停止を避けられる場合がある。
3.4 品質劣化の抑え方
3.4.1 部分復元と欠落の許容度
品質は「復元の完全性」と「欠落をどの程度見逃すか」によって決まる。用途によっては欠落したチャンクを待たずに先へ進み、表示や再生を成立させる設計が取られる。許容度が高いほど再送待ちが減り遅延は抑えられるが、欠落部分が目立つ可能性がある。
3.4.2 フォールバック戦略
フォールバック戦略は、再送が間に合わない、または回数上限に達した場合の代替手段である。たとえば、欠落部を推定補間で埋める、次の区間から再同期する、あるいは冗長情報を用いて復元するなどの考え方がある。戦略の選択は品質の目的(滑らかさか正確性か)によって変わる。
4 実装と設計上の論点
4.1 チャンクサイズの選定
4.1.1 大きい場合の利点と欠点
チャンクが大きいと、番号管理のオーバーヘッドが相対的に減り、確認情報も軽くなりやすい。その反面、1チャンク欠落したときに影響範囲が大きくなり、再送量や復元遅延が増える。さらに、送信バッファへの保持コストも上がりやすい。
4.1.2 小さい場合の利点と欠点
チャンクを小さくすると欠落の影響を局所化でき、再送も細粒度になるため、復元の立ち上がりを早めやすい。ただし、識別子や管理情報が増え、確認応答や再送要求のメッセージ量が増大することがある。結果として、少ない損失でも制御オーバーヘッドが相対的に支配的になる場合がある。
4.2 バッファ管理
4.2.1 受信バッファ
受信バッファは、順不同到達に備えて未整列のチャンクを一時保持する領域である。メモリ使用量と、ある範囲をいつまで保持するかが設計の要点になる。欠落が長時間埋まらない場合、保持を打ち切って前進するか、再送を待つかの判断が品質に直結する。
4.2.2 送信バッファ
送信側のバッファは再送に直結するため、保持対象と期間の設計が重要である。早い段階で確認を得られる環境なら保持期間を短縮でき、資源効率が上がる。逆に確認の遅れが大きい場合は保持量が増え、実装上の制約(メモリ、ストレージ、管理負荷)が顕在化する。
4.3 同期と順序保証
4.3.1 順序維持の方法
順序維持は、再構成のために必要な場合がある。チャンク番号によって並べ替える方法や、受信側が欠落を埋めた後に組み立てる方法がある。リアルタイム性が強い場合は完全な順序待ちを避け、表示可能な範囲から進める設計も採られる。
4.3.2 重複排除の方法
重複排除は、識別子の照合によって実現されることが多い。受信側は到達済みフラグやビットマップを使い、既に組み込んだチャンクを再度反映しないようにする。重複が多い状況では照合データ構造の効率が重要になり、計算量とメモリのトレードオフが生じる。
4.4 セキュリティと整合性
4.4.1 チャンクの検証(ハッシュ等)
整合性検証は、破損したデータを誤って受け入れないための仕組みである。チャンクごとにハッシュ値などの検証情報を付与し、受信側が一致を確認してから再構成へ進む。これにより、再送による補完が正しい内容のものであることも確認しやすくなる。
4.4.2 再送要求の悪用リスクへの対策
再送要求は攻撃者に悪用される余地がある。たとえば存在しない識別子を大量に要求して、送信側の計算やバッファ消費を誘発するケースが考えられる。対策として、要求の妥当性チェック(範囲・整合性)、レート制限、認証付きセッション管理などを組み合わせる必要がある。これにより、通信の安定性を守りつつ不正な負荷増加を抑える。
5 応用例と利用シーン
5.1 ファイル転送での活用
ファイル転送では欠落が最終成果物の欠陥につながりやすく、再送による補完が有効である。チャンク単位で進捗を管理し、欠けた区間だけを埋めることで、途中まで届いたデータを活かしつつ復元を完了できる。特にネットワークが不安定な回線でも、局所的な損失に対処しやすい。
5.2 ストリーミングでの活用
ストリーミングでは遅延と品質の両立が課題になる。チャンク再送は、欠落した区間の修復により視聴体験を改善し得るが、再送待ちが長いと体験を損なうため、許容度に応じた制御が必要である。結果として、待って埋める部分と、諦めて補間や次区間へ進む部分を組み合わせる運用になりやすい。
5.3 リアルタイム配信での活用
リアルタイム配信では、遅れるほど価値が薄れる。したがって再送は「効く範囲」だけで使うことが多い。たとえば短い欠落は補完して品質を維持しつつ、遅延が支配的になるほど再送要求を抑える設計が選ばれる場合がある。チャンクの粒度や再送制御の閾値が、実体験に直接影響する。
5.4 ネットワーク環境別の使い分け
5.4.1 損失が多い回線
損失が増える環境では、再送が頻発しやすく、制御オーバーヘッドやバッファ圧が問題になりやすい。チャンクを細かくして局所修復を狙う選択肢がある一方で、要求や管理情報の増加も考慮が必要になる。結果として、最適点は帯域、遅延変動、損失パターンに依存し、調整が前提になる。
5.4.2 混雑が起きる経路
混雑がある経路では遅延が膨らみ、タイムアウトによる不要再送が起きやすい。ここではタイムアウトを過度に短くせず、確認情報の反映を早める工夫や要求のまとめ送信などが検討される。さらに、混雑時の再送負荷がネットワークを悪化させる可能性があるため、レート制御や段階的な再送が用いられることがある。