掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27526

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/05 10:02:48)


御世話になります。
サーバからタレ流しの情報をクライアントで受け取り、
ファイルヘ格納するということを行おうと思っています。
そのときサーバはクライアントとコネクションを張ることが出来ない構成なので
UDP通信を使う予定なのですが、何の方策も取らずに通信させると
30Mバイト程度のファイル転送で、パケットロスが60%以上も起こってしまいます。

パケットロスを防ぐ方法について何か情報はございませんでしょうか?
95%以上の信頼性が望ましいのですが、UDPでそのようなことを実現している
ものはありませんでしょうか?
HPや参考書のリファーがあれば非常にありがたいのですが
よろしくお願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Linux UDP通信時のパケットロスの防止方法について 27532 nop 2006/07/05 12:25:25


No.27532

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---nop(2006/07/05 12:25:25)


UDP自体、パケットが失われてもよい情報を転送するためのプロトコルです。
パケットロスが問題になる転送に使用すること自体が間違いでは?

素直にTCPが使用可能な構成にすべきです。


この投稿にコメントする

削除パスワード

No.27534

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/05 13:08:05)


>UDP自体、パケットが失われてもよい情報を転送するためのプロトコルです。
>パケットロスが問題になる転送に使用すること自体が間違いでは?
>
>素直にTCPが使用可能な構成にすべきです。
コネクションレスでLAN内の同報を行いたく、接続していない時でも
サーバから情報は流れており、必要なときに接続し、情報を見る(聞く)
というものをイメージしています。
TCPで行うならLAN内の全てのクライアントとのコネクションを
張らなければならなくなり、100台のクライアントがあればデッドロックを避けるため
100個のスレッドなりプロセスを起こす必要があります。
一方UDPなら100個のクライアントがあれば100のソケットに対して情報のタレ流し
でよいことになります。
そのとき、許容できるパケットロスが15%(85%送受信)位であり、
高望みさせて頂ければ5%以内(95%送受信)もあればうれしいのですが、
そのための送受信タイミングの取り方とかのノウハウが何処にころがっていないか
ということです。
実際、動画配信等はUDPで実現しているところもあるので、ノウハウとしては
確立している分野だと思っているのですが、その辺の情報に疎くてお聞きしている次第です。

よろしくお願い致します。


この投稿にコメントする

削除パスワード

No.27535

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---ruby(2006/07/05 13:15:00)


だんだんネットワーク系のディープな話題になりそうです。
ここよりは、そういった話を詳しく扱っているところへ
おいでになった方がよいのではないでしょうか。

もちろん、「パケットロスの防止についてC言語でこんな風に
実装してみたけど、どうもうまくいかない」という話でしたら
ここの掲示板でOKです。


この投稿にコメントする

削除パスワード

No.27536

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/05 13:39:26)


>だんだんネットワーク系のディープな話題になりそうです。
>ここよりは、そういった話を詳しく扱っているところへ
>おいでになった方がよいのではないでしょうか。
>
>もちろん、「パケットロスの防止についてC言語でこんな風に
>実装してみたけど、どうもうまくいかない」という話でしたら
>ここの掲示板でOKです。

そうですね。ディープ過ぎるかもしれませんので、他に適当な場所を
見付けたらそちらで聞くことに致します。
そのときはこちらにも報告致しますが、それまでは継続質問とさせておいて下さい。
よろしくお願い致します。


この投稿にコメントする

削除パスワード

No.27556

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/06 12:02:43)


ローカルマシン環境内でのUDP通信(自分から自分への接続)に置いて
1パケット32768(2^15)で1パケット毎にusleep(1)をかけてやれば
パケットロスを99.9%まで無くせました。
しかし、こんなことで現実の通信に置いてストリーミング再生が
実現されているとも思えず、奥が深い世界に突入しそうです。

というわけで、この話題はここでは終わりにしたいと思います。


この投稿にコメントする

削除パスワード

No.27557

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---nop(2006/07/06 12:29:34)


>ローカルマシン環境内でのUDP通信(自分から自分への接続)に置いて
>1パケット32768(2^15)で1パケット毎にusleep(1)をかけてやれば
>パケットロスを99.9%まで無くせました。
>しかし、こんなことで現実の通信に置いてストリーミング再生が
>実現されているとも思えず、奥が深い世界に突入しそうです。

