1748089 メンバー
4938 オンライン
108758 解決策
新規ポスト

UDP での送受信

 
To_I
新しいメンバー

UDP での送受信

石川と申します。皆さんよろしくお願いします。

HP-UX と LINUX 間での UDP による

データ送受信について、

LINUX → HP-UX に連続的に

データを送信することにより、

使い方やパフォーマンスを試して

いるのですが、

時々、最初の 2〜3 パケットを受信

できないことがあります。

UDP ではデータ伝送が保証されて

いない、ということは理解して

いるのですが、ネットワーク構成は、

----

という単純なもので、HP-UX 側

でソケットの受信バッファサイズを

大きくすることにより、パケットが

抜けることはほとんど発生しないの

ではないか、と予想していました。

抜けるとしても、受信側の処理が

追いつかなくて、受信バッファが

あふれた場合に発生するだろう、と

思っていたのですが、送受信を開始

した一番最初のパケットが抜ける

事象が発生し、不思議に思って

います。

今まで試してきた中では、最初の

パケットが抜ける以外には、パケット

抜けは発生していないので、最初の

パケットについても S/W HUB 等の

回線上で抜けているわけではないの

ではないかと想像しているのですが、

なぜ最初のパケットが抜ける事象が

発生するのか、ご存知の方がいらっ

しゃればご教授いただきたいと思い、

質問させていただきます。

Linux: RHEL ES 3.0

HP-UX: HP-UX 11i (11.23)

LAN: 1000BASE-T

以上、よろしくお願いいたします。
7件の返信7
uhyo
貴重なコントリビューター

UDP での送受信

まず、UDPのドロップというのは何で検知されていますか?トレースのレベルですか?それともアプリケーションのレベルですか?

まだ、トレースでの確認をされていないのであれば、

nettlでのトレースレベルでの確認をしたほうがいいと思います。もし、パケットが届いているのであれば

トレースに記録が残るでしょうし、どうして、NGに

なったのかの理由も判明するかもしれません。

ただ、nettlがギガビットのトレースをもれなく

記録してくれるかという疑問もありますね。

その場合、今度はアプリ側で確認するのがいいですね。もし、すでに双方からの確認をされているので

あれば、参考にならない書き込みですみません。
To_I
新しいメンバー

UDP での送受信

回答ありがとうございます。

>UDPのドロップというのは何で検知されていますか?

アプリケーションレベルで確認しました。

送受信するデータの先頭に番号を付けていて、

その番号が連続しているかどうかでパケット抜けを

判定しています。

この実験を始めたときは、通信途中でもパケット抜けが

発生していたのですが、途中の抜けについては setsockopt

で受信バッファを大きくすることにより

回避できたのですが、一番最初のパケットについては

バッファを大きくした後も、抜けることがあるという

状況です。

nettl でのトレースは、使い方を理解していないため

実施していませんでした。

その代わり、HP-UX 側で tcpdump でダンプしながら

試すことはしており、アプリケーションで最初の

パケットが抜けたときには、tcpdump でのダンプでも

抜けているように見える (最初のパケットがダンプされない)

状況です。
hazelwood
信頼あるコントリビューター

UDP での送受信

この現象には心当たりがないです。

はずしている可能性も高いですが、以下の点も確認しておくことをお勧めします。

(あまり役に立たない書き込みですいません。)

・UDP通信直前、直後のルーティング情報に差はないか?

・クロスケーブル直結やダムハブにした場合はどうなるか?

(これで問題が解消するなら、S/W HUBの問題と思われます。 UDP通信直前にpingをしばらく流してみると解消するかも)

To_I
新しいメンバー

UDP での送受信

回答ありがとうございます。

> ・UDP通信直前、直後のルーティング情報に差はないか?

こちらは確認しておりませんが、

> ・クロスケーブル直結やダムハブにした場合はどうなるか?

こちらについては、クロスケーブル直結で試しており

やはり、最初のパケットで抜けが発生することがあります。

> UDP通信直前にpingをしばらく流してみると解消するかも

経験的には、初めて UDP 通信の実験をしたときには

最初のパケットが抜け、2度、3度と実験を繰返すと

最初のパケットからちゃんと受信できる、という

感じになっています。

その後、しばらく放っておいてから実験を再開すると、

再開した1度目は最初のパケットが抜ける、という

感じです。
yoshimura
レギュラーアドバイザー

UDP での送受信

tcpdump で記録されていないというと、

HP-UX 側やスイッチの要因以外に相手先から

送られていない、ということもありえます。

クロスケーブル直結というと同じ IP セグメント

なんですよね?余り思い当たりませんが

送り手側で ARP での MAC アドレスの学習に

待ちきれないで(送る前に)ドロップしている、

ということは無いですかね?

ping をかけながら、というのは一時的に

更新される IP ルーティングとARP テーブルが

あらかじめ学習済みという状況を作り出して

おくことになります。

この状況でテストすることで、問題が UDP に

特化するものか、それとも IP 層以下の問題

なのかを確認するのに有効だと思いますので

試してみてはいかがでしょうか?

To_I
新しいメンバー

UDP での送受信

回答ありがとうございます。

> 送り手側で ARP での MAC アドレスの学習に

> 待ちきれないで(送る前に)ドロップしている、

hazelwood さんの回答にもあった、ping をうちながら、

という実験はしておりませんので、実施してみようと

思います。

これで解消するようであれば、例えば送信側で arp -s 等に

より、ARP テーブルに静的な設定をすることで解消

できるかもしれない、ということですね。
To_I
新しいメンバー

UDP での送受信

いしかわです。

皆さんありがとうございました。

本件については、送信前に arp テーブルを

設定することにより、回避することができました。

以上です。