• ベストアンサー

CRCのアルゴリズムって、どんな計算するんですか?

こんにちはお世話になります。 私はネットワークに興味があるオジサンです。 先日、データリンク層のプロトコル群を勉強していたとき、誤り訂正でCRCが出てきました。誤り訂正ではパリティーチェックやチェックサム等は聞き覚えがありましたが、CRCは始めて見たので興味を持ち少し調べてみようと思いました。 それが間違いの元でした。 インターネットでCRCの構造を詳しく解説するサイトが少なく、その解説は難しすぎて手におえません。 数学にはめっぽう弱い私には、多項式同士の加減乗除算などは頭痛の肥やしにしかなりません。 今ではCRCが気になって勉強に集中できない状態です。 そこで、表題にもあるCRCのアルゴリズムを、何方か分かり易く教えてくださいませんか。もしくは、CRCのアルゴリズムを簡単に解説している書籍をご存知でしたら教えてください。 カテゴリー(本来は数学系?)が違うかもしれませんが、何卒よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

偶数パリティについておさらいすると、1 となるビットの個数が偶 数になるように、検査ビットを定めるというものですよね?で、検 査側では、1 の個数を数えて奇数だとエラーと判断するわけです。 実は、この偶数パリティというチェックのしかたは、CRC の一種な んです。CRC では、ある特定の生成多項式を使いますが、CRC の生 成多項式として x + 1 を使ったものが偶数パリティです。 多項式の加減乗除で頭痛ということなら、ちょっと説明が厳しいの ですが、2進数の加減乗除はできるでしょうか?これがだいじょう ぶなら、1+1=0(つまり、0-1=1)という世界での2進数の加減乗除 を考えるということでも同じです。 この場合、x+1 という多項式は、11 と考えます。(xのi乗の係数 を第iビットの値とみなす) 例えば、10110 というデータに対して、11 という生成多項式で CRC の検査ビットを求めるには、生成多項式の桁数-1=1ビット 分データを左にシフトして、101100 を得ます。この値を、上の特 殊な2進数の世界で、生成多項式の 11 で割ります。そうすると、 商として 11011、余りとして 1 が得られます。試しにやってみて ください。この余りを、101100 から引いて(特殊な2進数の世界で は足すのと同じ)やると、101101 が出ます。これが送るべき符号 ということになります。実際、1の個数は偶数ですので、付け足し たビットが偶数パリティとなっていることがわかります。 余りの分を引いたわけですから、このデータは 11 で割り切れるは ずですので、検査側では 11 で割って、余りが 0 であることを確 認すればいいわけです。 この生成多項式の選び方で、検査の能力が変わってきます。やみく もに選んだら、検査能力がまったくなくなります。通常の CRC は、 それを考慮してうまく多項式を作ってあるというだけのことです。 なぜ 11 なら偶数パリティと同じなのかとか、生成多項式をどう選 べばいいかとかについては、符号理論の勉強が必要です。前者はそ れほど難しくはないですが。

iyokiti
質問者

お礼

丁寧な回答ありがとうございます。 パリティティーチェックで1ビットだったパリティーが、CRCでは多項式で多ビットに置き換えたのですね。理解しました(^_^;)。 ご指導の通り計算してみました。最初は「特殊な二進数の世界」に戸惑ってしまいましたが、めでたく計算できました。 ビット列を高次元に表すことは、アドレスからデータ範囲までチェックするために必要だったんですね(ホンマかいな)、と勝手に納得しています。 おっしゃる通り符号理論の勉強が必要なようです(頭が痛い)。 punchan_jpさんの回答で多項式の符号化計算まで理解(ほんの少しですが)できるとは思っていませんでした。とても得した気分です。 punchan_jpさんには貴重な時間を割いていただき、大変感謝しております。 これからもよろしくお願い申し上げます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

