• 締切済み

Ethernet Frame CRC演算について

はじめまして。 質問なのですが、イーサネットフレームは最後に 4バイトのCRC演算結果が付加されて伝達されますが、 そのCRC演算の方法がわかりません。 正確には、こうではないか?と試して演算を行って いるのですが、正しいのかどうかがわかりません。 そこで、 *正確なCRC演算結果(元のフレームも)    もしくは、 *正しい演算方法を示したWEBページへのポインタなど。 知っておられる方、教えて下さい。 #32bitのCRCを生成する方法。。。 #RFC1662のFCSの生成方とは、違うんですよね?

みんなの回答

  • igmp
  • ベストアンサー率28% (156/546)
回答No.1

はじめまして、maruyuさん。 実は昨日この質問を見たのですが、きっと専門家の方が即回答するだろうと思って 回答を控えていた者です。まだ回答ゼロのようですので登場しました。 最近私もある質問で10日間位そうだったんですが、回答ゼロって悲しいですよね。 スミマセン、前置きが長くなりました。 まず、rfc1662を見てみましたが、CRCは一般的なものですから、"C.3"の生成方で 問題ないかと思います。 また、例として参考URLに行っていただき、"CRC"で検索すればフリーウェアの CRC計算プログラムがソースコード付きでダウンロード出来るかと思います。

参考URL:
http://www.vector.co.jp/

