箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

ソケット通信とは

f:id:y_hakoiri:20191102134313j:plain

仕事でソケット通信の知見が必要だったので、少し勉強しました。 まだふわっとしか理解できていませんが、一度整理しておきたいと思います。

ソケット通信とは

インターネットはTCP/IPと呼ぶ通信プロトコルを利用しますが、そのTCP/IPをプログラムから利用するには、プログラムの世界とTCP/IPの世界を結ぶ特別な出入り口が必要となります。 その出入り口となるのがソケット(Socket)であり、TCP/IPのプログラミング上の大きな特徴となっています。

引用:http://research.nii.ac.jp/~ichiro/syspro98/socket.html

わけわからん。笑 そもそもTCP/IPってなんぞや。

TCP/IPとは

プロトコルの一種で、TCPとIPを合わせて呼んだもの。 TCP/IPの「/」はandの意味があるらしい。

TCP...エラー回復、データ再送や流量制御なども担う高位のプロトコル

IP...IPアドレスで指定される配送先へデータを送り届けることだけを実現する低位のプロトコル

そもそもプロトコルというと、コンピューター同士が通信する際の決め事みたいなもので、 HTTPとか色々な種類がある。TCP/IPもそのうちの一つ。

「IPは低位のプロトコル」と言われるように、 通常IPプロトコルのみが使用されることは基本的にはなくて、 だいたい通信の安全性が高いTCPが併せて使われるらしい。

安全性が高いとは、例えば データが正しく受信されたかどうか逐一確認してくれたり、 失敗していた時はエラーを返してくれたり。

ちなみによく比べられるUDPはそういったことはできない。 その分、速度はTCPよりも速い。(というかTCPは色々してくれるからどうしても遅くなる)

qiita.com

なるほど。なんとなく理解できた。

レイヤーがあるらしい

TCP/IPについて調べていたところ、なにやらプロトコルにはレイヤーというものがあるらしい。 HTTPはアプリケーション層でTCP/IPはトランスポート層とのこと。なに・・・。

そもそも、異なる機器同士が通信できるようにモデルが定められていて、 その規定によりプロトコルはいくつかの階層に分けられているらしい。 それぞれの役割に応じて収納しておく場所(レイヤー)を分けたほうが分かりやすい、という感じかな

・アプリケーション層・・・アプリケーションが使う(HTMLを読み込むためのリクエストとレスポンスとか)通信の決め事。HTTP通信など

・トランスポート層・・・通信の信頼性に関する決め事。TCPなど

・インターネット層・・・目的の機器とのやりとりに関する決め事。IPアドレスなど

・ネットワークインターフェイス層・・・

ちなみに私が参照したのたTCP/IPモデルの方だったのですが、 OSIモデルの詳しい解説はこちらに載ってました

OSI参照モデルまとめ - Qiita

まとめると、ソケット通信はTCP/IPを使用した通信ということになるから HTTPとかよりも下のレイヤを扱うことになる。。

それによってどんなメリットがあるのかまではちょっと調べられなかったけど、 「ソケット通信でデータを〜」みたいなことを聞いたときは、 少なくともCookieとかローカルストレージとは違うレイヤの話なんだな〜というのくらいはなんとなく理解できそう。(間違ってたら教えてください)

もう一度戻ってみる

インターネットはTCP/IPと呼ぶ通信プロトコルを利用しますが、そのTCP/IPをプログラムから利用するには、プログラムの世界とTCP/IPの世界を結ぶ特別な出入り口が必要となります。 その出入り口となるのがソケット(Socket)であり、TCP/IPのプログラミング上の大きな特徴となっています。

とりあえず、TCP/IPは通信プロトコルの一種であり、それを司るネットワークとプログラムを結びつけるためにソケットという出入り口が必要なのね。 つまりソケット通信というのはTCP/IP通信を必要とする通信、ということと同義になる感じかな。

まとめ

プロトコルがいくつかあるというのは知っていたけど、 所属するレイヤーが違うとかっていう話は全く知らなかった。。

参考:知ったかぶりをしていたソケット通信の基礎を改めて学んでみる - Qiita

私がこれまでの学習で読んだ本をこちらにまとめています。※随時更新

www.y-hakopro.com

転職の時に使って良かったサイト・おすすめのサイトを紹介しています

www.y-hakopro.com