# フレーミング ## 定義 フレーミング(framing)は、リンク上を流れるビット列を、ノード間で受け渡す完結したメッセージ(フレーム)の単位に区切る問題である。パケット交換網ではビットストリームではなくフレームがノード間でやり取りされるため、ネットワークアダプタは「どこからどこまでが1つのフレームか」を正しく認識しなければならない。この問題への解法は大きく3種類に分かれる。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] §2.3) ### バイト指向プロトコル(byte-oriented framing) フレームをバイト(文字)の集まりとして扱う。**番兵文字(sentinel character)**方式は SYN/STX/ETX のような特殊文字でフレームの開始・終了を示し、本文中に現れる番兵文字は DLE(data-link-escape)文字で前置してエスケープする(**文字スタッフィング**、character stuffing)。BISYNC(IBM)がこの方式の初期例。もう一つの方式はフレーム長をヘッダのカウントフィールドに含める(DDCMP)が、カウントフィールド自体が誤り伝送で壊れると**フレーミングエラー**を引き起こしうる。PPP(Point-to-Point Protocol)は番兵+文字スタッフィング方式を採り、`Flag` フィールド(`01111110`)でフレームを区切る。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] §2.3.1) ### ビット指向プロトコル(bit-oriented framing) バイト境界を意識せず、ビット列そのものとしてフレームを扱う。HDLC(元は IBM の SDLC を ISO が標準化)は `01111110` という特別なビット列でフレームの開始と終了の両方を示す。本文中に連続する5個の1が現れると送信側が0を1つ挿入し(**ビットスタッフィング**、bit stuffing)、受信側は次のビットを見て「スタッフィングされた0」か「フレーム終端」か「誤り」かを判別する。文字スタッフィング・ビットスタッフィングいずれも、フレームサイズがペイロードのデータ内容に依存してしまう(すべてのフレームを同じサイズにできない)という共通の性質を持つ。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] §2.3.2) ### クロックベースのフレーミング(clock-based framing) SONET が代表例。スタッフィングを一切使わず、フレーム長はデータ内容に依存しない。代わりに、フレーム先頭の特殊なビットパターンを一定バイト数(STS-1 なら 810 バイトごと)ごとに検出することで受信側が同期を取る。SONET は複数の低速リンクを1本の高速リンクへ多重化する仕組み(バイト単位のインタリーブによる STS-N、ペイロードを連結した STS-Nc)も兼ね備え、電話キャリアの厳格な管理要件(クロック同期、複数の 64 kbps チャネルの多重化)を反映した設計になっている。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] §2.3.3) 本書は、点対点リンクの文脈でフレーミングを説明しつつ、同じ問題が Ethernet や Wi-Fi のような多元接続ネットワークでも解かれねばならない普遍的な問題だと明記している。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] §2.3) ## 横断的知見 - (現時点では [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]] 単独からの立ち上げであり、複数ソースの突き合わせによる知見はまだない。同書の他章(Ethernet の 64 バイト前後のフレーミング、802.11 のフレームフォーマットなど)や他ソースがこの概念に触れた際にここへ積み増す。) ## 未解決の問い - 文字/ビットスタッフィングが引き起こす「フレームサイズがペイロード依存になる」問題は、実装上のバッファ管理やジッタにどの程度の影響を与えるか。本章はこの点を指摘するのみで定量化していない。 - SONET のクロックベースフレーミングは光ファイバ・電話網という同期性の高い媒体を前提にしている。パケット交換が主流になった現代のバックボーン(Ethernet ベースの WAN など)で、この方式がどの程度置き換えられたか、本書 chapter 2 の範囲では扱われていない。 - Ethernet(§2.6)や 802.11(§2.7)のフレームフォーマットは、本概念の3分類のどこに位置づくのか(Ethernet はビット指向、プリアンブルによる同期という点で SONET のクロックベースの発想も部分的に含む)は、章内で明示的に整理されていない。 ## 関連 - source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]](§2.3, §2.3.1, §2.3.2, §2.3.3) ## 出典 - [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 2 Direct Links]](§2.3, §2.3.1, §2.3.2, §2.3.3) </content>