BroadCastについて質問です。

はじめてカキコさせて頂きます。

BroadCastについての質問なのですが、自分のIPが
IP 192.168.0.1 / SUBNET 255.255.255.0
この場合、BroadCastアドレスは
255.255.255.255 か 192.168.0.255
になるのですよね?
これって、理論上はどちらとも同じ意味を持つアドレスですよね?

実際、Winsock1.1 UDP/IP で送信してみたのですが、
すこし連続送信すると通信速度が全く違うのです。
255.255.255.255 : Send 13 / Recv 5
192.168.0.255 : Send 27 / Recv 24
(同じマシン2台をクロスで接続)
この速度差はなぜ発生するのでしょうか?(ただ単に測定誤差?)

名前: 
AUT's
日時: 
02/02/24 02:05

コメント

AUT'sさんはじめまして。

>IP 192.168.0.1 / SUBNET 255.255.255.0
>この場合、BroadCastアドレスは
>255.255.255.255 か 192.168.0.255
>になるのですよね?
>これって、理論上はどちらとも同じ意味を持つアドレスですよね?

この二つは微妙に違います。
255.255.255.255の場合は,本来の意味からいえば,
ネットワーク上の全ノードに対するブロードキャストを表します。
その理屈からいえば,ネットワーク全体にパケットが配送され,
ネットワーク上の全ノードがそれを受け取ることになるはずですが,
実際には,ルータはブロードキャストを遮断するので,
そのパケットは,ローカルなIPネットワーク内に配送されるだけで,
ネットワーク全体に配送されることはありません。
一方,192.168.0.255の場合は,本来,
192.168.0.0/24というIPネットワークに対するブロードキャストを表すので,
その理屈からいうと,まず,192.168.0.0/24にパケットが配送され,
そこでブロードキャストされることになります。
しかし,実際には,セキュリティ上の理由から,
そういったブロードキャストパケットを配送しない場合もあります。
ただ,これは理屈の話でして,
このケースだと,ローカルなIPネットワークが192.168.0.0/24ですから,
両者の違いは,実質的にはないはずです。

>すこし連続送信すると通信速度が全く違うのです。
>255.255.255.255 : Send 13 / Recv 5
>192.168.0.255 : Send 27 / Recv 24

試験プログラムの内容はどんなものですか?
どのくらいの時間間隔でパケットを送っているのでしょう?
測定時間はどの程度ですか?

普通に考えると,こうした速度計測の場合は,
連続的に(途中に待ちを入れずに)送受信動作を繰り返して,
一定時間内のパケット送受信数を記録することが多いように思いますが,
そうだとすると,パケット数が少なすぎるように思います。
連続的に送受信すると,パケットサイズやLANのスピードによりますが,
10メガのイーサネットの場合で,1秒間に最低でも数100個程度は
パケットが行き交うはずです。
100メガだったら,その10倍近くパケットが飛ぶでしょう。
そこから考えると,上の数字がどんな内容の実験なのか,
想像できなないんですが...

>>255.255.255.255 か 192.168.0.255
>>これって、理論上はどちらとも同じ意味を持つアドレスですよね?
>
>この二つは微妙に違います。

ありがとうございます。すごく良く解りました。

>試験プログラムの内容はどんなものですか?
>どのくらいの時間間隔でパケットを送っているのでしょう?
>測定時間はどの程度ですか?

すみません。もう少し詳しく書けば良かったです。
遅れながらお知らせいたします。
クロスで接続させたPC2台(両方ともWin2K)で1台が送信専用、
もう1台が受信専用のルーティンで待機しています。
そして連続的に送信させ、そのプログラムで送信した量と受信した量、
及びパケットキャプチャプログラムで実際に送信された量を計測しました。
数度か計測を行い、パケットキャプチャを起動しないでの実験も行いました。
書きこんだ数値ですが、約10ms間隔で送信できたパケットの平均を出しています。
QueryPerformanceCounterで間隔制御を行っています。

>約10ms間隔で送信できたパケットの平均を出しています。

なるほど,それだと,
1300パケット/秒とか2700パケット/秒ということですね。

>QueryPerformanceCounterで間隔制御を行っています。

ここが気になりますね。
QueryPerformanceCounterの精度はどの程度でしょうか?
この間隔制御の内容が具体的にわからないと,何ともいえませんけど,
1300パケット/秒とか2700パケット/秒とかでパケットを送るということは
パケット送信間隔は,750マイクロ秒とか,370マイクロ秒とか
っていう値になるはずなので,送信間隔を制御するなら,
それ以上の精度で時間をコントロールしないといけませんよね。
この辺は,実測してみないとわからないので,
QueryPerformanceCounterの精度を測ってみた方がいいかもしれません。
# マニュアルは信用できない場合もありますから

それから,送信と受信のどちらに原因がるのかを切り分けるため,
まず,送信だけ行ってその速度を調べ,
次に,受信も含めて速度を調べる,といったことをやってみてはどうでしょう?