ちなみに、ストリーミングの場合、データの一部が欠落しても、
人間レベルで見/聞きしても気づかないと言う前提の元、
欠落データを再生しない、と言う事になっています。

つまり、データが欠落しても問題ないプロトコル、
と言う位置づけになり、性質が違います。


この投稿にコメントする

削除パスワード

No.27558

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/06 12:47:22)


>ちなみに、ストリーミングの場合、データの一部が欠落しても、
>人間レベルで見/聞きしても気づかないと言う前提の元、
>欠落データを再生しない、と言う事になっています。
>
>つまり、データが欠落しても問題ないプロトコル、
>と言う位置づけになり、性質が違います。

もちろんその通りです。
始めからパケットロスが15%以内(可能なら5%以内)と述べていたのは
データの欠落を許容するシステムだからです。自己補正機能を別途作ります。
しかし、なんの方策もせずUDPでファイル転送させたとき60%以上の
パケットロスが発生し、使いものにならないから何か技術が無いですか?
とお聞きしたのです。
ストリーミング技術で60%のパケットロスでも許容できるということでしょうか?
もしそうであれば、私の想像を張るかに越えた技術が使われているのでしょうね。
もしよろしければその辺の技術に付いて教えて頂けたら幸いです。


この投稿にコメントする

削除パスワード

No.27559

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---nop(2006/07/06 12:51:56)


とりあえず、各データ片に番号を付けて、
番号が飛んだ時は再送要求をサーバに出せばよいのでは?

# もちろん、再送要求は再送パケットが来るまで送り返す必要あり。


この投稿にコメントする

削除パスワード

No.27560

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---nop(2006/07/06 12:53:49)


ついでに、

> 一方UDPなら100個のクライアントがあれば100のソケットに対して情報のタレ流し
> でよいことになります。

などと書いていましたが、UDPを使っているのでしたら、
1つのソケットでブロードキャストする方がUDPの利点を生かせるのでは?


この投稿にコメントする

削除パスワード

No.27572

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---yoh2(2006/07/06 23:31:00)


一連の書き込みを拝見して、Ringさんの目的は、データをできるだけ高ビットレートで
送信し続けることのように感じました。もしその通りなら、ストリーミング技術はあまり
役に立たないかもしれません。

というのも、ストリーミング技術というのは、実現しうる最大ビットレートでの
送受信を行うための技術ではなく、決まったビットレートで送受信を行うための
技術ですから。
それに、そのビットレートも、たとえ2Mbits/secでも、1パケット1300バイト強の
パケットを1秒に200回も送れば実現できてしまいますから、

>1パケット32768(2^15)で1パケット毎にusleep(1)をかけてやれば

よりも遥かに低速です。

ストリーミング技術のキモは、低ビットレートで高品質なフォーマットを実現することと、
バラけたタイミング(到着順が前後することすらある)で届くパケットをいかに綺麗に
並べ直して再生するかということです。

最近、高ビットレートを謳ったストリーミング配信サービスをよく見かけますが、あれは
ストリーミング技術でパケットロス率を押さえているのではなく、そもそもそういった
高ビットレートデータを難なく通せる回線が使えることを前提にしたサービスです。

UDPでパケットロス率を減らすには、送信データレートを減らすしかないと思います。
(1)ネットワーク品質をあらかじめ測定し、それに合わせたデータレートにするとか、
(2)クライアントがある程度の間隔でロス率を報告して、それを踏まえて動的にレートを調整するとか。


この投稿にコメントする

削除パスワード

No.27579

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/07 14:24:05)


>ストリーミング技術のキモは、低ビットレートで高品質なフォーマットを実現することと、
>バラけたタイミング(到着順が前後することすらある)で届くパケットをいかに綺麗に
>並べ直して再生するかということです。
>
>最近、高ビットレートを謳ったストリーミング配信サービスをよく見かけますが、あれは
>ストリーミング技術でパケットロス率を押さえているのではなく、そもそもそういった
>高ビットレートデータを難なく通せる回線が使えることを前提にしたサービスです。
>
>UDPでパケットロス率を減らすには、送信データレートを減らすしかないと思います。
>(1)ネットワーク品質をあらかじめ測定し、それに合わせたデータレートにするとか、
>(2)クライアントがある程度の間隔でロス率を報告して、それを踏まえて動的にレートを調整するとか。

