通信の仕組みをもう一度理解するために備忘録として記します。
最近ソケット通信という言葉が気になったので、TCP/IPからまず理解します。
#TCP/IPとは
日本人同士が日本語でコミュニケーションが取れるように、機械同士がコミュニケーションを取るには「プロトコル」というものを使用します。
その中でもインターネット上でコンピュータ同士が通信するためのプロトコルがTCP/IPです。
通信はクライアントサイドとサーバーとのリクエスト・レスポンスで成り立っています。
正確に言うと、インターネット通信はいろいろなプロトコルで成り立っていてTCPもIPもそれらの一つにすぎませんが、TCPとIPが中心的な役割を担っているため、総称してTCP/IPと総称するようになったそうです。
#TCP/IPのアーキテクチャ
TCP/IP群は4つの層に分かれます。
・アプリケーション層:人間が認識できるようなデータを扱う
HTTP、HTTPS、SMTP、POP、DNS、DHCP、SSH、Telnet etc…
・トランスポート層:アプリーケーションごとにデータを振り分ける
TCP、UDP etc…
・インターネット層:ネットワーク間のデータ転送を行う
IP、IPsec、ARP etc…
・ネットワークインターフェース層:同一ネットワーク内でテータ転送を行う
Ethernet、Wi-Fi
#HTTP通信
HTTPはアプリケーション層に分類されます。
Webブラウザを使って、Webサーバーに情報を「GET」や「POST」などのメソッドでリクエストし、ポート番号80(HTTPSは443)に接続し、ステータスコード200でかえってくるように通信されます。
主なHTTPメソッド
・GET:データの取得
・POST:データの送信
・PUT:データの更新
・DELETE:データの削除
Webアプリ開発でルーティングの設定においてだいたいこれらのHTTPメソッドを使用するかと思います。
#ソケット通信
TCP/IP群のトランスポート層にあたるのが、ソケット通信で
主にプログラムの世界とTCP/IP世界を結ぶ、特別な通信ともいえます。
TCPとUDPでは通信の方法が違います。
TCPはコネクション型
UDPはコネクションレス型
通信がされるかどうかを事前に確認されるのがTCPで信頼性が高いプロトコルです。
一方でUDPは通信相手を確認することなく送信するため、素早い処理が可能になります。
簡単に言うとデータの到着確認を行うか否かの問題です。
郵便で例えると、
TCP:簡易書留
UDP:普通郵便
#それぞれの違い
HTTPはクライアントがリクエストすることによってサーバーがレスポンスします。
クライアントが発信することから始まるので、逆にサーバーがリクエストするということはありません。
ソケット通信の場合はサーバーとクライアントが特定のポートを通じて、双方向にリアルタイムで通信をすることが可能です。
クライアントとサーバーが関係を持ち続けるような感じで、リアルタイムチャットや動画通話などに使用されます。
#IPアドレスとポート番号とソケットとパケット
ソケットってそもそも何?って思ったので、以下のように考えるとわかりやすかったです。
誰かに手紙を送るという行為を考えます。
その行為を成立させるには宛先の住所、部屋番号、ポスト、郵便物が必要になります。
通信の世界でも同じで、
IPアドレス:住所
ポート番号:部屋番号
ソケット:郵便ポスト
パケット:郵便物
というような理解でよいかと思います。
■参考
https://www.itmanage.co.jp/column/tcp-ip-protocol/
https://bny64.github.io/2020/12/13/http-socket-jp/