Etherealを使ったUDPプロトコルのキャプチャについて

このQ&Aのポイント
  • 私は、簡単なUDPソケットプログラムを作って、送信側から受信側へアドホック通信(ワイヤレス環境)にて、約3MByteのmepgファイルを1024Byteずつ送信しています。しかし、送信側で送出したパケットがきちんと送出されていないような気がして、Etherealを用いてUDPをキャプチャしてみたところ、2800個程度しか送出できていませんでした。こういう事ってあるのでしょうか?
  • 2800個を改善するために、パケット送信間隔を開けることで改善できました。パケット送信間隔というのは、sendto関数が呼び出された後に、sleep関数を用いて1パケット送信後に、ある時間待機させるということです。
  • Ethereal(キャプチャリングソフト)を使用することが初めてなのですが、このソフトはトランスポート層レベルでのキャプチャソフトなのでしょうか?
回答を見る
  • ベストアンサー

Etherealを使ったUDPプロトコルのキャプチャについて

こんばんは。 この掲示板に大変お世話になっています。 私は、簡単なUDPソケットプログラムを作って、送信側から受信側へアドホック通信(ワイヤレス環境)にて、約3MByteのmepgファイルを1024Byteずつ送信しています。使用コンパイラはVisual C++.NETです。 私は、送信側から送出したパケットをプログラム内でカウントさせ、かつ受信側でも受信したパケットをカウントし、カウント数をDOSプロンプト上に表示させています。パケット数は3041個です。 しかし、送信側で送出したパケットがきちんと送出されていないような気がして、Etherealを用いてUDPをキャプチャしてみたところ、2800個程度しか送出できていませんでした。こういう事ってあるのでしょうか? 2800個を改善するために、パケット送信間隔を開けることで改善できました。パケット送信間隔というのは、sendto関数が呼び出された後に、sleep関数を用いて1パケット送信後に、ある時間待機させるということです。 また、Ethereal(キャプチャリングソフト)を使用することが初めてなのですが、このソフトはトランスポート層レベルでのキャプチャソフトなのでしょうか? よろしくお願いします。

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

  • ベストアンサー
noname#17587
noname#17587
回答No.1

一番の疑問はプログラムでカウントしているものと、Etherealのフレーム数は同じものですか?違うものをカウントしていたら当然数は違います。 そこで受信側でもEtherealを使用してフレーム数をカウントした方がよいのではないでしょうか?これでしたらフレームの内容をきちんと比べれば抜け落ちた内容まで確認できるはずです。 Etherealはレイヤ2(データリンク層)でのキャプチャソフトです。キャプチャ結果にはMACアドレスまであるはずです。

bird_2005
質問者

お礼

大変遅くなって申し訳ありません。 ありがとうございました。

