高レベルデータリンク制御(HDLC)は、電気通信およびネットワークにおける機器間のデータ伝送に使用される通信プロトコルです。国際標準化機構(ISO)によって開発され、ISO/IEC 13239:2002規格で定義されています。
HDLCは信頼性の高いデータ転送を保証し、あるデバイスが別のデバイスから送信されたデータを理解できるようにします。デバイス間の常時接続の有無にかかわらず動作できるため、さまざまなネットワーク構成に対応できる汎用性を備えています。
元々、HDLCは、ノーマルレスポンスモード(NRM)や非同期レスポンスモード(ARM)などのモードを介して、1台のデバイスがマスター、他のデバイスがスレーブとして機能するマルチデバイスネットワークで使用されていました。これらのモードは現在ではほとんど使用されていません。現在、HDLCは主に、非同期バランスモード(ABM)と呼ばれるモードを使用して、ルーター間やネットワークインターフェース間などのポイントツーポイント接続で使用されています。
HDLCは、IBMのシステムネットワークアーキテクチャ(SNA)のレイヤ2プロトコルであるIBMのSDLCプロトコルに基づいています。ITUはこれを拡張し、LAP(リンクアクセス手順)として標準化しましたが、ANSIはほぼ同じバージョンのプロトコルをADCCPと名付けました。
HDLC仕様では、フレームフィールドの完全な意味論は規定されていません。そのため、他の完全準拠規格を派生させることが可能となり、その後、無数の規格で派生規格が登場しました。X.25プロトコルスタックではLAPB 、 V.42プロトコルではLAPM、フレームリレープロトコルスタックではLAPF、ISDNプロトコルスタックではLAPDとして採用されています。
HDLCに関するオリジナルのISO規格は以下のとおりです。
現在の規格であるISO/IEC 13239:2002は、これらの仕様すべてに取って代わった。
HDLCはIEEE 802.2 LLCプロトコルの着想源であり、多くのサーバーがWAN(最も一般的なのはインターネット)に接続するために使用する同期回線上のPPPで使用されるフレーミングメカニズムの基礎となっています。
同様のバージョンは、 Eキャリア(E1)およびSONETマルチチャネル電話回線の制御チャネルとして使用されています。Cisco HDLCは、低レベルのHDLCフレーミング技術を使用しますが、標準のHDLCヘッダーにプロトコルフィールドを追加します。
HDLCフレームは、同期または非同期のシリアル通信リンクを介して送信できます。これらのリンクにはフレームの開始または終了を示すメカニズムがないため、各フレームの開始と終了を識別する必要があります。これは、フレーム区切り文字(フラグ)として固有のビット列を使用し、フラグ列がフレーム内に現れないようにデータをエンコードすることによって行われます。各フレームはフレーム区切り文字で始まり、フレーム区切り文字で終わります。フレームの末尾にあるフレーム区切り文字は、次のフレームの開始を示す場合もあります。
同期リンクと非同期リンクの両方において、フラグシーケンスはバイナリ「01111110」、または16進数で0x7Eですが、詳細はかなり異なります。
フラグシーケンスは6つの連続する1ビットで構成されるため、他のデータは連続する1ビットが5つ以上にならないように符号化されます。これはビットスタッフィングによって行われます。送信データに5つの連続する1ビットが現れた場合、データは一時停止され、0ビットが送信されます。
受信側はこの処理を認識しており、5ビット連続で1が検出されると、受信データから次の0ビットが削除されます。代わりに6ビット目が1の場合、これはフラグ(7ビット目が0の場合)またはエラー(7ビット目が1の場合)のいずれかです。後者の場合、フレーム受信処理は中断され、次にフラグが検出されたときに再開されます。
このビットスタッフィングには、十分な数の信号遷移を確保するという第二の目的があります。同期リンクでは、データはNRZIエンコードされるため、0ビットは回線上の信号の変化として送信され、1ビットは変化がないものとして送信されます。したがって、各0ビットは、受信モデムが位相同期ループを介してクロックを同期する機会を提供します。1ビットが連続して多すぎると、受信側はカウントを失う可能性があります。ビットスタッフィングは、データ送信中は6ビットごとに最低1回の遷移、フラグ送信中は7ビットごとに最低1回の遷移を保証します。
単方向または全二重の同期リンクでフレームが送信されていない場合、フレーム区切り文字がリンク上で継続的に送信されます。これにより、初期状態に応じて、次の2つの連続波形のいずれかが生成されます。

