コリジョンのカウントについて

初めまして!

ネットワークのことを勉強していると、目に見えているわけではないため、
なかなか実感が持てず、知れば知るほど、疑問がわいてきます。
本当は目の前で「動いている、動いている」とか見えたり、
「イテ!」とか肌で感じられれば良いんですけどね。

ところでCiscoなどのスイッチのインターフェースでは
いろんな情報を見ることができますが、
インターフェースのduplexをhalfにし、
そこにツイスト・ペア・ケーブルを接続した場合、
何を持ってcollisionのカウントを1としているのですか?

またそれはruntsやCRCエラーとは、
どう区別してカウントしているのですか?

お忙しい中、たいへん申し訳ありませんが、教えてください。
よろしくお願いいたします。

名前: 
くちゃ
日時: 
04/09/16 01:14

コメント

くちゃさんはじめまして。

>ネットワークのことを勉強していると、目に見えているわけではないため、

昔の同軸ケーブルやリピータハブの時代だったら,
キャプチャすればパケットが全部見えましたから,
ある程度見えたような気になれましたけど,
スイッチングハブだと一部しか見えませんし,
なかなか実感がわかないですね。

>何を持ってcollisionのカウントを1としているのですか?

collisionですから,送信時にパケットが衝突したっていうことですけれど,
何をもってカウントを1,っていうのはどういう意味なのかしら。
パケットの衝突がわからないのかしら?
それとも,もっと深い意味があるのかしら?

>またそれはruntsやCRCエラーとは、

runtsっていうのは,最小パケットよりも小さいパケットを受信したっていうことで,
衝突で壊れたパケットを受信したと思えばいいかな。
CRCエラーの方は,受信したパケットの末尾にあるエラーチェックコードの
計算が合わなかったっていうことで,
信号が伝わる途中でノイズなどで化けたというと思えばよいでしょう。

>どう区別して

上に書いたように,それぞれ意味が違ってまして,
いずれも,パケットの送受信をコントロールするチップがカウントします。

期待している答えって,こういうことなのかしら?

くちゃです。

さっそくの回答ありがとうございました。
こんなに早く返信してくださるとは思っていませんでした。

感謝感謝

>昔の同軸ケーブルやリピータハブの時代だったら,
>キャプチャすればパケットが全部見えましたから,
>ある程度見えたような気になれましたけど,
>スイッチングハブだと一部しか見えませんし,
>なかなか実感がわかないですね。

見てます、見てます。
SnifferやEathereal、
最近はClearSightなるものを使って見てます。
面白いですよね。

でもやっぱり実感はわかないですね。

>collisionですから,送信時にパケットが衝突したっていうことですけれど,
>何をもってカウントを1,っていうのはどういう意味なのかしら。
>パケットの衝突がわからないのかしら?
>それとも,もっと深い意味があるのかしら?

もっと深い意味です。

衝突した後、
ジャミングが流れて返ってきた信号を受け取ったカウントなのですか?

それだと
runtsとどう区別するのですか?

それと
信号を受け取ったのであれば、
Input Errorにはならないのですか?

それとも
ジャミングのカウントではなく、
衝突による再送のカウントですか?

そもそも
ジャミングがよくわかってないのですけどね。

>CRCエラーの方は,受信したパケットの末尾にあるエラーチェックコードの
>計算が合わなかったっていうことで,
>信号が伝わる途中でノイズなどで化けたというと思えばよいでしょう。

ノイズで化けた電気信号の波形と
壊れた電気信号の波形というのは、
違うのですか?

質問が多くてすみません。

文系なので、
電気信号などの波形など
見たことがないものですから。

くちゃさん,こんばんわ。

>衝突した後、
>ジャミングが流れて返ってきた信号を受け取ったカウントなのですか?

送信動作を実行している途中で衝突を検出したらジャミングを流す,
というルールですから,
ジャミングが流れるっていうことは,
その前に衝突を検出しているはずですよね。
そこで,カウントするんだと思います。多分。

>runtsとどう区別するのですか?

送信動作の途中で衝突を検出するとcollisionですが,
runtsは,送信動作に入っていないときに,
小さいパケットを受信したことを表すんだと思います。多分。

>Input Errorにはならないのですか?

Input Errorっていうのは,記憶が曖昧ですが,たしか,
受信時に発生したエラーの合計じゃなかったかしら。
だから,runtsがカウントされるとInput Errorもカウントされる...かな。

>ノイズで化けた電気信号の波形と
>壊れた電気信号の波形というのは、
>違うのですか?

ノイズっていうのは信号が壊れる原因の一つで,
壊れた信号っていうのは,壊れた結果のことですよね。
だから,違うというか何というか。
この辺の話は,
『ネットワークはなぜつながるのか』(戸根勤著,日経BP社発行)
の123ページ以後に解説があります。
参考になるかもしれません。

くちゃです。

お忙しいのに、
早いご回答ありがとうございました。

回答文と『ネットワークはなぜつながるのか』
を読み返してみたら、
かなりHUBの中での動作が見えてきました。
(相変わらず、実感はわきませんが・・・)

