• 締切済み

UDP通信について

はじめまして。 UDPの通信について教えて下さい。 送信元ポートと宛先ポートについてです。 機器A-機器Bで通信をする場合です。 両方の機器で同じアプリ(ポート番号10000)が起動しているとします。 機器Aから機器Bのアプリに対してフレームを送信した時、 送信元ポートはランダムな値(仮:5000)で宛先ポートは10000になると思います。 機器Bでフレームを受信した後、応答フレームを送信する時には 送信元ポート10000、宛先ポート5000になると思います。 機器Aで起動しているアプリのポート番号は10000ですので機器Bからの応答フレームの宛先ポート5000とは一致しません。 この場合、どのようにソフトは判断しているのでしょうか? 組み込みで評価ボードに同じアプリを実装してお互いに通信させるのが 目的です。

みんなの回答

  • taisato
  • ベストアンサー率0% (0/0)
回答No.3

はじめまして >機器Aで起動しているアプリのポート番号は10000ですので機器Bからの応答フレームの宛先ポート5000とは一致しません。 >この場合、どのようにソフトは判断しているのでしょうか? 判断は、単純にサーバとなる側のポートは10000として、 クライアントとなるポートは使用可能な範囲のランダム番号になると思います。 書かれている場合、AからBへの通信なので、 Bがサーバ(ホスト)、Aがクライアントになりますよね。 これは、UDPでもTCPでも同じです。

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.2

UDPはTCPのような応答は返さないプロトコルでないですか? >機器Aから機器Bのアプリに対してフレームを送信した時、 >送信元ポートはランダムな値(仮:5000)で宛先ポートは10000になると思います。 この直後に機器Aのポート5000は閉じられ、無効になっているはずです。 なので、機器Bから送信する際は機器Aのポート10000を指定するだけでいいはずですよ。

参考URL:
http://www5e.biglobe.ne.jp/~aji/3min/44.html
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

UDPはコネクションレス型です。 よって… >機器Bでフレームを受信した後、応答フレームを送信する時には >送信元ポート10000、宛先ポート5000になると思います。 とする必要はありません。 機器Aが待ち受けている宛先ポート10000へ送信すればよろしいかと。 送信元のポート番号に関しては通常はTCP/IPプロトコルスタックが空いているポート番号を使用します。 http://www.itbook.info/study/tcp4.html http://www.wakhok.ac.jp/~kanayama/summer/05/net/node92.html

