質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

2回答

1765閲覧

ソケット通信周りの言葉の意味

sequelanonymous

総合スコア123

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

1クリップ

投稿2021/10/09 06:30

ソケット通信についての理解が混乱してきてわからなくなってきた。

間違っている箇所をご指摘いただけますでしょうか?
とりわけ、どれがOSIでいうところのどの層にあたるか、どうつかわれるか、について確認したいです。

大前提として、ソケット自体の意味は、プログラムとネットワーク間の通信部分でコンテキストによって〇〇ソケットになり意味合いが異なる。

①Unix domain sockets:
セッション層。同じhostのプロセス間通信。おもに内部通信(サーバー間の通信)で利用。早い。ファイルディスクリプタを利用するのでパスの記述が必要。例えば、uwsgi+nginx+mysqlで利用するのもこれ。

②Http sockets/Web sockets:
トランスポート層。おもに外部からの通信(クライアントからの通知)で利用。遅い。web scoketsは、httpの進化系で常にコネクションをはる。http socketは、requestがきたらコネクションはる。なぜ、web socketsを利用した場合アプリケーション側のコード実装が必要になる?

③TCP socketsとUDP sockets:
TCPソケットは、Httpソケットのことの言っている?もしくは、それを内包する言葉?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

とりわけ、どれがOSIでいうところのどの層にあたるか

それを考えてもあまり意味がないです。OSIの層はあくまで機能分担をざっくり把握するためのモデルに過ぎません。それを主に考えるのは本末転倒です。
ただ、敢えて言うならどの使い方もトランスポート層で良いでしょう。セッション層以上の機能は、どうせアプリケーションで担保するので。

①Unix domain sockets:

同じhostのプロセス間通信。おもに内部通信(サーバー間の通信)で利用。早い。ファイルディスクリプタを利用するのでパスの記述が必要。

「おもに内部通信」というより、内部通信にしか使えません。
「ファイルディスクリプタ」はTCPソケット含め一般のファイルを扱う際の管理単位なので、Unix Domain Socketに限った話ではありません。そうではなくて、TCP/IPのようにアドレス・ポート番号を通信相手の識別に使うのではなく、ファイルシステム上の何かしらのファイルを設けてそのパスを識別に使う、ということです。
※ただ、クライアント側は無名のソケットで済むので、わざわざファイルシステム上にファイルは作らない。通信を受け付けるサーバ側だけの話と考えてよい

②Http sockets/Web sockets:

http socket というのは何を指しているのか分かりませんが、一般的なブラウザ・Webサーバ間の通信の話をしているなら、そういう呼び方はしないだろうと思います。( TCPソケット上でHTTP通信をしているだけだから )
Web socketについて詳しくはありませんが、自分の認識している範囲では、ブラウザ上のクライアントコードがリアルタイム描画等の用途でサーバと通信したい(HTTPで度々リクエスト-レスポンスを繰り返すのでは合わない)場合、素のソケットを使うのはセキュリティ上許可されてないので、Web socketという形でブラウザの制御のもと通信するようになっている、というものです。

③TCP socketsとUDP sockets:

TCP/IPの通信を使う、HTTPを含む様々な通信で使われるソケットで、一般に言われるソケットはこれになります。

投稿2021/10/09 08:03

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2021/10/09 09:25

ありがとうございます。 ご回答の文章と合わせて下記の文章を読んで理解しました。 https://medium-company.com/tcp-ip/#TCPIP-3 整理すると下記のような理解であっていますでしょうか? socketには、2つある。両者ともOSIでいうところのトランスポート層に値する。 ①Unix Domain Socket: 内部通信のみ利用できる。理由は、OSのカーネルによってoperationされ、ファイルパスを識別に利用するから。 ②TCP/UDP Socket: ブラウザ・Webサーバ間の通信に利用。内部通信にも利用できるが遅い。 TCP/IPプロトコル(通信でよく使用するプロトコル群( IP, ICMP, TCP, UDP, HTTP, SMTP, SSH,TELNETなどの総称)を利用したソケットのことをいう。その意でWebsocketもTCP socketの一つといえる。 もう一点きになったのですが、 uwsgi+nginx+mysqlでUnix domain socketで通信するばあい、サーバーがわかれててもsocketオプションがあり、それを利用するとUnix domain socketで通信できるのですが、これはどういう仕組みになっているかご存知でしょうか?一重に内部通信のみにしか使えてないって言っていいものか気になっています。
angel_p_57

2021/10/09 11:27