関連するQ&A

  • CRC32のデータ送りの方向について

     送信されてくるethernetフレームを受信しながらCRC32を計算し、 FCSチェックを実施するハード(VHDLによる)を作成しようとしています。  ハードの構成は、下記URL(の中程)のような、1bit単位でのxorにより実施しようと考えています。 http://homepage3.nifty.com/izushi/OTN/tn2/index.html  ethernetフレームで計算されるCRC32が、下記パラメータ、 (1)ビットシフト方向:右 (2)生成多項式:0xEDB88320 (3)初期値(0xFFFFFFFF) (4)出力XOR(0xFFFFFFFF) (5)フレームのLSB側(FCSデータが格納されている方)からデータ送り と一致することは判明し、検証も終わったのですが、 フレームはFCS側からではなく、MSB側(MACアドレス側)から転送されてくるため、 (5)と相反し、実装できません。 フレームのLSB側(FCSデータ側)からではなく、MSB側(MACアドレス側)から データを送り、(1)~(5)の条件で求めたCRC32の値を再現することはできるのでしょうか? 「CRC32」、「左送り」などで調べてみたのですが、 下記URLのように、MSB側(格納データのアドレス0側)から計算している例も あったのですが、CRC32の値が(1)~(5)パラメータで求めたものとCRC32の値が異なりました。 http://okwave.jp/qa/q5183760.html  要約すると、同一のデータを使用して、MSB側、LSB側から計算し、 同じCRC32の値となるようなパラメータの組み合わせが有るか無いか、 ということになると思うのですが・・・ よろしくお願いします。

  • Ethernetについて

    専用線などの必要帯域を計算するためにIPパケットのオーバーヘッドサイズを調べています。 TCP/IPのオーバーヘッドは40bytesなんですが、L2の規格がよくわかりません。(Ethernet、PPP、HDLC、FR等) 特にEthernetのオーバーヘッドサイズについてネット調べてるのですが、見るページによって微妙に書いてあることが違います。 そこでいくつか教えてください。 <1> Ethernetには主に「Ethernet(2)(DIX仕様)」と「IEEE802.3Ethernet」の2種類がありますが、私たちが普段使っているのはどちらですか? <2> Ethernet(2)(DIX)とIEEE802.3Ethernetのフレームフォーマットを教えてください。 見るページによって微妙に違うので困ってます・・・ 私が調べた限りでは以下のようになってますが、間違ってますか? 【Ethernet(2)(DIX)】 +----------+----+---+----+----+-----+-----+ |プリアンブル| SFD | DA | SA | Type |データ| FCS | +----------+----+---+----+----+-----+-----+ プリアンブル:7bytes StartFrameDemilita:1bytes Dst Addr:6bytes Src Addr:6bytes EtherType:2bytes データ部:46~1500bytes FCS(CRC):4bytes 【IEEE802.3Ethernet】 +----------+----+---+----+----+----+------+-----+----+ |プリアンブル| SFD | DA | SA | Leng | LLC | SNAP |データ| FCS | +----------+----+---+----+----+----+------+-----+----+ プリアンブル:7bytes StartFrameDemilita:1bytes Dst Addr:6bytes Src Addr:6bytes Length :2bytes LLC   :3bytes SNAP  :3bytes データ部:38~1492bytes FCS(CRC):4bytes <3> PPP、HDLC、フレームリレー、のフレームフォーマットかオーバーヘッドサイズがわかれば教えてください。 わかる部分だけでも良いのでお願いします。

  • イーサネットフレームについての質問です。

    コンピュータネットワークについての質問です。(助けて―) 独学なので、助けてください。 VLANは無いものとする。 MTUが1500バイトの通信回線システムにおいて、300KBのデータを送信することを考える。このとき下記の問いに答えなさい。ただし、1kB=1024Bとして計算しなさい。 (1)IPヘッダに20バイト、TCPヘッダに20バイト付加して送信する。全てのデータを送るためには、何パケットに分割すればよいか。 (2)イーサネットフレーム(ヘッダー+FCS)にプリアンブルを付けて送るとき、すべてのデータを送るのに何ビット送ればいいか。 (3) (2)で計算した総ビットを、回線速度が1Mbpsの回線で送るのに必要な時間を計算しなさい。 あとで、自分で解いて確認したいので、計算式(できれば説明)もお願いします。参考書読んでも分かりません↓

  • CRC8 ATMの計算方法

    CRC8 ATMの演算を行うツールの検証を行っているのですが、 CRCの机上計算方法を詳しく解説したサイトが無く生成多項式で 割って余りを求めると言う事しかわかりませんでした。 CRCを求める際はCRCの初期値も重要な筈ですが、CRCの初期値は 余りを求める際にどの様に使うのかを開設した物がなく、私に 検証を依頼してきた人に聞いてもまともな回答をもらえません でした(検証を依頼してきた人もちゃんと理解していない?)。 このサイトの別の質問の回答で 1. 与えられたデータの下位 (ビット送りの反対側) に「初期値」   を付加する 2. 生成多項式で割って余りを求める とあったので、その通りに計算しましたが初期値が0x00の時は ツールと机上計算の結果が一致するのですが、初期値0xFFの時は ツールと机上計算の結果が一致しませんでした。 実際の計算過程と結果は下記です。 生成多項式:x8+x2+x1+1(9'b100000111) 入力データ:0x12345678 CRC初期値:0x00 データ左送り、入出力反転なし 机上計算 初期値:0001001000110100010101100111100000000000(0x1234567800) 100000111 ---------------------------------------- 0001001000100010101100111100000000000 100000111 ---------------------------------------- 0001001010010101100111100000000000 100000111 ---------------------------------------- 0001011100101100111100000000000 100000111 ---------------------------------------- 0011101011100111100000000000 100000111 ---------------------------------------- 01101000000111100000000000 100000111 ---------------------------------------- 0101001110111100000000000 100000111 ---------------------------------------- 001001001111100000000000 100000111 ---------------------------------------- 0001000001100000000000 100000111 ---------------------------------------- 0000000010000000000 100000111 ---------------------------------------- 00000011100 なのでCRC(余り)は0x1C(00011100)でツールの結果0x1Cと一致。 CRC初期値:0xFF 机上計算 初期値:0001001000110100010101100111100011111111(0x12345678FF) 100000111 ---------------------------------------- 0001001000100010101100111100011111111 100000111 ---------------------------------------- 0001001010010101100111100011111111 100000111 ---------------------------------------- 0001011100101100111100011111111 100000111 ---------------------------------------- 0011101011100111100011111111 100000111 ---------------------------------------- 01101000000111100011111111 100000111 ---------------------------------------- 0101001110111100011111111 100000111 ---------------------------------------- 001001001111100011111111 100000111 ---------------------------------------- 0001000001100011111111 100000111 ---------------------------------------- 0000000010011111111 100000111 ---------------------------------------- 00011100011 なのでCRC(余り)は0xE3(11100011)でツールの結果0xCDと不一致 となりました。 これは計算の仕方が間違っているのでしょうか? それともツールの結果が間違っているのでしょうか? 何方かCRCの計算に詳しい人、ご回答をお願いします。

  • CRCについて

    CRCの算出についてなのですが http://www2c.biglobe.ne.jp/~osakana/vc/pc/crc.html こちらのサイトを参考にすると 1. データを一つ(1バイト)とってきます 2. CRC値を左ビットシフトして、桁上がりがあればさらに生成多項式とXORを取ります 3. データを左ビットシフトして、桁上がりがあればCRC値と1のXORを取ります 4. あと7回(1バイト=8ビットなので)2と3を繰り返します 5. 残りのデータがあれば1に戻ります とあります。 例えばアドレス部00000000にデータ01が入っているもの(ファイルサイズ1バイト)を算出しようとした場合 手計算を行うとCRC16は0001、CRC32は00000001になりそうなのですが いくつかのフリーソフトで実際にバイナリエディタを用いて1バイトのファイルを作成し、試して見たところ CRC16が1E0E CRC32がA505DF1B と出ます。 一般的な算出方法では、上記の説明以外に何か別の処理、初期値などがあるのでしょうか? お分かりになる方是非教えてください。 よろしくお願いします。

  • 最小MACフレーム長はなぜ64byte(512bit)?

    質問させていただきます。 イーサネットでは最小MACフレーム長が64byte(512bit)と 決められていますが、これはなぜでしょうか? 例えば10BASE5で最大セグメント長2500mだとして、 10Mbpsの伝送速度でMACフレームが512bitないと 衝突を検知できない、というのを具体的に式などで 説明して頂けないでしょうか? どなたか分かる方、ご回答の程、よろしくお願いいたします。

  • JavaScriptの演算精度は?

    JavaScriptの演算にはIEEE 754が使用されていると聞いたのですが、その演算の精度はどれくらいですか? 小数を丸めて正しい答えを導きたいのですが、その場合どの桁を四捨五入すれば最も精度が良いですか? また、どれくらいの数までであれば正確に計算できますか? 体感的には15桁程度であれば正確だと考えています。 さらに、四捨五入を行う際に*1000000してから四捨五入し、あとで1000000で割ったりしようと思うのですが、その場合も桁溢れなどの可能性がありますか? 電卓を作成しようとして、精度につまずきました。 利用者に精度の説明をしたいのですが詳しくないため、困っています。 CPUが32bitの場合と64bitの場合の両方で教えて欲しいです。 ご存じの方がいらっしゃいましたらよろしくお願いしたします。

  • アクセス(2003)のVBAでビット演算方法

    エクセルのマクロではビット演算ができましたが、アクセスではどのような方法があるのでしょうか? where in 文で値の自動生成も考えられますが、VBやVCでアドインも可能でしょうか教えてください。 '*********** Excel VBA Bit 演算 ************ Private Sub Boln() Dim MyBln As Boolean Dim Object1 As Range Dim Object2 As Range Set Object1 = Range("B11") Set Object2 = Range("B12") MyBln = Object1 And Object2 MsgBox MyBln End Sub '*********** Excel VBA Bit 演算 ************ 以上、宜しくお願いします。

  • ORACLEのLIKE演算子について

    いつも拝見させて頂いております。 ORACLEのLIKE演算子についての質問です。ある抽出条件 をシステムで作成して、その抽出条件を元にNOTで括って正反対 の抽出条件を作成したいと思っています。しかし抽出条件の中にL IKE演算子が含まれていて、パターンマッチングの抽出条件が存 在する場合にNOTで括って正反対の抽出条件を作成すると、NU LLのデータが含まれなくなってしまい、正しい結果が得られませ ん。LIKE演算子はNOT演算子を付加するとNULLデータは 抽出できないものなのでしょうか。ご存じの方がいらっしゃいまし たらご教授頂けないでしょうか。宜しくお願い致します。 WHERE NOT ( 抽出条件 ) ↑このような感じ

  • premiere6 切ったフレームをまとめるには、ほか

    こんにちは、 premiere6で60分の映像の不要部分を削除して歯抜けの状態にしました。そのように歯抜け部分(フレームをフレームとの間に削除したフレーム部分の空白ができる。)を一気に埋めるような操作方法があれば教えてください。 また、秒数を指定してそこにナイフを入れる方法、タイムライン上に正確にナイフを入れる方法があれば教えてください。 2つの質問になりましたが、お分かりの方がいましたら教えてください。 よろしくお願いします。

専門家に質問してみよう