要約

  • CCP の構成オプションは、受信側が復号できるアルゴリズムを示す。そのため、往路と復路で別方式を選ぶことも、一方向だけを非圧縮にすることもできる。
  • Configure-Ack は特定要求への同意、0x00FD はアルゴリズム名を含まない圧縮データグラム表示、Reset-Ack は対応する再同期応答である。どれも単独では完全性、失われたデータの回復、終端配送を証明しない。

二人が同じ辞書を持っているから略語が通じるのではない。話を受け取る人が、その辞書を持っていると先に示したから通じる。RFC 1962 の CCP は、この順序をワイヤ上の規則にした。

PPP が Network-Layer Protocol フェーズへ達するまで CCP パケットは交換できず、早着したものは黙って捨てる。圧縮データはさらに、CCP が Opened になるまで送れない。リンク確立、圧縮交渉、データ使用は同じ時点ではない。

受信能力を二方向で分ける

CCP オプションが表すのは、受信側が相手からのデータを復号するために受け入れられる方式と値である。複数候補から一方向につき一つの主要方式を選ぶ。逆方向は、もう一方の受信側が独立に選ぶ。

メモリ、速度、費用、ライセンス条件が違えば非対称は合理的である。未知の方式には Configure-Reject、方式は既知でも値が不適切なら許容値を載せた Configure-Nak を返す。すべて拒否された方向は圧縮を使わずに続行する。合意できないことをリンク全体の失敗にしない点が重要だ。

Ack が確定する範囲

RFC 1661 における Configure-Ack は、有効な Configure-Request への肯定応答である。その交換時点で同じオプション列を受け入れた証拠にはなる。しかし、後のフレームがその実装で処理されたことまでは示さない。

必要なのは、識別子、方向、オプションの生バイト、パラメータ、状態の世代、双方の Opened、途中の再交渉の有無である。RFC 2153 の OUI はベンダー拡張を衝突なく運ぶ場所を与えるが、異なる実装の意味一致を保証しない。RFC 1915 の variance も特許を伴う標準化過程の記録であり、導入実績ではない。

0x00FD は方式名ではない

Opened 後の 0x00FD は Compressed Datagram を表す。Multilink の物理リンクごとに圧縮する場合はデータが 0x00FB、制御が 0x80FB となる。IANA 登録は番号の一意性を示す。

RFC 1962 は、0x00FD が圧縮方式を示さないと明記する。受信側は「この方向で現在選ばれている一方式」と結び付けて初めて復号できる。制御記録と世代を失えば、二バイトの値から Predictor、LZS、独自方式のどれかを決めることはできない。

圧縮結果が必ず短いわけでもない。出力が PPP Information フィールドを超えれば、元の非圧縮形式や方式固有の分割へ戻る。表示は処理経路であり、効率の測定値ではない。

同期喪失を誰が見つけるか

履歴型圧縮では一パケットの欠落が後続辞書をずらす。汎用 CCP は共通 CRC を定義しない。各方式が信頼性を判定する方法を備えるか、RFC 1663 の numbered mode のような信頼できる搬送を要求しなければならない。

RFC 1974 の Stac LZS はシーケンス番号、LCB、CRC、複数 history を選べる。RFC 1967 の LZS-DCP は別のリセットビットと検査を持つ。これらは 0x00FD の中にはない。「圧縮として分類した」と「正しく展開できた」は別の判定だ。

リセットは失われたデータを戻さない

受信失敗を見つけた側は Code 14 の Reset-Request を送る。期待した識別子の Code 15 Reset-Ack が届くまで、その方向の圧縮パケットを捨て、必要なら同じ要求を再送する。

要求を受けた相手は送信側コンプレッサを初期化して Ack を返す。元の受信側もデコンプレッサを初期化する。逆方向の辞書には触れないので、健全な流れは続けられる。

ただし待機中に捨てたデータグラムは復元されない。次の CRC、別 history、下位リンクの信頼性、TCP の再送、アプリケーション結果も Ack の外側にある。Reset-Ack は同じ出発点へ戻る合図であり、サービス回復証明ではない。

狭い共通層という設計

Heng Lu の Running-Code Primacy を当てはめると、文書や登録番号の役割を過大評価せずに済む。共通層はパケット種別、オプション拒否、Opened 条件、再同期を決める。どの方式を採るかは各受信側の実装と判断に残す。

証拠も段階を飛ばせない。ネットワーク層フェーズ、方向別要求、一致 Ack、Opened、実際のコンプレッサ、フレーム表示、方式固有検査、リセット、初回の正常展開、終端受信、アプリケーション結果である。片方向だけを止められるからこそ、両方向を一括して「正常」と呼ぶ必要がなかった。

Sources