• ベストアンサー

スループット計算方法について

私は、UDPソケットプログラミングをしています。 送信側から、受信側へ1024byteずつUDPを利用してパケットを送信しています。送信側プログラムでは、配列を1025確保し、受信側でも同様に配列を1025確保しています。 スループット計算を以下に示す計算方法で計算しました。 [送信側] (送信パケット数×パケット長(1024))/送信にかかった時間 [受信側] (受信パケット数×パケット長(1024))/受信にかかった時間 送信にかかった時間=受信にかかった時間とします。 そこで、質問させていただきます。 上記計算式で、パケット長=1024ではなく、1000で計算する方が正しいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

>上記計算式で、パケット長=1024ではなく、1000で計算する方が正しいのでしょうか? 1000は便宜上ハードディスクの容量などに使う物でこういった計算では正確に1024で計算する必要があるかと思います。

bird_2005
質問者

お礼

書き込みありがとうございます。 解決しました。 今後とも、よろしくお願いします

その他の回答 (1)

  • ceita
  • ベストアンサー率24% (304/1218)
回答No.2

「1kByteづつ送受した」と書くと 1000Byteなのか1024Byteなのか考えることになるかもしれませんが、 はっきりと1024Byteの送受信なのですから、 そのサイズで計算することになります。

bird_2005
質問者

お礼

書き込みありがとうございます。 解決しました。 今後とも、よろしくお願いします

関連するQ&A

  • UDPで受信スループットを測定

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

    • ベストアンサー
    • Java
  • ソケットプログラミング(配列について)

    こんにちは。 この掲示板に、大変お世話になっています。 私は送信側から受信側へ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/送信に要した時間とするのか どちらが正当なのでしょうか? よろしくお願いします。

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

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

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

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

    • ベストアンサー
    • Java
  • パケットの計算方法について

    今、WinSockを使ったパケット送信プログラムを作成しています。 Ethernetフレームで、UDPを用いて転送する予定です。 そこで、送信するパケットについて検討しています。 UDPのペイロードサイズが、1472バイトであることはわかりました。 10Base-Tと100Base-Tそれぞれの場合で、送信パケットの上限数とパケット間隔についてどのように算出すればいいのでしょうか? どうぞよろしくお願い致します。

  • パケットロスについて

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

  • UDPソケット通信におけるデータパケット

    UDPソケット通信をする際、受信データサイズとして考慮するべきサイズはアプリサイズとUDPヘッダー(8バイト)としてソケットオプションで受信バッファサイズを増加させたのですが、予想より受信できるパケット数が少ないです。 例) 1パケットのアプリサイズを10バイトしUDPヘッダーも考慮して実際1パケットあたり18バイトとして、最大5パケット受け取れるようにソケットオプションで アプリサイズ(10バイト)× UDPヘッダー(8バイト)×パケット数(5) 上記のように設定したのですが、実際5パケットも受信できませんでした。 上記のほかにIPヘッダーなども考慮しなければならないのでしょうか? 開発環境:solaris8 C言語

  • パケット到達遅延の測定にて

    Javaを使って通信のプログラムを勉強しています。 UDP通信プログラムでパケット到達遅延を測定したいと考えています。パケット到達遅延を測定するには、 送信側がパケットを送信した時間と、受信側がそのパケットを受信した時間を取得して、 求めようと考えています。 パケット到達遅延を測定するには、送信側と受信側が時刻同期させる必要があると聞きました。 その方法を教えていただきたいのですが、どなたかアドバイスをいただけないでしょうか?

    • ベストアンサー
    • Java
  • パケット数のカウント方法

    いつもお世話になります。 今、WinSockを用いて、パケット送受信ソフトを作っています。 送信は完成しましたが、受信で問題があります。 UDPプロトコルです。 受信側で受信したパケット数を数えたいのですが、 その方法がわかりません。 送信側で送信するパケットは 複数個で受信側にはそのパケット数はわかりません。 以下のようにカウントすると送信パケット数と異なる 数になります。 int count=0; while(1){ if((recvfrom( recvSocket, buf, sizeof(buf), 0, NULL, NULL)) != SOCKET_ERROR){ count++; } } 受信パケットを数える方法はありませんか? どうぞよろしくお願い致します。

  • UDPで受信終了の合図を出して受信終了させる

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

    • ベストアンサー
    • Java