要約
- PPP Multilinkでは複数member linkのfragmentがbundle共通のsequenceを使い、BとEがpacketの先頭と末尾を示した。番号はfragmentごとに進み、packetや追加回線の開始ではresetされない。
- 共通仕様は等分割も万能schedulerも要求しない。小さなpacketは分けずに運べ、fragment長や回線選択は局所的に決められる一方、MRRUが受信側の再構成上限を定めた。
- 各linkのFCSが守るのは各fragmentであり、復元済みpacket全体に新しいFCSはない。Endpoint Discriminatorはbundle判定の補助であってcredentialではなく、動的帯域と優先度は別拡張になった。
二本目は別のIP linkにならなかった
最初のbearer channelが動作中に、二本目のPPP回線がOpenになる。二本を独立したlinkとして扱えば、capacityだけでなくaddressやNetwork Control Protocolの状態まで二組になる。逆に、同じpacketの断片を根拠なく両方へ流せば、速度差による並べ替えを受信側が解けない。
Multilinkが導入したのはbundleという中間の単位だった。memberはそれぞれLCP、authentication、framingを持つ。しかしnetwork protocolは通常bundleに対して一度だけ構成できる。一本を追加または除去しても、bundleの上にあるconversationを最初から作り直す必要はなかった。
1994年のRFC 1717は複数ISDN bearerを代表例として仕組みを提示した。1996年のRFC 1990はそれを置き換え、曖昧だった交渉やsequenceの規則を明確にした。「帯域を束ねる規格」という説明だけでは核心が抜ける。歴史的な工夫は、物理memberが変わる状況でpacket復元に必要な状態だけを共有物にした点にある。
切ったのはlink frameではなく論理packetだった
送信側はnetwork protocol packetに通常のPPP Protocol fieldを付ける。まだ特定memberのAddress、Control、Flag、FCSを付けた物理frameにはしない。このPPP encapsulated packetが分割対象である。
各fragmentはPPP Protocol 0x003dとして運ばれ、MP headerが前に置かれる。最初のfragment dataは元packetのProtocol fieldから始まる。B bitは最初、E bitは最後を示し、一つのfragmentでpacket全体を運ぶときはBとEの両方を1にできる。
したがってMultilinkは全packetの分割を義務づけていない。短いpacketはそのまま一片でよい。分割するときも同じ長さである必要はない。速いmemberへ大きめのfragmentを割り当てる実装も、別の局所的方針も、受信側の共通文法を変えずに選べた。
標準が決めたのはfragmentの順序とpacket境界である。なぜその瞬間にそのmemberを選んだかはwireから必ずしも分からない。この非対称性は欠陥ではなく、schedulerの改善を相互運用契約から切り離すための余白だった。
sequenceはpacketにもmemberにも属さない
通常のMP headerには24 bit sequence numberがある。12 bitのshort headerも交渉できるが、一つのbundle内でformatを混在させてはならない。番号はfragmentを送るたびに一つ進む。
元packetが変わってもsequenceはゼロに戻らない。既存bundleへ二本目が加わっても戻らない。新しいbundleはゼロから始まるが、member集合の変更だけでは新しいsequence epochにならない。この規則がなければ、新memberの小さな番号と旧member上で遅れていた古いfragmentを区別しにくい。
受信側もbundle全体で一つのreassemblyを行う。memberごとの速度とdelayが違えば、到着順は当然変わる。受信側は各memberで観測したsequenceの進みを保持し、その全てが通過した最小値を求める。欠けた番号がその値より古ければ、単に遅いmember上に残っているとは説明できなくなり、不完全なpacketを捨てて先へ進める。
ただしbufferは真実を作れない。大きなdelay差、低速member、大きいfragmentは必要量を増やす。RFC 1990は、peerがpacketを留め続ける場合、どれだけbufferしてもloss検出を保証できないと述べる。sequenceは不確実性を整理する道具であり、信頼性そのものではない。
良好なFCSが十一番目のfragmentを補わない
各memberはMP fragmentを普通のPPP frameに入れ、そのlinkのFCSを付ける。FCSが正しければ、観測されたfragmentがそのlinkの検査を通ったとは言える。しかしMultilinkは、全fragmentをつないだpacketに新しいFCSを付けない。
十一片のうち十片が全て良好でも、一片が失われればpacketは完成しない。member dashboardのFCS欄が緑であることと、bundleがcomplete packetを上位へ渡したことは異なる証拠である。
failed linkの検出方法もMP headerには組み込まれていない。LQMやLCP Echoを使うことはできるが、それらは隣接する別機構だ。memberでreliable deliveryが必要ならPPP Reliable Transmissionを別途交渉する。MPには再送要求もapplication acknowledgementもない。
運用ではmember state、framing/FCS counter、member別最終sequence、bundleのgap、incomplete reassembly discard、上位へ渡したpacket数、application outcomeを分離して保存する必要がある。一個の「bundle正常」indicatorにまとめると、どの境界で失われたかを再現できない。
MRRUは再構成能力の約束だった
Maximum Reconstructed Receive Unitはbundleが受け取れる最大のreassembled information fieldを示す。物理memberのMRUとは別物である。member frameは自分のfragmentを収めればよく、論理packetは交渉済みMRRU内で復元される。
MRRUはLCP option type 17であり、Multilink packetを受信できる、またはlinkをbundleへ加えられるという明示的な交渉でもある。RFC 1990は少なくとも1500 octetのsupportを要求し、旧仕様の曖昧なdefaultをなくした。Short Sequence Header Formatはtype 18である。
type 19のEndpoint Discriminatorは、複数linkが同じpeerへ通じ、同じbundleへ属すかを判断する材料になる。しかしそれだけでMultilink能力を示すわけではなく、identity proofにもならない。
class 1はlocal assignmentでありglobal uniquenessを保証しない。Magic-Number Blockも一意である可能性に依存するだけで、authenticationやdatabase keyとしての利用は非推奨になった。値は偽装できる。secureにmemberを参加させるならPPP authenticationが必要である。名前を合わせる機構と参加権限は別に保たれた。
回線を増やす判断はBAPの仕事になった
Base MPはmemberの追加・削除を許したが、いつcallするか、どちらのpeerが帯域判断を支配するかは決めなかった。RFC 2125のBACPはbundleごとにcontrol側を選び、BAPはlink追加・削除requestとcall statusを運んだ。
callが成功したというstatusは、その操作の結果にすぎない。新memberが期待した構成を持つこと、MP fragmentを実際に運ぶこと、throughputが上がること、application transactionが届くことまでは証明しない。制御面の成功とdata面の結果を分離できる設計だった。
latencyにも別の拡張が必要になった。RFC 2686は28.8 kbit/s回線で1500 byteを送ると約400 msを占有し、会話のround tripが一秒近くなり得る例を示した。Multi-Class extensionは低優先度fragmentの間へ高優先度を入れられるようにした。base MPの一つのsequenceは復元を解くが、priority policyまでは解かない。その限界を隠さず、後から独立に拡張した。
bundleは最大設計ではなく最小合意だった
Multilinkで共有されたのは、MP capability、MRRU、一つのheader format、B/E境界、一つのsequence spaceだった。fragment size、member選択、pacing、failure detector、priorityは局所または別protocolに残った。
この分割が、変化する物理capacityの上に安定したnetwork-layer conversationを置いた。bundleはmemberの現実を消す中央権威ではなく、互いの実装が最低限同じpacketを復元するための合意だった。
観測も同じ節度を守る必要がある。0x003dはMP表現、B/Eとsequenceはfragmentの主張、MRRUはreceive bound、Endpoint Discriminatorはmatching hintを示す。それらを組み合わせてもidentity、完全配送、帯域向上、現在の採用率までは出てこない。running bundleのcapture、counter、reassembly completionと上位結果だけが証拠の鎖を閉じる。
出典
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
