Unix/Linux の文脈で「ソケット」という用語を理解する

Unix/Linux の文脈で「ソケット」という用語を理解する

私は「ソケット」という用語がUnix / Linux環境で2つの異なる意味を持つことができることを知っています。

  • Unixソケット; 2つ以上のプロセス間のインタフェース。
  • IPソケット。プロセスと1つ以上の通信サービス(またはマシン)との間のインターフェース。

一般的な定義はこれら2つをまとめたものですか、それとも私たちの文脈でより多くの「ソケット」がありますか?

ベストアンサー1

http://man7.org/linux/man-pages/man2/socket.2.html

int socket(int domain, int type, int protocol);

説明する

socket() 通信エンドポイントを作成し、エンドポイントを参照するファイル記述子を返します。成功した呼び出しによって返されたファイル記述子は、現在プロセスに対して開かれていない最も低い番号のファイル記述子になります。

domainパラメーターは通信ドメインを指定し、これは通信に使用されるプロトコルシリーズを選択します。これらのファミリは <sys/socket.h> で定義されています。現在理解されている形式は次のとおりです。

   Name                Purpose                          Man page
   AF_UNIX, AF_LOCAL   Local communication              unix(7)
   AF_INET             IPv4 Internet protocols          ip(7)
   AF_INET6            IPv6 Internet protocols          ipv6(7)
   AF_IPX              IPX - Novell protocols
   AF_NETLINK          Kernel user interface device     netlink(7)
   AF_X25              ITU-T X.25 / ISO-8208 protocol   x25(7)
   AF_AX25             Amateur radio AX.25 protocol
   AF_ATMPVC           Access to raw ATM PVCs
   AF_APPLETALK        AppleTalk                        ddp(7)
   AF_PACKET           Low level packet interface       packet(7)
   AF_ALG              Interface to kernel crypto API

...

上記のリストは包括的ではありません。他のものの1つはAF_BLUETOOTH:-)です。

ソケットは呼び出して開くsendmsg()ことrecvmsg()ができるものです。メッセージはソケットアドレスに送信されるか、ソケットアドレスで受信されます。

詳細はありますが、ソケットの種類によって異なります。たとえば -

SOCK_STREAMソケットは実際にメッセージに興味がありません。これは、Unixパイプに対応する双方向などのバイトストリームを送信します。何も失うことなく使用しwrite()て電話できます。read()(いわゆる「帯域外」データは除外されます。廃止そして主に使用されますtelnet。 )

接続指向ソケットタイプ(付属)の場合、SOCK_STREAM各ソケットは1つのピアアドレスとのみデータを送受信できます。詳細設定を使用する必要がありますconnect()。または、相手がbind()メッセージを受信するのではなく、受信できる特定のアドレスに送信してください。ソケット。つまり、コールでリスニングを開始し、ソケットを返すコールlisten()accept()各接続を受信します。

型はSOCK_SEQPACKET接続指向(信頼できる順次配信)として定義されますが、そうでない場合は標準内でも定義が衝突します。。そしてSCTP接続を受けることもできますいいえaccept()上記の呼び出しを使用してください。したがって、プロトコルを使用している場合は、SOCK_SEQPACKETその意味についてあまり想定しないでください。使用している特定のプロトコルの実装に関する情報を見つけます。

おすすめ記事