「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
様々な通信プロトコルの基礎となっているHDLC(High-Level Data Link Control)というプロトコルがあります。
弊社が開発協力させていただいている案件で見ると、新規システムでHDLCを採用することは少なくなっていますが、古いシステムとの接続など、多くの需要があると聞いています。
今回は、歴史があるHDLCプロトコルについて取り上げて紹介します。
HDLCは1977年にISO(International Organization for Standardization:国際標準化機構)によって標準化されたプロトコルです。
標準化されてから30年以上が経過し、様々なプロトコルの手本となっています。
以降では、HDLCの内容について説明します。
HDLC通信には、以下の3つの動作モードがあります。
通常の通信プロトコルでもマスタ(1次局)とスレーブ(2次局)を決めて通信するのか、全ての端末がマスタになるのか事前に検討しますが、HDLCでもモードを準備しており、利用するモードを事前に取り決めします。
以下にHDLCの基本的なフレーム構成を示します。
フレーム構成 | フラグシーケンス | アドレスフィールド | コントロールフィールド | 情報フィールド | FCSフィールド | フラグシーケンス |
フレーム内容 | B'011111110 | 8ビット | 8ビット | 任意データ長 | 16ビット or 32ビット | B'011111110 |
表1. HDLCフレーム構成
HDLCのフレームはフラグシーケンスと呼ばれる固定のビットパターン(B’01111110)に挟まれて構成されています。
このフラグシーケンスは、フレームの開始と終了の判断に利用される重要な役目があります。
このため、フレームの途中にフラグシーケンスと同じビットパターンが存在すると、フレームの開始や終了を誤認識してしまいます。
この回避方法として、ゼロインサートという手法が利用されています。
ゼロインサートとは、’1’が連続で5ビット以上連続した場合は6ビット目に0を強制挿入することでフラグシーケンスと同じビットパターンが出来ないようにしています。
このゼロインサートでは、1ビットを強制的に追加するため、1バイト(8ビット)のデータを送信する場合でも、実際に送信されるビット数は8ビット以上になることもあります。
(受信側も8ビット以上のデータを受信出来なければなりません)
一方、パソコンやマイコンで利用出来る通信は、1バイト(8ビット)単位でデータを扱うことが前提とされているため、8ビット以上のデータ長となるゼロインサートが出来ません。
このため、HDLCボードのような専用のハードウェアと組み合わせてHDLCを実現します。
アドレスフィールドは、「誰に送りたいのか?」、「誰から応答があったのか?」という確認に利用します。
コマンドを送信する場合は、送信先のアドレスを設定します。
レスポンスを送信する場合は、送信元のアドレスを設定します。
コントロールフィールドは、フレームの種類と、そのフレーム制御方法について表します。
以下にコントロールフィールドのビットの意味を示します。
フォーマットの種類 | コントロールフィールドのビット | |||||||
---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Iフォーマット | 0 | N(S) | P/F | N(R) | ||||
Sフォーマット | 1 | 0 | S | S | P/F | N(R) | ||
Uフォーマット | 1 | 1 | M | M | P/F | M | M | M |
N(S):送信シーケンスNo.
N(R):受信シーケンスNo.
P/F:Poll/Final bit
M:Modifier function bit
S:Supervisory function bit
表2. コントロールフィールドの内容
一般的にはIフォーマット(Information format)でデータを通知し、受信可能状態などSフォーマット(Supervisory format)で状態通知を行います。
Uフォーマット(Unnumbered format)は、通信回線の論理的な接続/切断など通信制御に関するコマンドとして利用します。
HDLCは、Iフォーマットで送信する際にP/Fビットの設定で、レスポンスの有無を2次局へ通知することが出来ます。
このため、レスポンスを待たずに連続送信し、最後のデータを送信する際にP/Fビットによりレスポンスを要求し全ての正常に送信出来たことを確認します。
この動作により、HDLC通信は効率良く送信出来るプロトコルと言えます。
情報フィールドには、送信したい任意のデータをセットします。
CRC(Cyclic Redundancy Check)チェックの結果を設定します。
対象はフレームのアドレスフィールド、コントロールフィールド、情報フィールドです。
HDLC通信では、誤り制御能力が高いと言われるCRCを利用し、高信頼性の通信を実現しています。
HDLCを利用する場合は、「2-2-1. フラグシーケンス」でも触れていますがソフトウェアだけで実現するのが難しい部分があります。
このため、パソコンでHDLC通信を実現する場合は、「HDLCボード」や「Ethernet−HDLC変換器」のような機器を利用して実現しています。
図1. 市販のHDLCボード
組み込みシステムで実現する場合は、基板上にHDLC用のLSIを実装して実現します。
以前はHDLC用LSIがありましたが、最近は購入が出来ないためFPGAを利用して対応することが多いようです。
HDLCの概要を簡単に説明しましたが、ご理解いただけたでしょうか?
HDLCの特徴をまとめると以下のようになります。
これらの特徴を実現し、多くの人が利用できるように規格化するため、たくさんの人の英知が詰め込まれています。
特にHDLCは、PPP(Point to Point protocol)やISDN(Integrated Services Digital Network)のレイヤ2プロトコルなど様々な通信プロトコルの基礎になっているため、とても勉強になります。
HDLCを新規のシステム開発で使うことは少ないと思いますが、多くの通信技術の基礎となっている部分でもあるため、この機会に興味を持って貰えればと思います。
(T.O.)
関連ページへのリンク
関連するソフテックだより