伝送技術とは?誤り制御・同期制御・HDLCを基礎から理解しよう
はじめに
ネットワークでは、電気信号や光などを利用してデータを伝送します。
しかし、通信中にノイズなどの影響を受けると、
送信
10110010
↓ ノイズ
受信
10100010
のように、データが変化してしまうことがあります。
また、受信側は、
どこからどこまでが1つのデータなのか
を判断する必要もあります。
そこで利用されるのが、
誤り制御
→ データが壊れていないか確認する
同期制御
→ データの開始・終了などを判断する
伝送制御
→ 通信を適切に制御する
といった技術です。
1. 誤り制御とは
誤り制御は、
通信中にデータが壊れていないか検出したり、必要に応じて訂正したりする仕組み
です。
代表的な方式には、
パリティチェック
CRC
ハミング符号
水平垂直パリティチェック
などがあります。
方式によって、
誤りを見つけられるだけなのか、誤りを直すこともできるのか
が異なります。
2. パリティチェック
**パリティチェック(Parity Check)**は、
データにパリティビットを追加して、ビットの誤りを検出する方式
です。
代表的なのが、
- 偶数パリティ
- 奇数パリティ
です。
3. 偶数パリティ
偶数パリティでは、
1の個数が偶数になるようにパリティビットを追加
します。
例えば、
データ
1011001
では「1」が4個なので、すでに偶数です。
そのため、
1011001 + 0
とします。
一方、
1110001
では「1」が4個なので、同じくパリティビットは0です。
「1」が奇数個なら、パリティビットを1にして全体を偶数個にします。
受信側でも1の数を確認することで、誤りを検出できます。
4. 奇数パリティ
奇数パリティは反対に、
1の個数が奇数になるようにパリティビットを追加
します。
考え方は偶数パリティと同じです。
偶数パリティ
→ 1の数を偶数にする
奇数パリティ
→ 1の数を奇数にする
と覚えておきましょう。
5. パリティチェックの弱点
パリティチェックはシンプルですが、万能ではありません。
例えば偶数パリティでは、伝送中に2ビットが同時に反転すると、
1の個数
→ 偶数のまま
になる場合があります。
すると、誤りが発生しているのに検出できません。
また、通常の単純なパリティチェックでは、
どのビットが間違っているのか
までは特定できません。
つまり、
単純なパリティチェック
→ 主に誤りを検出するための仕組み
です。
6. 水平垂直パリティチェック
パリティチェックを縦と横の両方向に行う方式が、
水平垂直パリティチェック
です。
二次元パリティとも呼ばれます。
例えばデータを表のように並べ、
垂直パリティ
↓
1 0 1 1 | P
0 1 1 0 | P
1 1 0 0 | P
---------+
P P P P
↑
水平パリティ
のように、行と列の両方へパリティを付加します。
7. 水平垂直パリティのメリット
1ビットの誤りが発生した場合、
エラーになった行
+
エラーになった列
を確認できます。
その交点を見ることで、
どのビットで誤りが発生したのか
を特定できます。
そのため、単純なパリティチェックよりも強力な誤り制御ができます。
8. CRC
**CRC(Cyclic Redundancy Check:巡回冗長検査)**は、
データを特定の規則で計算し、その結果を利用して誤りを検出する方式
です。
送信側では、データを生成多項式と呼ばれる値を基に計算し、その余りをデータに付加します。
データ
↓
生成多項式を使って計算
↓
余りを求める
↓
データ + 余り
↓
送信
受信側でも同様の計算を行い、誤りがないか確認します。
9. CRCの特徴
CRCは単純なパリティチェックよりも強力で、
連続して複数のビットが壊れるバースト誤り
なども高い確率で検出できます。
そのため、
Ethernet
などでも利用されています。
CRCは基本的に、
誤りを見つける
→ ○
誤ったビットを直接直す
→ ×
という誤り検出の技術です。
10. ハミング符号
**ハミング符号(Hamming Code)**は、
データに複数の検査ビットを追加し、誤りの検出だけでなく訂正も可能にする方式
です。
代表的なハミング符号では、
1ビットの誤りを訂正できる
という特徴があります。
11. ハミング符号の考え方
単純なパリティチェックでは、
「どこかがおかしい」
までは分かっても、
「どこがおかしい?」
を特定できません。
ハミング符号では複数の検査ビットを利用することで、
誤りあり
↓
何番目のビット?
↓
位置を特定
↓
反転して訂正
という処理ができます。
12. 誤り制御を比較する
| 方式 | 主な特徴 |
|---|---|
| パリティチェック | シンプルな誤り検出 |
| 水平垂直パリティ | 行・列でチェック |
| CRC | 高精度な誤り検出 |
| ハミング符号 | 誤りの検出・訂正が可能 |
ざっくり覚えるなら、
パリティ
→ 1の数でチェック
CRC
→ 計算してチェック
ハミング符号
→ 間違った位置を特定して訂正
です。
13. 同期制御とは
データ通信では、受信側が、
どこからどこまでがデータなのか
を正しく判断する必要があります。
そのために利用されるのが、
同期制御
です。
代表的な方式として、
キャラクタ同期方式
フラグ同期方式
調歩同期方式
があります。
14. キャラクタ同期方式
キャラクタ同期方式は、
特定の制御文字を利用してデータの開始や終了などを判断する方式
です。
例えば、
SYN
↓
同期を取る
STX
↓
データ開始
ETX
↓
データ終了
といった制御文字を利用します。
SYN | STX | データ | ETX
というイメージです。
文字単位で通信を制御する方式なので、
文字同期方式
とも呼ばれます。
15. フラグ同期方式
フラグ同期方式は、
特定のビット列をフラグとして使用し、フレームの開始と終了を判断する方式
です。
代表的なフラグパターンとして、
01111110
が利用されます。
01111110
↓
開始
データ
01111110
↓
終了
という形です。
後ほど紹介するHDLCでも利用されます。
16. ビットスタッフィング
では、データの中にフラグと同じようなビット列が登場したらどうなるでしょうか。
受信側が、
「ここでフレームが終わった!」
と勘違いする可能性があります。
そこで利用されるのが、
ビットスタッフィング
です。
HDLCではデータ中に1が5個連続した場合、その後に0を挿入します。
データ中
11111
↓
111110
受信側は挿入された0を取り除きます。
これによって、データ中のビット列をフラグと誤認することを防ぎます。
17. 調歩同期方式
調歩同期方式は、
1文字ごとにスタートビットとストップビットを付加して同期する方式
です。
非同期方式とも呼ばれます。
スタート
↓
┌─┬────────┬─┐
│S│ データ │P│
└─┴────────┴─┘
↑ ↑
開始 ストップ
概念的には、
スタートビット
↓
データ
↓
必要に応じてパリティビット
↓
ストップビット
という構成になります。
18. 調歩同期方式の特徴
調歩同期方式では、文字ごとにスタートビットとストップビットを付けます。
そのため、
文字と文字の間隔が一定でなくても通信できる
という特徴があります。
一方で、文字ごとに制御用ビットが必要になるため、その分だけ伝送効率は低下します。
19. 3つの同期方式を整理する
キャラクタ同期方式
→ 制御文字で同期
フラグ同期方式
→ 特定のビット列で同期
調歩同期方式
→ スタート・ストップビットで同期
ここは名前と仕組みを対応させて覚えるのがポイントです。
20. HDLC
**HDLC(High-Level Data Link Control)**は、
ビット単位で通信を制御するデータリンク層の伝送制御プロトコル
です。
HDLCでは、先ほど登場した、
フラグ同期方式
が利用されます。
基本的なフレーム構成は、
┌────┬────┬────┬──────┬────┬────┐
│Flag│Address│Control│ Information │FCS │Flag│
└────┴────┴────┴──────┴────┴────┘
となります。
21. HDLCのフレーム
HDLCフレームの主な項目を見てみましょう。
| 項目 | 役割 |
|---|---|
| Flag | フレームの開始・終了 |
| Address | 相手を識別する情報 |
| Control | 通信制御の情報 |
| Information | 送信するデータ |
| FCS | フレームの誤り検出 |
特に、
Flag
→ フレームの境界
FCS
→ 誤り検出
を押さえておきましょう。
22. FCS
**FCS(Frame Check Sequence)**は、
フレームに誤りが発生していないか確認するための情報
です。
送信側で計算した値をFCSとしてフレームへ付加します。
送信データ
↓
CRCなどで計算
↓
FCSを付加
↓
送信
受信側でも計算を行い、受信したフレームに誤りがないか確認します。
23. CRCとFCSの違い
ここは混同しやすいポイントです。
CRCとFCSは同じ意味ではありません。
簡単に整理すると、
CRC
→ 誤りを検出するための計算方式
FCS
→ 誤り検出のためにフレームへ付加される検査情報
です。
例えばEthernetでも、CRCによる計算結果を利用したFCSがフレーム末尾に付加されます。
つまり、
CRCで計算して、誤り検出に使う値をFCSとして持たせる
と考えると分かりやすいです。
24. 伝送技術を全体で整理する
今回の内容を3つに分けて整理しましょう。
① 誤り制御
パリティチェック
→ 1の数で誤りを検出
水平垂直パリティ
→ 行と列でチェック
CRC
→ 高精度な誤り検出
ハミング符号
→ 誤りの検出・訂正
② 同期制御
キャラクタ同期
→ 制御文字
フラグ同期
→ 特定のビット列
調歩同期
→ スタート・ストップビット
③ 伝送制御
HDLC
→ ビット単位の伝送制御
Flag
→ フレームの開始・終了
FCS
→ フレームの誤り検出
それぞれ、
何を制御するための技術なのか
を意識すると整理しやすくなります。
25. まとめ
この記事で覚えること
- 誤り制御は伝送中に発生したデータの誤りを検出・訂正する
- パリティチェックは1の個数を利用して誤りを検出する
- 水平垂直パリティでは行と列の両方をチェックする
- CRCは生成多項式を利用して高精度に誤りを検出する
- ハミング符号では代表的に1ビット誤りを訂正できる
- キャラクタ同期方式は制御文字を利用する
- フラグ同期方式は特定のビット列をフレームの境界として利用する
- 調歩同期方式は文字ごとにスタートビットとストップビットを利用する
- HDLCはビット単位で通信を制御するデータリンク層のプロトコル
- HDLCではフラグ同期方式を利用する
- FCSはフレームの誤りを検出するための検査情報
- CRCは計算方式、FCSはフレームに付加される検査情報
🍯 はちみつメモ
伝送技術は「壊れてない?」「どこからどこまで?」「どうやって送る?」の3つに分けると分かりやすい。壊れていないか確認するのが誤り制御、データの区切りを合わせるのが同期制御、通信そのものを制御する代表例がHDLC。