>送信動作を実行している途中で衝突を検出したらジャミングを流す,
>というルールですから,
>ジャミングが流れるっていうことは,
>その前に衝突を検出しているはずですよね。
>そこで,カウントするんだと思います。多分。

そもそもジャミングについて
よくわかっていませんでした。
すみません。

>送信動作の途中で衝突を検出するとcollisionですが,

この辺がよくわかっていませんでした。

スイッチにツイスト・ペア・ケーブルが
接続されているものに関して言えば、
「collision」と言っても
本当に「衝突」しているわけではなく、
「検出」しているだけなのですね。

スイッチに同軸ケーブルが
直接接続できるものはあったのですか?
あったならこの場合、
送信受信は分かれていないのですよね。
この場合は「検出」だけではなく、
本当に「衝突」していているんですか?

>runtsは,送信動作に入っていないときに,
>小さいパケットを受信したことを表すんだと思います。多分。

では、送信動作中に小さいフレームを受信したら、
「collision」としてカウントされてしまうのですか?

それだと単に「collision」ですから、
eathernetだと「動作としては正常」としてみなされてしまいますね。
runtsだと「ケーブルやNICなど物理的に何かがおかしい」と判断しますが・・・。
(対抗のリピータハブでの「衝突で壊れたフレーム」かも知れませんが・・・)

>ノイズっていうのは信号が壊れる原因の一つで,
>壊れた信号っていうのは,壊れた結果のことですよね。
>だから,違うというか何というか。

では、ACKなどの小さいフレームでは、
ちょっと壊れて小さくなると(FCSも入れて64バイト未満になると)
runtsとしてカウントされるんですよね。
この場合はCRCエラーではないわけですよね。

この辺の「壊れる」ということが
やはり波形を見ているわけではないので、
よくわからないんですよね。

すみません。
またまたかなり多くの質問になってしまいまして。

くちゃさん,こんにちわ。

>スイッチにツイスト・ペア・ケーブルが接続されているものに関して言えば、
>「collision」と言っても本当に「衝突」しているわけではなく、
>「検出」しているだけなのですね。

『検出』と『衝突』という言葉を使い分ける理由がよくわからないんですが,(笑)
衝突した信号が流れてくるから,衝突を検出できるわけです。

>では、送信動作中に小さいフレームを受信したら、
>「collision」としてカウントされてしまうのですか?

送信動作中に,自分が送信した信号とは違う信号が流れてくれば,
それは信号が衝突したことになりますから,
「collision」としてカウントするでしょうね。

実際には,信号が流れてきたことを検出した時点では,
その信号が長いか短いかはわかりません。
(信号の最後まで行ってはじめて短かったか長かったかわかります。)
自分以外の信号が流れたきたことを検出した時点で衝突とみなすので,
その信号の長さは関係ないはずです。

>runtsだと「ケーブルやNICなど物理的に何かがおかしい」と判断しますが・・・。

衝突が起こっていないのにruntを検出すれば変ですけど,
衝突が起こっていればruntを受信してもおかしくはないと思います。
言い換えると,全二重でruntがカウントされるのはおかしいですが,
半二重だったらおかしくないと思います。

>では、ACKなどの小さいフレームでは、
>ちょっと壊れて小さくなると(FCSも入れて64バイト未満になると)
>runtsとしてカウントされるんですよね。

ノイズなどの影響を受けると信号は変形します。
その結果デジタルデータに戻すときに値を誤って読み取ってしまいます。
CRCエラーとかいうのがこれですね。
でも,ノイズの影響を受けたとしても,信号が消えてなくなるわけではありません。
そして,ノイズの影響で信号がメチャクチャに変形したとしても,
そこに信号があれば,受信回路はそこからデジタルデータを復元しようとします。
(信号が変形すれば読み取った値は誤ったものになるでしょうけれど)
だから,パケットが小さくなることはありません。
パケットが壊れるっていう現象は,物が二つに割れて壊れるのとは違うんです。

>この場合はCRCエラーではないわけですよね。

runtパケットのFCSは,多分,おかしな値になっているでしょう。
でも,それをCRCエラーとしてカウントするかどうかまでは分かりませんねぇ。
パケットの長さが足りなかったことが判明した時点で,
そのパケットはエラーだということになりますから,
FCSを検査する必要はないので検査しないかもしれないし,
runtとFCSは全く別々に検査するかもしれません。
その辺は,イーサネットコントローラのチップがどう動くかによりますから,
そこまではわからないですねぇ。

>この辺の「壊れる」ということが

電気信号は電圧ですから,信号が混ざると電圧が足し算されると思えばよいでしょう。
たとえば,+1Vと+1Vの信号が混ざったら+2Vになり,
+1Vと-1Vが混ざったら0Vっていうことですね。
実際の信号は,『ネットワークはなぜ...』の90ページにあるような形ですから,
それが混じって,電圧の値が足し算された波形になると思えばいいんじゃないかしら。
ノイズの場合は,こんなにきれいな四角い形ではなくて,
メチャクチャな波形ですけれど,それでも電圧がありますから,
それが足し算された値の波形になるっていうことです。
こんな説明でわかるかしら?

