High-Level Data Link Control
出典: フリー百科事典『ウィキペディア(Wikipedia)』
High-Level Data Link Control(ハイレベルデータリンク制御手順、以下HDLCと略す)は国際標準化機構(ISO)によって標準化された、ビットオリエンテッドなフレーム同期型のデータリンク層プロトコルである。最初のHDLCはISOによって以下のように定義された。
- ISO 3309 — フレーム構造
- ISO 4335 — 処理手順の要素
- ISO 6159 — 非平衡型処理手順
- ISO 6256 — 平衡型処理手順
これらの定義はISO 13239に取りまとめられ、現在のHDLCの定義となっている。HDLCはコネクションオリエンテッド型通信にもコネクションレス型通信にも対応できる。
HDLCはポイント・ツー・マルチポイントでの通信を行うことができるが、現在はほとんど Asynchronous Balanced Mode(ABM)を使ったポイント・ツー・ポイントでの通信でしか使われていない。HDLCにはABMの他にNormal Response Mode(NRM)とAsynchronous Response Mode(ARM)の2つがある。
目次 |
[編集] 歴史
HDLCはIBMが開発したSystems Network Architecture(SNA)のレイヤ2プロトコルであるSDLCが大元になっている。それを国際電気通信連合(ITU)が、LAPBとしてX.25プロトコル・スタックに持ち込みHDLCの誕生となった。現在、これは同期型のPPPとして、インターネットのようなWANにサーバなどを繋ぐのに用いられている。これと一部異なるバージョンのものがISDNの制御チャンネルやSDH多重電話回線で使用されている。またシスコなど一部のベンダではシスコHDLCのように、下位のHDLCのフレーミング技術のみを導入し、ヘッダ部分は独自といったプロトコルを開発したりもしている。
[編集] フレーミング
HDLCのフレームは同期リンク、非同期リンクに関わらず送信することが可能である。これらのリンクにはフレームの始めと終わりを見分けるメカニズムはないので、通信を行うには各フレームの始めと終わりを認識するメカニズムが必要である。フレームの始まりと終わりを認識するにはフラグか、もしくはフレームデリミタを使用する。どのように使用するかと言うと、特定のビット配列(=フレームデリミタ)が存在する=その部分はフレームではない、という具合でフレームを認識する。そのビット配列は”01111110”で16進数で表示すると”7E”である。
同期リンク上でフレームの通信がない場合、連続してフレームデリミタが送信され続け、以下のような連続したビット配列を示す。
01111110011111100111111001111110 ______ ______ ______ ______ _ __ __ __ _
これを利用しモデムは位相同期回路を経由して時計をシンクロさせる。
実際に送受信されるバイナリデータはフラグ配列と同じビット配列を含む可能性がある。そのまま送信した場合、受信する側はそのままフラグと解釈しエラーとなるため、別の配列に変換する必要がある。
同期リンク上での場合、その変換方法としてbit stuffingを使う。これはどういった変換を行うかというと、送信デバイスにおいて0の後ろに1が連続して5つ続いたのを検知すると、ハードウェア側でその後ろに0を挿入するといった変換を行う。受信デバイスにおいては0の後に1が5つ続きさらにその後ろに0があった場合、データと判断し0を取り除く。1が6つ続いた場合はフラグと判断して対応を行う。
bit stuffing 元・受信データ:01111110 01111110 01111110 01111110 … 送信データ :01111101 00111110 10011111 01001111 1010…
シリアルポートやUARTのように8ビット(オクテット)単位で送出する非同期リンクにおいては、bit stuffingを行うと半端が出てしまうため別の変換を行う必要がある。代わりの変換方法は”byte stuffing”もしくは”octet stuffing”と呼ばれる。どのような方法かと言うと、送信デバイスでデータ内のオクテットがフレームデリミタの”01111110”(16進数で7E)か、もしくはエスケープバイトの”01111101”(16進数で7D)と同じであるものを検知するとそのオクテットの前にエスケープオクテット”01111101”を置き、そのオクテットの5番目のビットの0と1を入れ替える。受信デバイスはエスケープバイトを検知するとエスケープバイトを削り、次のオクテットの5番目のビットの0と1を入れ替える。
byte stuffing 元・受信データ:01111110 01010101 01111101 01011110 … 送信データ :01111101 01110110 01010101 01111101 01110101 01011110 …
[編集] フレーム構造
フラグを含むHDLCのフレーム構造は以下のようになっている。
フラグ | アドレス | コントロール | 情報 | FCS | (オプショナルのフラグ) |
---|---|---|---|---|---|
8ビット | 8ビット | 8ビット もしくは 16ビット | 可変長, 0もしくは8の倍数ビット | 16ビット | 8ビット |
後のフラグは次のフレームの始めのフラグを兼ねている(なくても大丈夫)。
伝送される情報は8の倍数ビットになる。これは電話、テレタイプの長距離デジタル伝送装置が8ビットずつ伝送しているのにHDLCが適応した結果である。これによりHDLCは効率的にバイナリデータを送受信できる。
FCSはFrame Check Sequenceの略でパリティチェックより洗練された方法であり、データのエラー検出と訂正を行う。
[編集] 関連項目
- Point-to-Point Protocol
- Synchronous Data Link Control,
- Serial Line Internet Protocol