- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
前回「iperf2のUDPフォーマットをwiresharkで見る」でWiresharkを使ってiperf2 UDPモードで送られているパケットを観測することに成功しました。
今回は受信したiperf2パケットの中身を見てみます。
片方向通信環境でiperf2を使うための下調べ (1)
http://mikioblog.dolphinsystem.jp/2019/09/iperf2-1.html
iperf2のUDPフォーマットをwiresharkで見る
http://mikioblog.dolphinsystem.jp/2019/10/iperf2udpwireshark.html
前回の調査で、iperf2クライアント側がUDPパケットを送るたびにシーケンス番号が増えているのは確認しました。
またタイムスタンプも送られた時間が格納されているようです。
ですがそれ以降の、
などなどおかしな値が続いています。
なんだか良く分かりません。
よく見てみると、mPortの値は0123456……とダミーデータが入っています。
なんだこりゃ?
検索すると以下からダウンロード可能なので、ダウンロードして見てみます。
iperf2 - Browse Files at SourceForge.net
https://sourceforge.net/projects/iperf2/files/
~話が長くなるので省略~
本家と分家のようです。
で、"iperf2"と検索をすると分家の方が上位に表示されます。
iperf2に関しては分家の方が活発に開発が進んでいるからでしょうか?紛らわしいですね。
こちらが本家
こちらが分家
で、なんと本家と分家ではUDP送信時のパケットフォーマットが違うのです!
こちらが分家。
こちらが本家
どうも分家の方は、UDPパケットのnumThreadsやmPortなどは送らずダミーデータ(0123456……)で埋めているようです。
一方本家は、元々の仕様の通りnumThreadsなどを送っています。
で、Wiresharkの方は本家のフォーマットを元に解析しているので、numThreads等におかしなデータ表示がされていました。
びっくりしました。同じソフトでもパケットフォーマットが違うというのは怖いですよね。
通常は同じiperfの同じバージョン間で測定すると思いますが、別々のPCで別々にダウンロードした場合、もしかすると本家と分家の別々のバイナリをダウンロードしてしまうかもしれません。
これだけなら笑い話で済むかもしれませんが、無線の送受信器開発をしている私たちは「あれ?バグか?」と自分のソースコードを疑い始めます。こうして明後日の方向にデバッグが進んでいき、工程に遅れが生じるのです。
メールニュースを最後までお読み頂いた方は、iperfの正しいインストールの仕方はもうお分かりですね?
×「iperfをインストールします」
○「http://iperf.frからiperf 2.0.9をダウンロードして、使用するすべてのPCに同じバイナリをインストールします」
深くまで見てみないと分からないことって本当にありますね。パケットの中身まで解析しておいて良かった良かった。
以上、ドルフィンシステム福島でした。
今回は受信したiperf2パケットの中身を見てみます。
片方向通信環境でiperf2を使うための下調べ (1)
http://mikioblog.dolphinsystem.jp/2019/09/iperf2-1.html
iperf2のUDPフォーマットをwiresharkで見る
http://mikioblog.dolphinsystem.jp/2019/10/iperf2udpwireshark.html
受信したiperf2のパケットの中身
下図は、受信したiperf2パケットの中身です。前回の調査で、iperf2クライアント側がUDPパケットを送るたびにシーケンス番号が増えているのは確認しました。
またタイムスタンプも送られた時間が格納されているようです。
ですがそれ以降の、
- flagsは意味不明
- numThreadsは、送信スレッド数か? 134217728 (0x8000000)は大きすぎ?
- mPortは、608664 (0x94998)?
などなどおかしな値が続いています。
なんだか良く分かりません。
よく見てみると、mPortの値は0123456……とダミーデータが入っています。
なんだこりゃ?
iperf2のソースコードを確認する
良く分からなかったら、ソースコードにあたります。検索すると以下からダウンロード可能なので、ダウンロードして見てみます。
iperf2 - Browse Files at SourceForge.net
https://sourceforge.net/projects/iperf2/files/
~話が長くなるので省略~
iperf2には本家と分家があった
詳しい事情は存じませんが、iperf2はバージョン 2.0.5から分岐して開発が進められているようです。本家と分家のようです。
で、"iperf2"と検索をすると分家の方が上位に表示されます。
iperf2に関しては分家の方が活発に開発が進んでいるからでしょうか?紛らわしいですね。
こちらが本家
こちらが分家
で、なんと本家と分家ではUDP送信時のパケットフォーマットが違うのです!
こちらが分家。
こちらが本家
どうも分家の方は、UDPパケットのnumThreadsやmPortなどは送らずダミーデータ(0123456……)で埋めているようです。
一方本家は、元々の仕様の通りnumThreadsなどを送っています。
で、Wiresharkの方は本家のフォーマットを元に解析しているので、numThreads等におかしなデータ表示がされていました。
まとめ
- iperf2は、2.0.5以降本家と分家で開発が分かれている
- "iperf2"と検索すると本家よりも分家が上位に表示される(ちなみに"iperf"とだけ日本語で検索すると"iperfの使い方紹介のページ"が上位を占めています。その一番上で紹介されているのは「別の分家」!)
- 本家と分家のiperf UDPモードで送信するパケットフォーマットが違う
びっくりしました。同じソフトでもパケットフォーマットが違うというのは怖いですよね。
通常は同じiperfの同じバージョン間で測定すると思いますが、別々のPCで別々にダウンロードした場合、もしかすると本家と分家の別々のバイナリをダウンロードしてしまうかもしれません。
これだけなら笑い話で済むかもしれませんが、無線の送受信器開発をしている私たちは「あれ?バグか?」と自分のソースコードを疑い始めます。こうして明後日の方向にデバッグが進んでいき、工程に遅れが生じるのです。
メールニュースを最後までお読み頂いた方は、iperfの正しいインストールの仕方はもうお分かりですね?
×「iperfをインストールします」
○「http://iperf.frからiperf 2.0.9をダウンロードして、使用するすべてのPCに同じバイナリをインストールします」
深くまで見てみないと分からないことって本当にありますね。パケットの中身まで解析しておいて良かった良かった。
以上、ドルフィンシステム福島でした。
コメント
コメントを投稿