こんばんは、くちゃです。

いつも早く丁寧なご回答ありがとうございます。

いろいろわけのわからん質問して
申し訳ないのですが、
がんばってお付き合いくださいね。

>衝突した信号が流れてくるから,衝突を検出できるわけです。

んっ???

何度も同じことを聞くようで申し訳ないのですが、
ポートがHalf(半二重)のスイッチで
カウントされているOutputErrorの「collision」ですが、

1.イーサネットコントローラーからMAUに向けて送信動作中に
  フレームを受信した際、衝突検出回路がそれを検出した場合

2.送信動作には入っていないが、
  スイッチの対抗のリピータハブのリピータ回路にて
  フレームが衝突した信号(ジャム信号?)が流れてきて、
  スイッチのポートの受信側で受信した場合

両方とも「collision」としてカウントされるのですか?

>衝突が起こっていないのにruntを検出すれば変ですけど,
>衝突が起こっていればruntを受信してもおかしくはないと思います。
>言い換えると,全二重でruntがカウントされるのはおかしいですが,
>半二重だったらおかしくないと思います。

>電気信号は電圧ですから,信号が混ざると電圧が足し算される
>と思えばよいでしょう。
>たとえば,+1Vと+1Vの信号が混ざったら+2Vになり,
>+1Vと-1Vが混ざったら0Vっていうことですね。

リピーター回路で衝突した信号は混ざり、
「電圧が足し算される」わけですね。

「+1Vと+1Vの信号が混ざったら+2V」
の場合は電圧は有るわけだから
「runts」としてはカウントされませんね。

「+1Vと-1Vが混ざったら0V」
の場合は電圧が無いので、
これも信号が無くなるわけだから、
「runts」としてはカウントされませんね。

あれぇ?
「衝突が起こっていればruntを受信してもおかしくはないと思います」
というのは、どういう意味ですか?

>そして,ノイズの影響で信号がメチャクチャに変形したとしても,
>そこに信号があれば,受信回路はそこからデジタルデータを復元しようとします。
>(信号が変形すれば読み取った値は誤ったものになるでしょうけれど)
>だから,パケットが小さくなることはありません。
>パケットが壊れるっていう現象は,物が二つに割れて壊れるのとは違うんです。

この場合も「パケットが小さくなることはありません」とありますが、
ではノイズの影響では「runts」はカウントされないと思って良いのですか?

そもそもどういう時に「runts」ができ、
スイッチでカウントされるのかわかりません。
教えてください。

>1.イーサネットコントローラーからMAUに向けて送信動作中に
>  フレームを受信した際、衝突検出回路がそれを検出した場合

これは,collisionにカウントされるでしょう。
正確にいうと,送信動作中に,自分が送信した信号とは違う信号を
受信した時点でcollisionが起こったものと見なす,ということだと思います。
それから,ちょっと記憶が曖昧ですけれど,
衝突を検出する回路はMAUの中にあり,
そこで衝突を検出したら,
MAUからイーサネットコントローラに衝突を通知するんだと思います。

>2.送信動作には入っていないが、
>  スイッチの対抗のリピータハブのリピータ回路にて
>  フレームが衝突した信号(ジャム信号?)が流れてきて、
>  スイッチのポートの受信側で受信した場合

送信動作に入っていないんですから,
別の人が送ったパケットが衝突した,っていうことですね。
それもカウントするのかなぁ。
こっちはよくわかりません。

>あれぇ?
>「衝突が起こっていればruntを受信してもおかしくはないと思います」
>というのは、どういう意味ですか?

衝突を検出したら,そこでジャム信号を送ってから送信動作をやめます。
すると,先頭部分だけ送信したところで送信動作をやめるわけですから,
規定サイズ以下の小さなパケットになってしまいます。
それがruntパケットっていうことですね。

>「+1Vと-1Vが混ざったら0V」
>の場合は電圧が無いので、
>これも信号が無くなるわけだから、
>「runts」としてはカウントされませんね。

こっちは,0Vになったとしても一瞬のことですから,
パケットはそこで終わりではなく,
0Vの部分はパケットの一部であり,その後もパケットは続いているものと,
見なされるでしょう。
だから,パケットは小さくならないはずです。

>この場合も「パケットが小さくなることはありません」とありますが、
>ではノイズの影響では「runts」はカウントされないと思って良いのですか?

何も信号が流れていない状態で短時間のノイズを拾い,
それを信号と誤ってデータに復元するとruntになるでしょう。
ノイズが60バイト分以上流れて,規定サイズを超えると,
runtではなく,CRCエラーになるかもしれません。

>そもそもどういう時に「runts」ができ、
>スイッチでカウントされるのかわかりません。

runtパケットができる主な要因は次の二つだと思います。
・衝突を検出し,最小パケットに満たないところで送信動作はやめた
・最小パケットに満たない短いノイズを拾い,それをパケットと見誤った

で,それを受信するとruntsとしてカウントされる,
っていうことだと思います。