> socketには、2つある。 「主に」ですね。socketは色々な通信手段を取りまとめた機能なので。( もちろんOSで使えるようにしてないと違う種類の通信は使えません ) > ①Unix Domain Socket: > 内部通信のみ利用できる。理由は、~ 因果関係としては逆だと思います。内部通信のみ利用できるものと設計する上で、ファイルを識別子として使うよう決めたのでしょう。 > TCP/IPプロトコル(通信でよく使用するプロトコル群( IP, ICMP, TCP, UDP, HTTP, SMTP, SSH,TELNETなどの総称)を利用したソケットのこと その言い方だと誤解を生むでしょう。あくまで、IP上のTCPを使うためのTCPソケット、IP上のUDPを使うためのUDPソケットです。HTTPを使えばTCPソケットなんではなく、HTTPはTCPソケットを使う、という話なので逆です。 また、ICMPはIP上のプロトコルで、ソケットで扱えますがまた別種のものです。 > その意でWebsocketもTCP socketの一つといえる。 裏でTCPソケットが使われるでしょうが、あくまで直接的に通信を使えないブラウザ上のクライアントアプリのための機構なので、「一つ」とまとめるのは止めた方が良いと思います。 > サーバーがわかれててもsocketオプションがあり、それを利用するとUnix domain socketで通信できる 「サーバーがわかれてても」が、物理/仮想マシンとして各ミドルウェアが動作するホストが分かれてることを指してるなら、流石に眉唾です。
sequelanonymous

2021/10/09 13:05

なるほど、理解が整理されてきました。ありがとうございます。 > 「サーバーがわかれてても」が、物理/仮想マシンとして各ミドルウェアが動作するホストが分かれてることを指してるなら、流石に眉唾です。 この点なんですが、クラウドの設計でよくある気がしていて、下記URLの設計をGCPやろうとすると、GKEのpodをnginxとuwsgiをわけて、mysqlはcloud sqlのインスタンスでマネージドさせて、それらはすべての内部通信はsocket通信っていうのはあるとおもいますが、これはどう通信されているかご存知でしょうか? https://qiita.com/morinokami/items/e0efb2ae2aa04a1b148b https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
angel_p_57

2021/10/09 14:09

podってコンテナじゃなかったでしたっけ? それなら、コンテナが同一マシン上にあれば、Unix Domain Socket での通信は可能かと思います。これは nginx⇔uwsgi の話。 あと、流石にDBが同一マシンというのは考えにくいですが、cloud sqlの場合、cloud sql proxyを使うような話が出てますね。( https://qiita.com/apstndb/items/c15135d575a8e138d5bc とか ) であれば、Unix Domain Socketで通信するのは、あくまで uwsgi⇔proxy間ではないでしょうか。 ※裏でproxyがmysqlとTCPソケットで通信する 例えば https://cloud.google.com/sql/docs/mysql/connect-run?hl=ja で、以下のように説明がありますし > パブリック IP パスの場合は、Cloud Run によって暗号化が行われ、Cloud SQL Auth Proxy を使用して Unix ソケット経由で接続します。 私は使ったことがなくて詳しくは分からないので、クラウド構成独自の話を深堀するのであれば、別途質問を投げた方が良いと思います。
sequelanonymous

2021/10/09 16:30

ありがとうございます。 コンテナだとカーネルとホストOSは同じ土台として共有してるから可能ってかんじですかね。 https://thinkit.co.jp/article/17301 proxyは、たしかにサイドカーコンテナとして建てる場合が多いのでおっしゃるとおりだと思います。 proxyつかわずにprivate ip接続する場合は、これは、IP上のTCPを使うためのTCPソケットをつかって接続しているっていう言い方があっていますでしょうか? 徐々に頭の中が整理されてきていてとても助かります。
angel_p_57

2021/10/09 16:36

> proxyつかわずにprivate ip接続する場合は、これは、IP上のTCPを使うためのTCPソケットをつかって接続しているっていう言い方があっていますでしょうか? 合ってると思います。
sequelanonymous

2021/10/09 16:42 編集

整理されました。長々とお付きありありがとうございました!
guest

0

Wikipediaに一覧表が載っていましたので、参考にするといいかと思います。

層別・プロトコルスイート別の例 - OSI参照モデル

Unix domain socketsは利用され方が名前付きパイプに似ていますが、C言語等のコードレベルではTCPまたはUDP相当になりますので、トランスポート層相当になると思われます。

投稿2021/10/09 09:59

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問