ここから本文です

UDPについて質問です。 UDPは通信中のパケット紛失や誤りの検出などができないと...

alp********さん

2010/11/922:41:58

UDPについて質問です。
UDPは通信中のパケット紛失や誤りの検出などができないと思いますがが、その他にも何か問題点といえるようなことはありますか?

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
2,681
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

biw********さん

2010/11/923:51:29

明示的にルーターのポートを開けないと、外部からのパケットが全て破棄される。
手作業か、uPnPの利用が必須。
ポート番号しか指定出来ないので、共用ルータだと、どうにもならない事が多い。

セッションの概念が無いので、複数相手だと、届いたパケットから自力で振り分ける必要がある。
(接続相手のアドレスとポートが判っていれば、複数開けるかも知れないが、別途TCP等で情報交換して置かないと待ち受けは無理)

また、到着順の保障も当然無い。
歯抜けの到着パケットを即座に処理するか、中間パケットを待つかが悩ましい。

単純なデータ化けは、レイヤ2で弾かれるのと、紛失パケット処理が必要な為に、誤り検出は、それほど問題なかったりする。
それよりも、紛失パケット処理とタイムアウトの設定が、非常に悩ましい。
(タイムアウト処理後にパケットが来ても手遅れなので)

質問した人からのコメント

2010/11/10 19:27:19

降参 お二方とも詳しい説明までつけて頂きありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

poi********さん

2010/11/923:53:02

おそらくTCPとの比較だと思いますが
比較するのであれば、両者の長所と短所をまとめるべきです。


UDPはパケット紛失などの検出を「あえて」行わないことで
より高速に通信を行うことを目的としたプロトコルです。
そのため、UDPを使うソフト側で、必要に応じて誤り訂正などを行う必要があります。

「あえて」パケット紛失の検出などを行わなかった理由は
今のネットワークの原型ができたころは、まだまだパソコンなどの処理能力が低かったので
誤り訂正などのあるTCPと、そうではないUDPでの通信速度の差がかなり大きかったからです。

また、現在のネットでの生放送のように、たとえ欠落やエラーなどがあってもその部分の訂正を送ることが
時間軸的に考えて難しかったり必要なかったりするようなものの場合には
わざわざそのようなことを行ってくれるTCPではかえって都合が悪い場合があり
そういった場合にはUDPが使われています。


TCPは逆に、プロトコル側で通信しているデータが正常であることを保証することで
TCPを使うプログラム側で誤り訂正などを行う必要がないように用意されたプロトコルです。
通信時には、TCPのプロトコルで行う処理が多いため、通信速度はやや遅くなります。

プログラム側でパケットの紛失の検出や誤り訂正を行わせる処理を組み込むのは面倒なので
UDPとは違ってそういったことを気にせずに通信を行うことができるのがTCPです。


3行でまとめるなら
TCPは、速度を犠牲にしてでも、通信が正常に行われている確実さが必要な場合に使うプロトコル
UDPは、通信の確実さを犠牲にしてでも、速度を優先する必要がある場合に使うプロトコル
TCPとUDPは、得意とする用途が違うので、用途によって使い分けるべき
ということです。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる