
現在はLANを構築する環境が当たり前になってきました。それによりデジタル機器間でネットワークでの通信を行っているわけですが、どのような方法でネットワーク間の通信がきちんと正確に行われているか分からないと思います。ここから先はネットワークの通信の構成や方法について説明していきます。
ネットワーク通信の制御方法 【0から楽しむパソコン講座】
ネットワーク通信方法の概要となります。
現在はLANを構築する環境が当たり前になってきました。それによりデジタル機器間でネットワークでの通信を行っているわけですが、どのような方法でネットワーク間の通信がきちんと正確に行われているか分からないと思います。ここから先はネットワークの通信の構成や方法について説明していきます。
まずはネットワーク通信をするにあたり、物理的な構成などを説明していきます。
ネットワーク通信を行うには、次の機器が必要となります。
通信方式にはアナログで通信を行う場合とデジタルで通信を行う場合があります。
使用する回線がアナログ回線(普通の電話回線)の場合はアナログで通信を行います。(アナログ通信)
使用する回線がデジタル回線(ISDNや光)の場合はデジタルで通信を行います。(デジタル通信)
個人でデータ通信を行う場合は1対1での通信で済みますが、企業や通信事業者などでは一つの回線に複数の回線の信号やデータをまとめ、同時に送受信しなければなりません。これを「多重化」と言います。多重化を行う場合の方法として、周波数帯の異なる複数の信号を合成して送受信する「周波数分割多重」と通信時間を細かく分割して複数の回線が順番に利用する「時分割多重」などがあり、多重化された信号などを個々に分離して取り出すことを「多重分離」と言います。
通信を行う場合、コンピュータ内部のデータ(デジタル信号)をデータ通信用の信号に変換しなければなりません。アナログ通信の場合はデジタルからアナログに変換する必要があります。また。デジタル通信の場合、デジタルから通信用デジタルに変換しなければなりません。これを「変調」と言います。また、データ通信を受け取った端末は逆変換を行わなければなりません。これを「復調」と言います。変調速度は、1秒間に行う変調速度を示し、「baud(ボー)」という表記になります。
物理的な回線(電話回線など)には2芯式と4芯式があります。2芯式の場合、双方から同時にデータ通信をすることは出来ません。2芯式で同時にデータ通信を行った場合、データの衝突が起こり、通信ができなくなります。
2芯式の場合通信方向が1方向のみの「単方向モード」、もしくは両方向は可能だが、交互にしか出来ない「半二重モード」の2つの通信モードとなります。
一方、4芯式の場合は送信方向と受信方向を分けて通信を行うことが出来るため、両方向で同時に通信が行えます。この通信方法を「全二重モード」と言います・
前章で説明しましたが、パソコンなどの機器の内部などは複数の「線」を使用できるため一度に並行して情報ビットを伝送できます。この方式を「パラレル通信」と呼びますが、通信網の場合は先ほども説明したとおり、物理上複数の線は持っていません。そのため、データ通信を行う場合は1ビットごとに直列に順番に伝送しなければなりません。1ビットつず送る方式を「シリアル通信」と言います。
同期は双方のタイミングをとるための方法です。
通信を行う場合、外的要因(ノイズや電気干渉等)によってきちんとしたデータを送れないことが考えられます。また、各端末の処理能力によりデータの送受信速度が違う場合があります。いろいろな要因があっても正確にデータ通信が行えるように、通信にはさまざまな制御があり、それを送信側・受信側双方で確認して、現在はきちんとしたデータが送られています。
どのようにして、きちんとデータの送受信を正確に行っているか、ここから先で説明していきます。
まずは「同期」について説明します。
通信を行う際、双方の送受信のタイミングをとることを「同期」と言います。データの送信を行う場合、「ここからデータです」といった信号を付加しなければなりません。相手が先頭位置を間違うと、全然違うデータになってしまいます。また、「ここまでがデータです」という信号も送らないと、相手側も受信しっぱなしといった現象がになります。この「同期」を行うことにより、どこまでのデータが「受信」でその後「送信」が出来るかといった端末間の「合図」になります。同期の方法には次の種類があります。
1文字ことに同期を取る方法で、先頭に「スタートビット(0)」末尾に「ストップビット(1)」を付与します。
通信時間=(1文字の大きさ+スタートビット+ストップビット)×文字数÷通信速度×利用率 で求めることが出来ます
調歩同期方式は、文字単位で送るため、通信エラーが発生しても影響が小さいという利点があります。しかし、1文字ごとにスタートビットとストップビットを付加するので高速な通信は不向きとなります。
データを「ブロック」単位に分割して通信するもので、ブロックの先頭に「SYN符号」(2進数で0001 0110)を2個付加します。
ブロック間のデータが開始部分にSTX 、終了部分にETXの伝送制御のキャラクタを付加します。
キャラクタ同期方式は、調歩同期方式によりも付加する情報量が少なく高速な通信に向きますが、通信エラーが発生した場合、メッセージ単位でデータを失う欠点があります。
キャラクター同期の場合、文字を送る場合は問題ありませんが、画像や音声を送る場合、SYN符号と同じビット(2進数で0001 0110)が発生する場合があり、うまく通信できない場合があります。
フレーム同期の場合、データの前後に同期用のフラグシーケンス(2進数で0111 1110)を付けて同期を取ります。送信がない場合でもフラグシーケンスを常に送信するため、フラグシーケンスと違うビット列が表れたときから次のフラグシーケンスが表れるまでのビット列をひとつのデータとみなします。この方法だと画像データや音声データも送ることが出来ます。
誤り制御はデータの信頼性の向上のキーポイントです。
前章のように端末間の通信は「同期」をとり、送受信を行っています。受信した側は、送信されてきたデータが合っているか(壊れていないか)検査する必要があります。そのデータを検証するためには送信時にデータに「検査」の符号を設けて、受信した側はその「符号」を基にしてデータが合っているか検査します。その検査の符号をつけることを「誤り制御」と言います。
誤り制御の方法には次の検査方法があります。
パリティビットとは検査用のビットで2進数の0または1が入ります。
パリティには「偶数パリティ」と「奇数パリティ」があり、偶数パリティはデータ部分2進数ビットの1の個数が奇数個なら「1」、偶数個なら「0」とする方式となります。奇数パリティは偶数パリティの逆で、データ部分2進数ビットの1の個数が奇数個なら「0」、偶数個なら「1」となります。
パリティ検査方法には次の方法があります。
1文字ごとにパリティビットを付加します。データを7ビット単位に区切り、最後の1ビットにパリティビットを付加して8ビットにします。
なぜデータを7ビット単位に区切るかというと、JIS7単位符号を用いることにより1文字を 7 ビットで表現することができるからです。
この方法は1ビットのエラーには対応できますが2ビット以上の偶数個のエラーは検出できないという問題があります。
またエラーとなったビットの修正が出来ないという問題もあります。
垂直パリティの場合、エラーの検出に限界があるため、水平方向でもパリティチェックを設ければよりエラービットの検出が正確になります。
水平パリティの場合、今度は水平方向にパリティチェックを行い、パリティ結果を「BCC」という1文字分のデータを作成します。
この方法は垂直パリティの制度を挙げるため、垂直パリティと一緒に使用されます。(両方使用する方式を水平垂直パリティとも言います。)
水平パリティでは、文字を構成するビットで2ビット以上の誤りに対しても検出できます。また、1ビットの誤りならば訂正も可能ですが、偶数のビット数に誤りがある場合は検出が出来ないケースもあります。
群計数チェックは、水平パリティを応用したもので、「BCC」の代わりに水平方向に2ビットのチェック符号を付加する方式となります。
チェック符号は、水平方向のビット「1」の数を加算し、得た数を2進数に変換した下2桁をチェック符号にします。
この方法だと2つ以上のビットに誤りがある場合も検出できるため、より精度の高い誤り制御ができます。
パリティチェックの場合、上記でも説明した通り連続的なエラーが発生した場合は検出しにくいという欠点を持っていました。そこで、パリティチェックの検査方法の欠点を解消するために考案されたチェック方法がCRC(巡回冗長検査・巡回冗長符号)チェックです。パリティ検査は「足し算」方式を使用していましたが、CRCチェックの場合は「割り算(XOR)」を使用します。CRCチェックは生成多項式と呼ばれる方法を使用しますが、この多項式には標準規格がありません。生成多項式の方法は使用する通信手順やアプリケーションによって異なります。現在使用されている生成多項式は次のようになります。
名称 | 用途 | 多項式 | 2進数(標準時) | 標準 / 反転 (相反多項式の反転) |
---|---|---|---|---|
CRC-1 | 各種ハードウェア用パリティビット | X+1 | 0011 | 0x1 / 0x1 (0x1) |
CRC-4-ITU | ITU G.704, p. 12 | X4+X+1 | 0001 0011 | 0x3 / 0xC (0x9) |
CRC-5-ITU | ITU G.704, p. 9 | X5+X4+X2+1 | 0011 0011 | 0x15 / 0x15 (0x1A) |
CRC-5-USB | USBトークンパケット | X5+X2+1 | 0010 0101 | 0x05 / 0x14 (0x12) |
CRC-6-ITU | ITU G.704, p. 3 | X6+X+1 | 0100 0011 | 0x03 / 0x30 (0x21) |
CRC-7 | 通信系、MMC、SD | X7+X3+1 | 1000 1001 | 0x09 / 0x48 (0x44) |
CRC-8-ATM | ATM Header Error Correction | X8+X2+X+1 | 0001 0000 0111 | 0x07 / 0xE0 (0x83) |
CRC-8-CCITT | 1-Wire バス | X8+X7+X3+X2+1 | 0001 1000 1011 | 0x8D / 0xB1 (0xC6) |
CRC-8-Dallas /Maxim |
1-Wire バス | X8+X5+X4+1 | 0001 0011 0001 | 0x31 / 0x8C (0x98) |
CRC-8 | X8+X7+X6+X4+X2+1 | 0001 1101 0101 | 0xD5 / 0xAB (0xEA [6]) | |
CRC-8-SAE J1850 |
X8+X4+X3+X2+1 | 0001 0001 1101 | 0x1D / 0xB8 (0x8E) | |
CRC-10 | X10+X9+X5+X4+X+1 | 0110 0011 0011 | 0x233 / 0x331 (0x319) | |
CRC-11 | FlexRay | X11+X9+X8+X7+X2+1 | 1011 1000 0101 | 0x385 / 0x50E (0x5C2) |
CRC-12 | 通信系 | X12+X11+X3+X2+1 | 0001 1000 0000 1101 | 0x80F / 0xF01 (0xC07) |
CRC-15-CAN | X15+X14+X10+X8+X7+X4+X3+1 | 1100 0101 1001 1001 | 0x4599 / 0x4CD1 (0x62CC) | |
CRC-16- Fletcher |
CRCではない。フレッチャーのチェックサム | Adler-32 A & B CRC で使用 | ||
CRC-16-CCITT | X.25、V.41、CDMA、Bluetooth、XMODEM、HDLC、PPP、IrDA、BACnet; CRC-CCITT | X16+X12+X5+1 | 0001 0001 0000 0010 0001 | 0x1021 / 0x8408 (0x8810 [6]) |
CRC-16-IBM | SDLC、USB、その他CRC-16 | X16+X15+X2+1 | 0001 1000 0000 0000 0101 | 0x8005 / 0xA001 (0xC002) |
CRC-24- Radix-64 |
FlexRay | X24+X23+X18+X17 +X14+X11+X10+X7 +X6+X5+X4+X3+X+1 |
0001 1000 0110 0100 1100 1111 1011 | 0x864CFB / 0xDF3261 (0xC3267D) |
CRC-30 | CDMA | X30+X29+X21+X20 +X15+X13+X12+ X11+X8+X7+X6+ X2+X+1 |
0110 0000 0011 0000 1011 1001 1100 0111 | 0x2030B9C7 / 0x38E74301 (0x30185CE3) |
CRC-32 | X32+X26+X23+X22 +X16+X12+X11+X10 +X8+X7+X5+X4+X2 +X+1 |
0001 0000 0100 1100 0001 0001 1101 1011 0111 | 0x04C11DB7 / 0xEDB88320 (0x82608EDB [8]) | |
CRC-32C (Castagnoli) | iSCSI, Btrfs | X32+X28+X27+X26 +X25+X23+X22+X20 +X19+X18+X14+X13 +X11+X10+X9+X8 +X6+1 |
0001 0001 1110 1101 1100 0110 1111 0100 0001 | 0x1EDC6F41 / 0x82F63B78 (0x8F6E37A0 [8]) |
CRC-32K (Koopman) | X32+X30+X29+X28 +X26+X20+X19+X17 +X16+X15+X11+X10 +X7+X6+X4+X2+X+1 |
0001 0111 0100 0001 1011 1000 1100 1101 0111 | 0x741B8CD7 / 0xEB31D82E (0xBA0DC66B [8]) | |
CRC-64-ISO | HDLC ? ISO 3309 | X64+X4+X3+X+1 | 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 1011 | 0x000000000000001B / 0xD800000000000000 (0x800000000000000D) |
CRC-64- ECMA-182 |
ECMA-182 p.63 | X64+X62+X57+ X55+X54+X53+X52 +X47+X46+X45+X40 +X39+X38+X37+X35 +X33+X29+X27+X24 +X23+X22+X21+X19 +X17+X13+X12+X10 +X9+X7+X4+X+1 |
00001 0100 0010 1111 0000 1110 0001 1110 1010 0010 1001 1110 1010 0011 0110 1001 0011 | 0x42F0E1EBA9EA3693 / 0xC96C5795D7870F42 (0xA17870F5D4F51B49 |
一般的には16ビットである多項式「CRC-16」か、32ビットである多項式「CRC32」のCRC値が使われます。
例えば 0110 0001 1111 0011 のCRC-8を使用した場合 CRC-8は 0001 1101 0101です。CRC-8の場合は2進数8桁のチェック用のCRCを持ちます。
下の図のようにXORで計算していくと
CRCは 0111 1101となります。
この方法は、データが連続的に誤っている場合(バースト誤り)でも検出できます。通常は、ビット列を多項式と見なして、「生成多項式」とよばれる定数で割った余りを求め、余りの数が符号となります。
CRCチェックは通信のチェックの他、圧縮・解凍ソフトの誤り検出など幅広く使われています。
通信手順は機器が異なっていても通信できるための手順です。
データ通信を行う場合、双方の間で確実にデータ通信を行えるように、ひとつの「手順」を設けて通信しなければなりません。
データ通信の基本的な通信手順は
1.回線の接続
2.データリンク確立
3.データ通信
4.データリンク開放
5.回線切断
となります。
これらの制御内容を1つのプロコル体系として定義したものを「通信制御手順」と呼びます。この「通信制御手順」には、さらに次の手順があります。
双方間で取り決めを行わないでデータ通信を行う方式です。パソコン間の通信に使用されています。受信する側の状態を確認しないで送る状態になります。
また、データが正常に送信されたかどうかを調べることはできないので信頼性は低くなります。
調歩同期方式やTTY手順などが無手順の代表となり、調歩同期式はパソコン通信で一般的に用いられています。
ベーシック手順では「キャラクタ同期」で「水平垂直パリティ」を使用しています。
ベーシック手順は次の方法があります。
中央に「制御局」を設け、この制御局が通信を仕切る方式です。制御局につながっている局を「従属局」と呼びますが、制御局が順番に従属局に通信を行うかどうか確認していきます。この動作を「ポーリング」と呼びます。
ポーリングにより、通信を行いたい従属局は「ACK(肯定)」の信号を制御局に返します。
「ACK(肯定)」を受け取った制御局は従属局にセレクト(データ転送を行う準備)を行って、データ通信を行う方式となります。
制御局」を設けないで、すべて対等な立場での接続となります。端末は通信の要求が発生した場合は「ACK(肯定)」を出し、成功した場合は自局が「主局」となり、相手が「従局」となって通信を行います。この接続方法はいわば「早いもの勝ち」となります。
HDLC手順(ハイレベルデータリンク制御手順)は、文字以外の任意のビットパターンが送ることが出来、厳密な誤り制御が行うことが出来ます。
HDLC手順は上記の手順と比べ、信頼性が高いのが特徴です。また、効率良くデータを送ることができ、高速通信に適しています。
HDLCではデータを送受信する際に通信拠点がその役割を果たしております。通信拠点のことを「局」と呼びますが、局の役割には3つあります。
1次局(親局) データリンク(通信経路の確保)を行い、通信時のエラー検出などの制御を行います。
2次局(子局) 1次局からの通信手順の命令に沿って動作します。
複合局 1次局,2次局を兼ね備える局です。
HDLC転送の場合、1次局から2次局に送信する場合の情報を「コマンド」と呼び、2次局から1次局に送信する場合の情報を「レスポンス」と呼びます。複合局は「コマンド」「レスポンス」の両方を送受信します。1次局で「コマンド」を送った場合、2次局は応答したということで「レスポンス」を送り、タイミングを取っているわけです。
コマンドとレスポンスはすべて「フレーム」という単位で送信を行います。フレームの構成は次の通りとなります。