TCPとUDPの違い
・TCP
送信したパケットは勝手に分割されて適当に結合されて受信される(データの境界保証なし)
つまり1回send() ≠1回recv()
- はてなブログ
- Socket通信でパケットを意図的に分割する: DOBON.NETプログラミング掲示板過去ログ
- ソケット通信メモ(Hishidama's TCP/UDP Socket Memo)
- python — Pythonソケットは大量のデータを受信します
送信したデータが受信されないと送信側はブロッキングする。
つまり、通信状況が悪いと送信タイミングのリアルタイム性が損なわれる。
・UDP
送信したパケットは勝手に分割されないが、あまりデータが大きいとIPフラグメンテーションされる可能性がある。(パケット分割とIPフラグメントは別物らしい)
その場合受信側でデータがすべて出揃うまで受信を完了しない。(データの境界保証あり)
つまり1回send() =1回recv()
また、データがいつまでたっても揃わなかったらそのデータは破棄される。
send()したデータの順番とrecv()したデータの順番が入れ替わる可能性がある。
送信側は受信側がちゃんと受信できたか確認しないで構わず送信し続けるため、
通信状況が悪くても送信タイミングのリアルタイム性が損なわれない。
- TCPとUDPの違いを10個挙げてみる - ikeas's blog
- 基礎から学ぶWindowsネットワーク - @IT
- UDP を使ってみよう (5)
- 第14回 TCPとUDP | 日経クロステック(xTECH)