関連するQ&A

  • UDPの宛先ポートと送信元ポートについて

    はじめまして。 UDPで通信を行うアプリケーションを設計しているのですが、そこで質問があります。 送信元ポートと宛先ポートの番号が同じでも問題ないのでしょうか? 機器A-機器Bで通信をする場合、機器A宛てのフレームのデータが 宛先ポート10000、送信元ポート10000でも問題はない?ってことです。 待ち受けるポート番号は10000で固定として送信元が同じ10000となって しまってもいいのでしょうか?

  • UDP通信でのポート

    javaを使ってUDP通信を行います。 映像データと音声データの2つのデータが あります。 以下のようなことは可能ですか? (図の説明)AからBへデータを送信します。 Aのポートは1500番を使って映像データを 送信します。と同時に、同じ1500番を使って 音声データは送信できますか? 同一ポートで複数データを送信できるか知りたい です。 (このままだと、いくつもポートをあけるため データのタイムラグありすぎて使い物になりません。。 ) もしくは、1つのポートでデータの送受信が できるか知りたいです。 なにかヒントになるようなことでもいいので 教えてください。よろしくお願いします。    A ------------------------> B (1500) 映像データ送信  A ------------------------> B (1500) 音声データ送信

  • TCP及びUDP通信について

    TCP及びUDP通信について 現在WinSockAPIを用いた通信を行うプログラムを組んでいます。 しかしながらネットワークに関しては初心者で、わからない点がいくつか出てきたので質問させて頂きます。 -------------------------------------------------- 1.TCPで双方向通信を行う場合、サーバ側は指定したポートにbind→listenし、接続を待ち受けます。 クライアント側はサーバのIPを指定し、接続確立後にポートはOSが自動で割り振ると聞きました。 つまり、クライアント側がポートを開放せずに通信が出来るのは、OSなどが自動でポートを割り当て、割り当てたポートに到着したデータを該当アプリケーションに渡すからでしょうか? ポート関連は全てルータが管理しているものだと思っていたのですが、OSがポートを割り当てるという動作がよく理解できません。 -------------------------------------------------- 2.UDPで双方向通信を行う場合、端末A・端末Bともに指定したポートにbindする必要があると聞きました。 つまり、UDPで双方向通信を行う場合、端末A・端末Bの双方でポートを開放する必要があるということでしょうか? -------------------------------------------------- 是非ともご教授ください。

  • UDP通信におけるbind関数について

    初めて質問させていただきます。よろしくお願いします。 最近、ネットワークプログラミングの勉強をしているのですが、bindについてよくわからなくなってきました・・・。よろしければご教授願います。 質問内容は以下の通りです。 (1)bindにおける設定内容は、「相手側のIPとポート番号」なのか「自分側のIPとポート番号」なのか?  色々なところを調べてみましたが、「IPとポート番号」を設定する、としかかかれてなく、いったいどっちなのかがわからなくなってきました・・・。 (2)UDP通信において、bindは必要なのか?  サーバ-クライアントの関係が曖昧なUDP通信において、bindというのは必要なのでしょうか。 私の認識では例えば、「recv関数」などを使い受信待ちをする場合はbindが必要だが、送信だけの場合には不要であるとなっています。 この認識はあっているのでしょうか。 拙文ですが、どうか教えていただきたく <(_ _*)>

  • socket通信でのフィルタリング

    linux環境にてC言語でUDPソケットのプログラムを作成しています。 Aの端末からUDPで受信してパケットヘッダの表示及び、宛先アドレスや宛先ポート番号 を書き換えてBの端末にUDPで送信します。 そこで下記の関数を使用して受信しているのですが、パケットキャプチャのように なんでも受信してしまいます。 socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) これを特定のポート番号だけ受信(フィルタ)するにはどのようにすれば良いのでしょうか?

  • ポートについて

    ユーザが送信元ポートをA,宛先ポートをXで相手のサーバに通信して, そのレスポンスが送信元ポートY,宛先ポートAであった場合問題なく 通信を確立できますか? この通信のプロトコルにもよるのでしょうか? また,ユーザが送信元ポートをA,宛先ポートをXで相手のサーバに通信して, そのレスポンスが送信元ポートY,宛先ポートBであった場合はどうでしょうか?

  • TCP,UDPの通信プログラム

    TCPを用いた通信とUDPを用いた通信の二つのプログラムを作っています。 質問なんですが、送信元のアドレスを表示するとき getInetAddress() getAddress() の二つがあると思うのですが、この二つにはどのような違いがあるのでしょうか?

  • WinsockによるUDP通信にて

    WinsockでUDP通信を行うプログラムを作っているのですが、 原因不明の問題が発生していて困っています。 通信手順は以下のとおりです。 (1) クライアントからサーバへ要求パケット送信 (2) 要求パケットを受け取ったサーバは、クライアントへACKを送信 (3) サーバが要求に対する応答パケットをクライアントへ送信 (4) 応答パケットを受け取ったクライアントは、サーバへACKを送信 クライアント-サーバ間でやりとりするデータは最大で992バイト、 それ以上になる場合は、分割して送信します。 パケットの分割が発生しない場合は、(1)~(3)がパケットの損失もなく通信できるのですが、 パケットの分割が発生する場合には、2回目以降の(4)のパケットがクライアントに届きません。再現率は今のところ100%です。 クライアント側のselect関数でもソケットを検出しません。 たしかにUDPは信頼性が低いですが、パケット分割が発生しないパターンでは100%届くので、UDPの仕様とは関係ないような気がします。 原因がさっぱりわからないので、アドバイスをお願いいたします。 ちなみに、クライアント、サーバともに同一端末内にあります(双方がループバックアドレスに対してパケットを送信)が、 これはテスト段階だからであって、本来はそれぞれ別々の端末で動作します。

  • UDP通信する時に、相手にどうやって自分のポート番号を教える?

    UDP通信する時に、相手(送信側)にどうやって自分(受信側)のポート番号を教えるのでしょうか? 例えば、下記のページのサンプルだと、受信側は5555で待ち受けていますが、この場合は送信側はあらかじめ受信側が5555で待ち受けていると知っています。送信側が知らない場合に、どうやって受信側のポート番号を知らせればよいのでしょうか? http://www.hellohiro.com/datagram.htm

    • ベストアンサー
    • Java
  • ひっくりかえした通信接続

    すみません教えてください。 2拠点間接続(両方Solarisサーバ)の間にFWを入れています。 ある市販のソフトウェアを使用して通信を行っています。 そのソフトは常に接続開始側が、相手先の特定のポート1つに 対して接続して通信をするので、そのポートだけ空けています。 通信自体は正常に行われて、やりとりしたいものは結果として は正しく行われています。 ただ、その数秒後に、その通信をひっくり返したような、通信が 発生します。  ●セッション1(正常通信)   A → Bの1234ポート宛て Aの送信元ポート番号はzzzとします。  ▲セッション2(数秒後に発生する通信)   B → Aのzzzポート宛て Bの送信元ポート番号は1234 zzzのポート番号は1024以上の不定なポート番号なので、FWで 穴あけするわけにもいかず、困っています。 このような通信が発生する原因がわかる方がいたら教えて下さい。 ちなみにソフトウェアベンダに確認した所、●のセッシ ョンしか行ってないので、lsofでzzzのポートを補足してみたら、その ソフトから行われていました。もうわからなくなってしまいました(/_;) もしかしてsolarisかtcp等の通信の仕様?ででている のか?というところでアドバイスを頂けますと助かります。 長文ですみません。