そうなんですよね。ここ数日、いい加減ながらも調べながらやっておりますと
通信速度の壁にぶちあたり、どうも限界点がありそうだということに気がついております。
要求されている速度がftpの速度程度なので、データレートを決めて転送すれば
かなりのパケットロスにはつながりました。
しかし、ftpの場合は双方向なのでロスの無い通信が出来るのですが、
UDPでデータレートのみの情報では限界があることも確かです。
奥が深過ぎて「よくこんな仕事を取ってきたな」と関心すること頻りです。

どうも失礼致しました。


この投稿にコメントする

削除パスワード

No.27580

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---nop(2006/07/07 15:09:31)


>しかし、ftpの場合は双方向なのでロスの無い通信が出来るのですが、

FTPの場合は、UDPではなくTCPです。
そのため、ロスがあってもTCPの再送機能で、
ロスが無いように見えるのです。

FTPと比べること自体が間違いでは?


この投稿にコメントする

削除パスワード

No.27595

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/10 10:38:59)


>>しかし、ftpの場合は双方向なのでロスの無い通信が出来るのですが、
>
>FTPの場合は、UDPではなくTCPです。
>そのため、ロスがあってもTCPの再送機能で、
>ロスが無いように見えるのです。
>
>FTPと比べること自体が間違いでは?

"FTPが双方向"というのはTCPであるのでロスの無い通信を保証しているということ
を言いたかったのですが、言葉足らずだったようです。
つまりTCPで相互に同期を取りながら通信をするというTCPでの速度程度を
まったく再送の無いUDPで実現して欲しいというのが要求です。
普通に考えて、TCPの速度よりUDPの速度の方が速いということは自明でしょうが
パケットロスを考えた場合のUDPの速度をTCP並にかつロスを15%以内にという
要求を満たす必要があるということです。
要求をまとめますと、
1. UDP通信を行うこと
2. TCP通信の速度を満たすこと
3. パケットロスは15%以内
というものです。
比べる事自体が無意味といわれてしまえば、
実験研究テーマになりようが無いものですけどね。


この投稿にコメントする

削除パスワード

No.27598

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---shu(2006/07/10 12:10:14)


>"FTPが双方向"というのはTCPであるのでロスの無い通信を保証しているということ
>を言いたかったのですが、言葉足らずだったようです。
>つまりTCPで相互に同期を取りながら通信をするというTCPでの速度程度を
>まったく再送の無いUDPで実現して欲しいというのが要求です。
>普通に考えて、TCPの速度よりUDPの速度の方が速いということは自明でしょうが
>パケットロスを考えた場合のUDPの速度をTCP並にかつロスを15%以内にという
>要求を満たす必要があるということです。
>要求をまとめますと、
>1. UDP通信を行うこと
>2. TCP通信の速度を満たすこと
>3. パケットロスは15%以内
>というものです。
>比べる事自体が無意味といわれてしまえば、
>実験研究テーマになりようが無いものですけどね。

後付けが多い。
c言語と関係無い。


この投稿にコメントする

削除パスワード

No.27599

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/10 13:11:48)


>FTPと比べること自体が間違いでは?

という批判を受けたので回答したということです。
他意はありません。


この投稿にコメントする

削除パスワード

No.27597

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---shu(2006/07/10 12:05:58)


>というわけで、この話題はここでは終わりにしたいと思います。

終わりにする。
したいどまりで、できてない。



この投稿にコメントする

削除パスワード

No.27600

Linux UDP通信時のパケットロスの防止方法について
投稿者---Ring(2006/07/10 13:12:47)


>>というわけで、この話題はここでは終わりにしたいと思います。
>
>終わりにする。
>したいどまりで、できてない。

コメントがあれば回答致します。
それがマナーでしょ。


この投稿にコメントする

削除パスワード

No.27596

Re:Linux UDP通信時のパケットロスの防止方法について
投稿者---shu(2006/07/10 12:03:46)


>そのときはこちらにも報告致しますが、それまでは継続質問とさせておいて下さい。
>よろしくお願い致します。

どっちつかず、中途半端に終わる、的を絞れ。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