41733


**[リンク先](https://qiita.com/kuni-
nakaji/items/d11219e4ad7c74ece748)で下記のように記されているのですが、「TCPソケット」について**

> UNIXドメインソケットは、TCPソケット(INETドメインソケット)よりも

* * *

**下記理解で合っているでしょうか？**  
・そもそも「ソケット」と「TCP」はレイヤー層が異なる  
・「INETドメイン」は「TCP層」と「Socket層」を通るので「TCPソケット」？  
・「UNIXドメインソケットは」「TCP層」を通らず「Socket層」だけを通るので「TCPソケット」とは呼ばない？  
・検索してもヒットしなかったのですが、一般的に「TCPソケット」という言い方はしない？？


CC BY-SA 3.0
2018-02-15T03:25:11.687
41723
2018-02-15T09:22:27.483
7886
question
tcp network
TCPソケット(INETドメインソケット)について


言葉には複数の意味があり、`socket`にも[BSD系UNIXで実装されたネットワークライブラリ](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88_\(BSD\))を指す意味があります。そしてこのライブラリは`TCPソケット`や`UNIXドメインソケット`を扱うことができます。


CC BY-SA 3.0
2018-02-15T04:25:33.193
41725
2018-02-15T04:25:33.193
4236
41723
answer


参照先のサイトの記事ですが、[OSI参照モデル](https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB)の「セッション層」に「Socket」が入っている珍しい図ですね。

「ソケット」という言葉が何を指すのかは文脈により変わりますが、参照先サイトではUNIXドメインソケットの話が出ているため、UNIX系OSで標準的に実装されている
socket という通信ライブラリ、および、このライブラリで作成された通信用のインターフェースのことを示していると思われます。

socket ライブラリでは通信を開始する際に「プロトコルファミリー」と「プロトコルタイプ」を指定してソケットを初期化、作成します。

定義されているプロトコルファミリーはいくつもあり、実際に利用できるものはOSにより異なりますがいくつか例を挙げると以下のようなものがあります。

  * AF_UNIX - 同じマシン内の別プロセス間での通信が可能
  * AF_INET - ネットワーク経由で別のマシンと通信が可能
  * AF_IMPLINK
  * AF_PUP 
  * <中略>
  * AF_NETBIOS
  * AF_INET6 - IPv6ネットワーク経由で別のマシンと通信が可能

「UNIXドメインソケット」や、「INETドメインソケット」というのは代表的な2つのプロトコルファミリー(AF_UNIX,
AF_INET)を指定して初期化されたソケットということになります。

また、プロトコルタイプも複数の種類があります。

  * SOCK_STREAM
  * SOCK_DGRAM
  * SOCK_SEQPACKET
  * SOCK_RAW
  * SOCK_RDM 

例えばですが、TCP/IP を使って通信をするときにはプロトコルファミリーにAF_INET を指定して、プロトコルタイプに SOCK_STREAM
を指定します。UDP を使って通信をするときにはプロトコルファミリーに AF_INET を指定して、プロトコルタイプに SOCK_DGRAM を指定します。

> そもそも「ソケット」と「TCP」はレイヤー層が異なる

ライブラリとプロトコルなので、そもそも別のもの言っていいと思います。

  * × レイヤー層が異なる
  * 〇 レイヤーが異なる

> 「INETドメイン」は「TCP層」と「Socket層」を通るので「TCPソケット」？

「INETドメイン」はプロトコルファミリーによる区分、「TCP」はプロトコルなのでそもそも軸が違います。

前述のとおり「INETドメイン」ではUDPでの通信も可能ですので「INETドメイン」通信のすべてがTCP/IP で通信するというわけではありません。

また、「TCP層」という言い方はあまりせず、レイヤー的には「トランスポート層」となります。  
「トランスポート層のプロトコルとして TCP を採用する。」というような言い方になります。また「Socket層」という言い方もあまり聞きません。

> 「UNIXドメインソケットは」「TCP層」を通らず「Socket層」だけを通るので「TCPソケット」とは呼ばない？

「UNIXドメインソケット」はプロトコルファミリーに AF_UNIX
を指定した場合のソケットです。もちろんトランスポート層としてTCPは利用しませんし、これを「TCPソケット」と呼ぶことはありません。

余談となりますが socket ライブラリは OSI 参照モデルとはまったく合致しないプログラミングインターフェースを持っています。これはOSI
参照モデルを無視したわけではなく、OSI 参照モデルが考えられるよりも古い時代に作られたライブラリであるためです。


CC BY-SA 3.0
2018-02-15T09:22:27.483
41733
2018-02-15T09:22:27.483
27410
41723
answer