HDLC仕様では、フレーム区切り文字の末尾の0ビットを次のフレーム区切り文字の先頭と共有することが認められています(例:「011111101111110」)。ただし、一部のハードウェアではこの機能がサポートされていません。
半二重通信やマルチドロップ通信のように、複数の送信機が回線を共有する場合、回線上の受信機は、送信機がアクティブでないフレーム間期間に、連続したアイドル状態の1ビットを受信することになる。
HDLCは、最下位ビットから順にデータバイトを送信します(マルチバイトフィールド内のバイト順序を指すリトルエンディアン方式とは異なります)。
標準的なRS-232シリアルポートなどの非同期シリアル通信を使用する場合、同期式のビットスタッフィングはいくつかの理由から不適切です。
非同期フレーミングでは、代わりに「制御オクテット透過性」、別名「バイトスタッフィング」または「オクテットスタッフィング」が使用されます。フレーム境界オクテットは 01111110 ( 16 進数表記では 0x7E) です。「制御エスケープオクテット」の値は 0x7D (ビットシーケンス '10111110'、RS-232 では最下位ビットから送信) です。送信データにこれら 2 つのオクテットのいずれかが現れた場合、エスケープオクテットが送信され、その後にビット 5 を反転した元のデータオクテットが続きます。たとえば、バイト 0x7E は 0x7D 0x5E ("10111110 01111010") として送信されます。必要に応じて、他の予約済みオクテット値 ( XON や XOFFなど) も同様にエスケープできます。
「中止シーケンス」0x7D 0x7Eは、不完全なバイト列でパケットを終了させ、受信側にエラーを検出させます。これにより、部分的なパケットが受信側で有効と解釈される可能性を排除し、パケット送信を中止することができます。
HDLCフレームの内容は、以下の表に示されています。
あるフレームの終了フラグは、次のフレームの開始フラグになる場合がある(ただし、必ずしもそうである必要はない)。
データは通常8ビットの倍数で送信されますが、これは一部の方式にのみ必要であり、理論的には8ビット境界以外の境界でのデータ配置も許容されます。
フレームチェックシーケンス(FCS)は、アドレス、制御、および情報フィールドに対して計算される16ビットCRC-CCITTまたは32ビットCRC-32です。FCSは、受信側がフレームの送信中に発生した可能性のあるエラー(ビットの欠落、ビットの反転、余分なビットなど)を検出するための手段を提供します。しかし、FCSの計算に使用されるアルゴリズムは、エラーチェック対象のデータの長さが長くなるにつれて、特定の種類の送信エラーが検出されない確率が高くなるように設計されているため、FCSはフレームの実質的なサイズを暗黙のうちに制限する可能性があります。
受信側が計算したFCSが送信側の計算結果と一致しない場合、つまりフレームにエラーが含まれている場合、受信側は送信側に否定応答パケットを送信するか、何も送信しないかのいずれかを選択できます。送信側は、否定応答パケットを受信するか、肯定応答パケットを待機してタイムアウトした後、失敗したフレームを再送信できます。
FCS(前方誤り訂正方式)が採用されたのは、初期の通信回線の多くが比較的高いビット誤り率を示していたためであり、FCSは単純で高速な回路またはソフトウェアで容易に計算できたからである。現在では、より効果的な前方誤り訂正方式が他のプロトコルで広く用いられている。
同期データリンク制御(SDLC )は、もともとマルチドロップバスを介して1台のコンピュータと複数の周辺機器を接続するために設計されました。元の「通常応答モード」はプライマリ/セカンダリモードで、コンピュータ(プライマリ端末)が各周辺機器(セカンダリ端末)に順番に通信する許可を与えます。すべての通信はプライマリ端末との間で行われるため、フレームにはセカンダリ端末のアドレスのみが含まれます。プライマリ端末にはアドレスは割り当てられません。プライマリからセカンダリに送信されるコマンドと、セカンダリからプライマリに送信される応答には区別がありますが、これはエンコーディングには反映されません。コマンドと応答は、送信方向の違いを除いて区別できません。
通常応答モードでは、プライマリがセカンダリに一度に1台ずつ送信許可を与えるため、セカンダリとプライマリ間のリンクを競合なく共有できます。また、プライマリがセカンダリに送信を許可している間は送信できないことを認識していれば、半二重通信リンク上での動作も可能です。
非同期応答モードは、全二重リンクで使用するためのHDLCの追加機能です[ 1 ]。プライマリ/セカンダリの区別は維持されますが、セカンダリはいつでも送信できます。そのため、複数のセカンダリが同時に送信しようとしない(またはセカンダリが1つだけ送信しようとしない)ようにするための別のメカニズムが必要です。
非同期平衡モードでは、プライマリ端末とセカンダリ端末の両方として機能できる複合端末の概念が追加されます。残念ながら、この動作モードには実装上の微妙な点があります。送信される最も一般的なフレームは、コマンドフレームかレスポンスフレームかを気にしませんが、重要なフレームの中には、それがコマンドかレスポンスフレームかを気にするものがあります(特に、番号のないフレームのほとんど、およびP/Fビットが設定されているフレーム)。また、受信したフレームのアドレスフィールドを調べて、それがコマンド(受信したアドレスが自分のもの)かレスポンス(受信したアドレスが相手端末のもの)かを判別する必要があります。
これは、アドレスフィールドは、通信相手のピアを明確にする必要がないポイントツーポイントリンクであっても、省略できないことを意味します。HDLCの一部のバリアントでは、アドレスフィールドに送信元アドレスと宛先アドレスの両方、または明示的なコマンド/レスポンスビットを含めるように拡張されています。
HDLCフレームは、大きく分けて3つの基本的なタイプに分類できます。
コントロールフィールドの一般的な形式は次のとおりです。
IフレームとSフレームには、拡張版(2バイト)も存在します。この場合も、最下位ビット(この表の右端)が最初に送信されます。
Poll/Finalは、2つの名前を持つ1ビットです。コマンドの一部として使用される場合(プライマリ局がセカンダリ局からの応答を取得するために設定する場合)はPollと呼ばれ、応答の一部として使用される場合(セカンダリ局が応答または送信終了を示すために設定する場合)はFinalと呼ばれます。それ以外の場合は、このビットはクリアされます。
このビットは、ステーション間でやり取りされるトークンとして使用されます。トークンは一度に1つしか存在できません。セカンダリは、プライマリからポーリングを受信したときにのみファイナルを送信します。プライマリは、セカンダリからファイナルを受信したとき、またはビットが失われたことを示すタイムアウトが発生したときにのみポーリングを送信します。
複合ステーションとして運用する場合、2つのチェックポイントサイクルが同時に動作する可能性があるため、PビットとFビットを区別することが重要です。リモートステーションからのコマンドに含まれるAPビットは、当ステーションのPビットに対する応答ではありません。応答に含まれるFビットのみが、Pビットに対する応答です。
IフレームとSフレームの両方に、受信シーケンス番号N(R)が含まれています。N(R)は、リンクの反対側からIフレームを受信したことを示す肯定応答です。その値は常にまだ受信されていない最初のフレームであり、N(S)の値がN(R)−1(モジュロ8またはモジュロ128)までのすべてのフレームが受信されたことを確認し、次に受信すると予想されるフレームのN(S)を示します。
N(R)は、指令の一部であっても応答の一部であっても、同じように動作します。複合局には、シーケンス番号の空間が1つしかありません。
これは、連続するIフレームごとに、8を法とする剰余または128を法とする剰余で増加します。シーケンス番号のビット数に応じて、最大7個または127個のIフレームがいつでも確認応答を待っている可能性があります。
情報フレーム(Iフレーム)は、ネットワーク層からユーザデータを転送します。さらに、データに付随してフロー制御情報とエラー制御情報も含まれています。これらの機能は、制御フィールド内のサブフィールドによって定義されます。
最下位ビット(最初に送信されるビット)によってフレームの種類が定義されます。0はIフレームを意味します。P/Fフィールドの解釈を除けば、コマンドIフレームとレスポンスIフレームに違いはありません。P/Fが0の場合、両者は完全に同等です。
監視フレーム、または「Sフレーム」は、ステーションが送信するデータがない場合など、ピギーバックが不可能または不適切な場合に、フロー制御およびエラー制御に使用されます。HDLCのSフレームには情報フィールドはありませんが、HDLCから派生したプロトコルの中には、「多重選択拒否」のために情報フィールドを使用するものもあります。
Sフレーム制御フィールドには、Sフレームであることを示す先頭の「10」が含まれます。その後に、2ビットのタイプ、ポーリング/最終ビット、および3ビットのシーケンス番号が続きます。(または、4ビットのパディングフィールドの後に7ビットのシーケンス番号が続く場合もあります。)
最初の(最下位)2ビットは、それがSフレームであることを意味します。すべてのSフレームには、前述のようにP/Fビットと受信シーケンス番号が含まれています。P/Fフィールドの解釈を除けば、コマンドSフレームとレスポンスSフレームに違いはありません。P/Fが0の場合、両者は完全に同等です。
番号なしフレーム、またはUフレームは、主にリンク管理に使用されますが、一部はユーザーデータの転送にも使用されます。接続されたデバイス間でセッション管理と制御情報を交換し、一部のUフレームにはシステム管理情報またはユーザーデータに使用される情報フィールドが含まれています。最初の2ビット(11)は、それがUフレームであることを示します。5つのタイプビット(P/Fビットの前の2ビットとP/Fビットの後の3ビット)により、32種類の異なるタイプのUフレームを作成できます。コマンドとレスポンスなど、異なるものに同じエンコーディングが使用されるケースもいくつかあります。
さまざまなモードについては、§ リンク構成で説明します。簡単に説明すると、非動作モードが2つ(初期化モードと切断モード)、動作モードが3つ(通常応答、非同期応答、非同期平衡モード)あり、それぞれ3ビットまたは7ビット(拡張)のシーケンス番号を使用します。
これらのフレームは、通常の情報伝達の一部として使用される場合があります。
HDLCには含まれていないものの、他の関連規格で定義されているUフレームがいくつか存在する。
リンク構成は、以下のいずれかに分類できます。
リンク構成は以下の3種類です。
リンク構成には、切断モードという種類もあります。これは、セカンダリ局がプライマリ局によって初期化される前、または明示的に切断されたときにセカンダリ局がとるモードです。このモードでは、セカンダリ局はモード設定コマンド以外のほぼすべてのフレームに対して「切断モード」応答を返します。このモードの目的は、プライマリ局がセカンダリ局の電源オフやその他のリセットを確実に検出できるようにすることです。
動作に必要な最小限の機器構成は以下のとおりです。
相手側のHDLCモジュールは、要求が受け入れられた場合に(UA)フレームを送信します。要求が拒否された場合は、(DM)切断モードフレームを送信します。
番号のないフレームは、下位2ビットが1であることで識別されます。P/Fフラグを使用すると、フレームタイプとして使用できるビットは5ビットになります。使用される値は32未満ですが、一部のタイプは、コマンドとして送信されるか応答として送信されるかによって意味が異なります。DISC(切断)コマンドとRD(切断要求)応答の関係は十分に明確ですが、SARMコマンドをDM応答と数値的に等しくする理由は不明です。
UI、UIH、XID、TESTフレームにはペイロードが含まれており、コマンドとしてもレスポンスとしても使用できます。SMコマンドとFRMRレスポンスにもペイロードが含まれています。
{{cite book}}: CS1メンテナンス: 場所 (リンク)