凄い難しい事ですね。CRCの計算方法だけでも結構な厚さの本が出来てしまうので、ここでは、簡潔に書きます。 ----ここから  CRCは、データ列を高次の多項式と考えて、その多項式をあらかじめ定められた生成多項式で割る。その余りをBCCとしてデータの後ろに付加して送信する。  また、受信側では同じ生成多項式で割り算を行い、余りがなけば転送データに誤りがないと判断する。 -----  こんな感じでですが....どうでしょうか?  もし勉強に集中出来ないって事なら、CRCはチェックサムのやり方(計算方法)って覚えると良いでしょう。  具体的な計算方法が判らなくても、何をする物なのか理解出来ればそれほど大きな問題になるとは思えません。 詳しく知りたい場合には、通信プロトコル関係の書籍を呼んで下さい。説明が詳しく書かれています。

iyokiti
質問者

お礼

早速の回答ありがとうございます。 要点を易しく解説していただき、ウニ状態の頭の中もようやく整理できました。 CRCはエラーチェックだと軽くCRCを流したかったのですが、データリンク層に使われているからには何か理由があるのかと思い込み、調べ始めたのが運のつきでした。オヤジの冷や水、数学はもうこりごりです。 mnabeさんには当質問で貴重な時間を割いていただき、大変感謝しております。 これからもよろしくお願い申し上げます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CRCアルゴリズムのZ/2Z上の多項式の係数列とは?

    こんにちはお世話になります。 私はネットワークに興味があるオジサンです。 先日、データリンク層のプロトコル群を勉強していたとき、誤り訂正でCRCが出てきました。 CRC(Cyclic Redundancy Cheak)の解説には、 >ビット列をZ/2Z上の多項式の係数列とみなし, もとのデータにチェックビットを 継ぎ足して必ず特定の生成多項式で割り切れるデータのみを送るようにする. > とありました。 上記の「Z/2Z上」とは何を指しているのでしょうか。 数学が大の苦手ですので優しく解説していただければ幸いです。 何卒よろしくお願い申し上げます。

  • 水平垂直パリティチェックとCRC方式について

    質問させてください。 基本情報処理試験において、誤り訂正方式の一つとして ・水平垂直パリティチェック ・CRC方式 というものがあります。 水平垂直パリティチェックは、ビット列を縦横に確認してデータに誤りがないか確認する方法、 CRC方式は、生成多項式という特別な式でデータに誤りがないか確認する方法 ということはわかるのですが、 それぞれのメリットデメリットは何でしょうか? 例えば、CRC方式では水平垂直パリティチェックではできない、2ビット以上の誤り訂正ができたりするのでしょうか? どなたか回答をお願いします。

  • 技術者試験などに「メモリの誤り制御方式」と言って

    技術者試験などに「メモリの誤り制御方式」と言って ハミング符号 奇数パリティ 偶数パリティ 水平パリティ チェックサム CRC などありますが、これらは実際にどのような場面で有効活用されている のでしょうか。 「主記憶」と「HDD」の間でデータの送受信をする時に、情報に誤りがないか どうかを検出したり訂正するという解釈なのでしょうか。 以上、よろしくお願いします。

  • 基本情報を勉強中でどなたかご教授お願いします。

    基本情報を勉強中でどなたかご教授お願いします。 よく出てくる誤り検出の方法に、パリティ(垂直、水平)、チェックサム、ハミング符号、CRCなどがありますが実際に、どのような環境でどの誤り制御方法が採用されるのですか?

  • CRC方式(誤り制御方式)について

    CRC方式に関する問題なのですが、通信系の資格の取得しようと勉強しているのですが、誤り制御方式のところの問題をやっていましたら、答えだけで解説がなく意味がわからなく困っています。わかります方、よろしくお願い致します。 生成多項式をG(X)=X(6)+X(4)+X(2)+1とする。 (1)伝送したいデータがD=X(5)+Xのとき、送信データS=D´+CRCを多項式で表しなさい。 (2)受信データがX(14)+X(12)+X(10)+1のとき、この受信データに誤りが含まれていないことを示しなさい。次に、伝送したいデータDを多項式で表しなさい。 ※X(5)などの()内の数字はXの5条(ジョウ)です。

  • BCH誤り訂正

    BCH誤り訂正なんですが 受信した符号を多項式で割ってあまりから誤りビットがでるのですが 訂正能力を超えた場合はどうでしょうか? 例えば2ビットまで訂正できるBCHで3ビット誤った符号を受信したときは 全く異なる訂正をしてしまうと思うのですが 何か手はあるのでしょうか? 普通はBCHのあとにCRCを行うのですがBCH内で演算して誤りビット数は出せるのでしょうか?

  • パリティチェックについて

    http://mt-net.vis.ne.jp/ADFE_mail/0139.htm このURLでは 解答がアになってるんですが、 イじゃないのですか? 垂直パリティと水平パリティを合わせることで、 1ビットの誤りを訂正でき、 2ビットの誤りを検出できる と私の持ってる資格の大原の教科書に書いてあるのですが、 このURLの一番下の方のイの解説の所には 水平パリティチェック方式と組み合わせることで、論理的には、1ビットの訂正は行えるようになります。ただし、その場合でも、2ビットのデータ誤り検出はできません。 とあります。 どちらが正しいのでしょうか?

  • 基本情報処理技術者試験問題が解けません・・・

    平成11年度春の午前問題の問44. http://www2.osk.3web.ne.jp/~a0mediac/B99s/b99s.htm 上にリンクがあります。 解説がついているのですが、私の頭では、解説さえ理解できないでいます・・・・。 この問題では、垂直パリティの1が1個なのと、水平パリティの1が3個なので、奇数パリティが使われているということですよね。 奇数パリティのときは、偶数個の誤りが生じていると誤りをチェックできる。偶数パリティのときは、奇数個の誤りをチェックできる。 だから、回答でウはありえない。 答えは、ア、イ、またはエのどちらかになるわけですが、答えがイというのが理解できないでいます。 解説には、「水平パリティだけの場合1ビットの誤り検出しかできない。」「水平・垂直パリティを両方組み合わせると1ビットの誤り訂正ができます。」とあるのですが、私の使っている参考書には、偶数個のビットが化けたらチェックできないのが、水平パリティチェックの特徴だとしています。 また、水平垂直パリティチェック方式の特徴が、偶数この列で、同じビット位置の偶数個のビット化けが生じたときにはチェックできない、と参考書にはあります。 私としては、4行4列なのだから、3ビットの誤りチェックもできるのでは?と思ってしまうのです。 なぜ1ビットなのでしょうか? どなたか教えてください。 よろしくお願いいたします。

  • 誤り制御について教えてください!

    情報処理試験の勉強をしているのですが、データ伝送の誤り制御(パリティチェック、CRCなど)は実際には、具体的にどのように、どんな技術と併せて使われるのでしょうか? 個人的な考えでは同期方式などと組み合わせて使い、同期フレーム等ごとに誤りをチェックするのでは、と考えているのですが、どの参考書やサイトでも、基本的な用語解説以上のことは書いてないので、中途半端な知識のままで腑に落ちません。 大事な分野だと思うのでしっかりした知識を身につけたいです。 お判りになられる方、また詳しい解説があるサイトがありましたら教えてください。よろしくお願いします。

  • データ伝送の誤り訂正の技術について

    誤り訂正の技術の1つであるCRC演算回路について勉強しているのですが。その中で、Ex-ORを使った、モジュロ2除算というものが出てきたのですが、どうもいまいち納得できないので、教えて下さい。どうしてEx-ORを用いることによって、余りのを出す事が出来るのですか?どこまで(何回)演算すれば、その余りをCRCコード(伝送時に誤り訂正として付属するもの)として利用できるのですか?私はかなりの初心者なので、出来れば詳しく教えて下さい。宜しくお願いします。

このQ&Aのポイント
  • 雑所得の税金を計算する方法は、課税所得額に税率をかけることです。
  • 課税所得額に対して税率5%を適用し、所得税を計算します。
  • また、所得税を払わなかった場合の重加算税は、所得税に40%を乗じることで求めることができます。
回答を見る