関連するQ&A

  • パケットロスについて

    こんにちは。 自分は、アドホック通信(ワイヤレス環境)にてUDPソケットを用いて約3MByteのファイルを1024Byteずつ送信側から受信側へ送信しています。 そんなに、大きなファイルをUDPでなんて・・・とおっしゃられるかもしれませんが、まだまだ初心者なんでご了承ください。 そこで、質問させていただきます。 1024Byteのパケットを3041個送信しています。しかし、何かおかしいと思い、キャプチャリングソフトの「ethereal」を用いて、キャプチャしたところ、プログラム上では3041個送信しているはずなのに、キャプチャしてみると2800個程度しかキャプチャできませんでした。 こういうことってあるのでしょうか?経験された方はいらっしゃいますでしょうか? よろしくお願いします。

  • Ethereal キャプチャーソフトで困ってます。

    http://www.ethereal.com/ よりダウンロードできるフリーのキャプチャーソフト Etherealについての質問です。 以前のVersionからずっと利用しているソフトですが ある時からキャプチャーデータ閲覧時に パケットのバイナリ内容のWindowだけ表示されなくなってしまいました。 ソフトウェアを再インストールしてみたり 設定を変更してみたり 色々試行錯誤してみたのですがダメでした。 OSはWindows2000です。 Etherealのバージョンは現在の最新版です。0.10.6 現象が起こったPC2台のうち、 1台だけはソフトの再インストールで救えたのですが もう1台だけどうしてもダメです。 同じ現象で悩んだ方、いらっしゃいましたら アドバイスを頂けると助かります。 アンインストールしても レジストリ等に何か情報が残っているんでしょうか? 宜しく御願いします。

  • WinSockとWinPcapについて

    いつもお世話になります。 今、UDPパケット送受信ソフトを生成しています。 送信ソフトはWinSockを用いて作成しました。 受信ソフトをWinSockを用いて作成しましたが、 受信パケット数をカウントしようと思い、 recvfrom()でカウントしましたが、正常にカウントされない 保障されないことがWinSockではわかりました。 受信パケット数をカウントするには、 デバイスレベルで(Ethereal/WireShark)で行っている ようにWinPCapを用いると パケットをカウントできるのではないかと考えられます。 WinPcapでパケット受信を行う場合、 送信がWinSockで送信していても問題ないでしょうか? また、WinPcapでパケットを受信するには どうしたらいいのでしょうか? どうぞよろしくお願い致します。

  • Etherealでのパケロスの確認方法について

    最近、興味本位でいろいろEtherealを使ったパケットを見ています。面白いですね、これは。 そこで、Etherealの使い方について教えてください。 まずこのソフトを使用してパケロスを確認することは可能でしょうか? 例えば、RTP(UDP)の Stream Analaysisの確認をし、シーケンス番号が飛んでたりしたらそのパケットはロスしていると考えてよいのでしょか? (UDPなので再送はないので) ほかにEtherealでパケロスを確認できる方法がありましたらご教授願えますでしょうか? また擬似的にでもパケットがロスする環境を作って、自分で確認してみたいのですが、何か良い方法をご存知の方、ご教授のほどよろしくお願い致します。 皆様、よろしくお願い致します。

  • UDP:送信レートについて

    UDPで帯域測定プログラムを作りました。 このプログラムは、送信側で10000個のパケットを送信して、 受信側でスループット、パケット到達率、パケット到達間隔を測定するものです。 このプログラムに送信側で送信レートという機能を追加したいのです。 送信レートは、1秒間に何バイトのパケットを何個送ったかというものですよね? 私は1秒間に100個のパケットを送信しようと考えています。 私が考えたのは、100個のパケットを送る処理と一緒に、無駄なループを追加するということです。 こうすることで無駄なループで時間を稼ぐことができます。1秒に近づくようにループを調節すればよいと考えました。 時間を稼ぐためのループを作りたいのですが、ループの中はどう書いたらよいでしょうか? また、ほかに良い方法があれば、アドバイスをいただきたいです。

    • ベストアンサー
    • Java
  • UDPで受信終了の合図を出して受信終了させる

    UDPの帯域測定プログラムを作成しています。 100個のパケットを受信した後、受信処理を終了させるのに、 endの文字を挿入したパケットを受信することで受信を終わらせようと考えています。 パケットを送信する側は100個のパケットを送信し終えたら、endのパケットを送信します。 受信側はendのパケットを受信したら受信を終了します。 受信側がendを受信したら送信側がendのパケットを送信するのを止めさせたいのです。 UDPではパケットが消失するため、送信側は受信側がendを受け取ったことを確認したあとに送信をやめなければなりません。 endを受け取ったら、合図を返信すればよいと思いますが、その合図が消失することもあるので、「endを受信したら合図を返信する」という処理を終わらせるタイミングも分かりません。 どのようにしてendを受け取ったことを確認すればよいでしょうか?

    • ベストアンサー
    • Java
  • UDPで受信スループットを測定

    Javaを使って通信のプログラムを勉強しています。 UDP通信のスループットを測定するプログラムを作成しています。 送信側で5242880バイトを128回に分割して送信して、 受信側でそれらのパケットを受信する時間を計測するプログラムを 作りたいのですが、受信側でどのタイミングで受信処理を止めるのかがわかりません。 start = System.currentTimeMillis(); for(;;){   socket.receive(RecvPacket);   if(ループを抜ける条件)     break; } stop = System.currentTimeMillis(); で受信し続けて、受信するパケットがなくなったらループを抜けるというように考えました。 UDPでは送信されたパケットがすべて届くという保証はないので、 128回受信したらループを抜けるというようにできないので、困っています。 届いたパケットの数も数えて到達率も計算したいです。 受信が終わったら、ループを抜けるというようにしたいのですが、 どうすればよいでしょうか?

    • ベストアンサー
    • Java
  • パケットキャプチャとファイアウォールの関係について

    端末マシンでUDPで受信していることをパケットキャプチャ(wireshark)が示しているのですが、アプリケーションでは受信できません。 端末マシンのファイアウォールの設定のためかと思いましたが、パケットキャプチャで受信が確認できているため原因がわかりません。 パケットキャプチャは、セキュリティソフトがブロックした場合でも表示されるのでしょうか。 同様に、NTPで時間が取得できないのに、キャプチャができています。 このあたり、ブロックはされてしまうパケットも、とりあえずマシンにやってきたものはすべてキャプチャされるのでしょうか。

  • ソケットプログラミング(配列について)

    こんにちは。 この掲示板に、大変お世話になっています。 私は送信側から受信側へWindows上でUDPソケットを利用し、約3MByteのmpegデータを、1024Byteずつパケットに分割し送信しています。以下に、送信側のプログラムの概要を示します。 [送信側] ・配列[1025]確保し、fread関数を用いてファイルの読み込みを行い、sendto関数で受信側へ送信。 ・1024Byteずつ送出できているかを表示。 ・送出した1024Byteのパケット数を表示。 int n; int Num_n = 0; char send_buf[1025]; while((n = fread(send_buf,1,DATA_SIZE,fp)) != 0){ Num_n++; //1024Byteずつ送出できているかを表示させています printf("n:%dバイト\t",n); sendto(theSocket,send_buf,n,0,(LPSOCKADDR)&saServer,sizeof(struct sockaddr)); } //送出したパケット数を表示させています printf("%d個のパケットを送出しました\n",Num_n); <質問内容> 約3MByteのmpegを1024Byteずつ送信した場合、最後のパケットは、「n:4バイト」と表示されました。残りの1020バイト分は、どのような形で送信されているのでしょうか?確保した配列内に何も入っていない形で送信されているのでしょうか? また、私は送信側と受信側でスループットの計算を以下の式から算出しています。 送信側 (送信したパケット数×1024×8)/送信に要した時間 受信側 (受信したパケット数×1024×8)/受信に要した時間 送信したパケット数は3041個。 送信に要した時間=受信に要した時間です。 この場合、送信側での計算として・・・ (3041×1024×8)/送信に要した時間とするのか (3040×1024×8)+4/送信に要した時間とするのか どちらが正当なのでしょうか? よろしくお願いします。

  • UDPの信頼性について

    UDPでは、信頼性のない通信プロトコルとされていますが、あるノード内の2つのプログラム間でUDPを使用した通信(ローカル通信)をした場合も、信頼性がない通信となるのでしょうか? ここでいう信頼性とは下記を意味しています。 ・ 送信した順序で、受信側が受信する。 ・ 送信したメッセージを、1つも失うことなく受信側で受信できる。