• ベストアンサー

SOCKETのUDPについて

こんにちは。 SOCKETのUDPに使って通信をしようと思っています。 UDPは到達保証はされないとありますが、sendto関数で送信した内容のそのものも保証されないのでしょうか? sendto(sock, "HogeHoge", 8, 0, (struct sockaddr *)&addr, sizeof(addr)); とした場合、"HogeH"となったり"HHooggee"となったりするのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

・届くかどうかわからない ・複数回に分けて送ったときに、送った順に届くとは限らない というだけで、 >"HogeH"となったり"HHooggee" のように、送ってもいな物が届くことは絶対にありません。

TeijigoTeatime
質問者

補足

早々で直球のレスありがとうございます。 とても参考になります!

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5241/13712)
回答No.1

UDPは到達保証が無いので、送信側は相手が受け取ったかどうかを確認しません。 しかし、UDPパケット自体にはチェックサムが付いているので受信側はパケットが正常かどうかの判断は出来ますので、チェックサムを確認してパケットに異常があると判断したら破棄します。 なので、アプリケーション層でデータを受け取った際に送信時と内容が異なると言う事はありません。 もし通信経路でノイズが混入しデータが不完全になった場合は、受信側のアプリケーション層はパケット自体が届かなかった時と同じ動作になります。 但し、悪意ある攻撃者が通信経路でパケットを書き換えて正しいチェックサムを付けて送ってきた場合は、受信側のアプリケーション層では改竄されたデータを正しいデータとして受け取ってしまう可能性があります。

TeijigoTeatime
質問者

お礼

早々のレスありがとうございます。 なるほどレイヤー別の話で自分が扱おうとしているレイヤーでは大丈夫ということですね。 参考になります。 改竄については後ほど勉強したいと思います。

関連するQ&A