基本情報技術者試験などのIPA試験を勉強したり、情報系の大学や高専に通っていたりすると通信プロトコルについての勉強をすると思うが…
"アルゴリズムや信頼性等はなんとなくわかるけど…実務においてはどんな感じで使い分けるのだろう?"などという疑問を持っている人は少なくないと思う。
本記事では1年程度実務経験のある筆者が通信プロトコルの代表的な物であるTCPとUDPを組み込み開発にてどう使い分けるのか?について話していく
※なお、本記事ではTCPやUDPの細かい内部構造はブラックボックスとし、組み込み開発等での使用事例を述べていく形にする
TCPの活用事例
TCPはよくされる説明にもある様に、信頼性がかなり重要であるという考えの通信プロトコルである。
組み込み開発においては、IoT家電、スマートロックなど主にローカルネット上で運用する想定のシステムにてTCPを元にしたプロトコルが採用されたりする。(MQTTなど)
組み込み開発以外で言うと、インターネットやメールの送受信等々、日常生活にて直接触れる様なシステムの大半はこれで運用されているため、IPA試験や授業で学んだレベルだと、信頼性がある分こちらの方がUDPの上位互換に見えてしまうと思う。(少なくとも筆者は実務経験を積む前はそうであった。)
しかし、ハンドシェイクにてメモリをかなり食うなどの要因で組み込み開発においてはUDPの方が相応しい場合も結構ある。
UDPの活用事例
UDPはよくされる説明にもある様に、信頼性は捨てて何度でも送りつけなさいという考えの通信プロトコルである。
組み込み開発においては、バスの車載器など古いデータに価値が無いシステムやエレベータの制御システムなどリアルタイム性がないと人の命が関わる様な物にはUDPを元にしたプロトコルが採用されたりする。(QUICなど)
実際UDPをそのまま使用すると通信が垂れ流しになってしまうのでセキュリティ上良くない
したがって、大体UDPを少し改造した様な物が組み込みの現場では採用されることが多い
まとめ
組み込み開発においては最新のデータを取らなければいけないシステムが多いのでUDPをベースにした通信プロトコルを現場では使う場合が多い
TCP | UDP | |
---|---|---|
信頼性 | 高い | 低い |
リアルタイム性 | 低い | 高い |
追記
MQTPと誤字をしてましたが…正しくはMQTTです。失礼しました。
参考サイト
https://www.hulft.com/special-column/iot-architecture_01/iot-architecture_05
https://www.netattest.com/tcp-2023_mkt_tst