前回は,ケーブルに流れる電気信号に0と1を割り当てて,コンピュータから別のコンピュータにデータを運ぶしくみを学びました。
送り手が0と1の意味を持たせた電気信号を送り,受け取った側は信号を解釈して0か1かを判別します。ただ,これだけでは信号が意味のあるデータになりません。電気信号を受け取ってわかるのは0と1の並びだけで,受信側はいったいどこがデータの先頭かわかりません。どこから読み始めればいいのかわからなければ,送り手が送ったデータの意味を受信側で正しく復元できません。
つまり,送信側の意図したデータの始めと終わりを,受け取り側に伝えるしくみが必要なのです。こうした技術を「ブロック同期」と呼びます。今回は,代表的なブロック同期の技術であるキャラクタ同期とフレーム同期について見ていきましょう。
読み始める位置が違うと意味が変わってしまう
なぜブロック同期が必要なのでしょうか。 具体的に文字データを送る例で考えてみましょう。
ほかのすべての情報と同じように,文字の情報をやりとりするときも,文字を2進数に置き換えて送ります。あらかじめ,一つひとつの文字と2進数のコードを対応付けた表が決められており,送信側では表に従って文字データを2進数に変換して送ります。受信側は表に従って受け取った2進数を文字に復元するわけです。こうした対応表を文字コードと呼びます。
文字コードにはいろいろな種類がありますが,ここでは英数字と半角カタカナ(漢字やひらがなを含まない)の文字データを送る場合によく使われる「JISジスコード」を例にしましょう。JISコードは,155種類の英数字や半角カタカナ,記号と,34種類の制御コードを8ビット(8ケタの2進数)で表現する文字コードです。例えば大文字の「A」をJISコードで2進数に変換すると「01000001」になります。
![]() |
受信側がこの信号をちゃんと先頭から読み始めて「0101111000101110」を受け取れば,8ビットごとに区切るだけで送られてきた文字が「zt」だとわかります。ところが二つ目のビットから読み始めると受け取る信号は「1011110001011100」になり,先頭から8ビットごとに区切って逆にすると「00111101」と「00111010」になります。JISコードでは前者が「 = イコール」,後者は 「 : コロン」に対応するので,受け取り側は送られてきたデータを「zt」ではなく「=:」であると間違ってしまいます。このように読み始めの位置がずれると,データを正しく受け取れません。
こうしたことを防ぐためには,データの先頭位置やデータの切れ目を受け取り側が見つけられるようにするしくみが必要になります。一般的には,データが始まる前に目印となる情報をつけて送ります。受信側ではこの目印となる情報が到着するのを待ちかまえており,その目印の次からがデータだと理解するわけです。
![]() |
![]() |
![]() |
![]() |