HDLC
ビット単位でフレームを扱うデータリンク層の伝送制御手順。フラグシーケンスでフレームの境界を示し、FCSによって誤りを検出する。
イマシルちゃんの解説
長いひもに荷札をつないで送るとき、どこからどこまでが一つの荷札か、印が必要だよね。
でも、荷札の中身に同じ印が出てきたら、途中で切れていると勘違いしちゃう。
そこで、中身の印は少し形を変えて送り、受け取ってから元へ戻すんだ。
区切りを守る工夫と、中身が壊れていないか調べる工夫は、それぞれ別に用意するよ。
より深い解説
フレームを見分ける
HDLCは、特定の文字コードに依存せず、任意のビット列を運べるようにした伝送制御手順である。フレームの開始と終了は、01111110という並びで示す。この境界の印をフラグシーケンスという。
| フィールド | 主な役割 |
|---|---|
| 境界の印 | フレームの開始・終了を示す |
| アドレス | 相手の局などを識別する |
| 制御 | フレームの種類、順序、確認応答などを表す |
| 情報 | 転送するデータを格納する |
| FCS | 内容の誤り検出に使う |
すべての種類のフレームが情報フィールドを持つわけではない。また、境界の印が正しくても、中身が正しいと保証されたわけではない。
中身と区切りが混同されない工夫
情報などの中に境界と同じ並びが現れないようにする操作がビットスタッフィングである。送信側は、フラグを除くフレーム内部で1が5個続いたら、その直後へ0を挿入する。受信側は対応する0を除去し、元の列を取り出す。
たとえば、データ中の連続した1は、途中に0を挟んで送られる。これは元のデータを書き換えてしまう処理ではなく、通信路に載せるときだけ行う可逆的な変換である。
この仕組みによって、特定の並びを含むデータも、境界と取り違えずに扱える。この性質をデータの透過性という。
確認と誤り制御
| 仕組み | 何を確かめるか |
|---|---|
| 順序番号 | データの順番や重複を管理する |
| 確認応答 | どこまで受け取ったかを伝える |
| FCS | CRCを利用し、伝送中の変化を検出する |
| ウィンドウ制御 | 確認応答を待たずに複数のフレームを送れる範囲を管理する |
フラグシーケンスは、このうち順序番号や確認応答の代わりにはならない。また、FCSは基本的に検出のための情報であり、壊れた内容をそれだけで訂正する仕組みではない。
PPPとの関係
PPPには、HDLCに似たフレーム形式が使われる。RFC 1662はPPPのHDLC-likeフレーミングを定めており、伝送方法に応じてビット単位の処理やオクテット単位の処理を使い分ける。
フレームの見た目が似ていても、PPPがHDLCのすべての制御機能をそのまま備えるわけではない。認証やネットワーク層の設定などは、PPP側の仕組みとして区別する。