ソケット【socket】

広告

広告

ソケットとは

最終更新
2005-12-04T19:13:00+09:00
この記事のURI参照
http://www.7key.jp/nw/technology/term/basic/socket.html#what

OSI参照モデルセッション層に位置する技術で、アプリケーション(プロセス)がファイルの入出力と同じ感覚でアプリケーション間通信(プロセス間通信)を処理できる環境を提供するためのものです。ソケットを使うことによって、アプリケーションソフトは通信手順の詳細や環境などを気にすること無くデータの送受信を行う事ができるのです。以下Perl でネットワークのお勉強(PortScan編)より抜粋。

まずは一番肝心な「ソケット」です。 これは通信を行なうあるアプリケーションが、TCP/IPを使用するための仮想的な出入り口です。 よくわかりませんね。少し言葉を変えましょう。 端末同士がネットワークを介してデータのやり取りを行うには IPアドレスを使います。 しかし、IPアドレスは端末(正確にはネットワークインターフェース)に割り振られているものであって アプリケーションに割り振られているものではありません。 IPアドレスだけでは、複数のデータのやり取りを同時に行う事はできないのです (どのアプリケーションにデータを渡していいかわからないため)。 ついでに言うと、複数のアプリケーションが同時に通信することができるように作ったIPアドレスの枝番がPort番号です。 そして、「ソケット」というのはIPアドレスとPort番号を一組にしたものに結び付けられた仮想メモリ空間なのです。 相手にデータを送るときは、このメモリ空間に通信するためのデータを書き込むことによって 「Socket」ライブラリの中の「socket」プログラムが相手アプリケーションとデータの通信を行ってくれるのです。 余計わからなくなりました? もっと簡単に言うと、通信を行いたいアプリケーションは「ソケット」にデータを書き込むだけで、 あとは「socket」が勝手に相手とデータのやり取りをしてくれる、こんなイメージです。 ちなみに、「ソケット」「Socket」「socket」は全部意味が違います。 混同しやすいですし、混同している人もたくさんいますし、会話の中では全部同じです。 しっかり意味を理解しておいて下さい。

「connect」というのは読んで字の如く接続状態を指します。 当然、ここで言います接続とはクライアントサーバに「接続」しているのです。 ただ、「connect」イコール「データのやり取りを行う」ではありません。 「connect」状態というのは、とりあえずサーバ機と接続し、通信をおこなってもらえるまで待っている状態を指します。 ここでおかしな言い回しをしたの分かりました? 「サーバ」ではなく「サーバ機」と言ったのですよ。 これも混同している方はおられませんか? いや、いなければいいのですが、敢えて言っておきます。 サーバはアプリケーションです。 これもわかっていなければ話がこんがらがる元ですよね。

「listen」というのはサーバがOSに対して、 「ポートに接続してきたクライアントがあれば、connectしておいて」とお願いしている状態を言います。 サーバというのは通常多くのクライアントが「connect」を試みます。 片っ端から相手にするのですが、どうしても対処しきれない場合が当然出てきます。 そのような場合には、とりあえず「connect」の状態でクライアントを待たせておくのです。 誰がって? 当然、サーバ機のOSがです。 忙しくて対処しきれてない状況なのに、接続されるたびに 「申し訳ございません、ただいま取り込んでおります。 そこの列の最後に並んで頂いて、私が呼ぶまでお待ち下さい。」なんてサーバが答えていたら非効率的ですよね。 そんなときに、サーバがOSに、私宛の客が来たらとりあえずそこに並ばせておいて とお願いするのが「listen」です。

「accept」は上の例で例えるなら、 「お待たせしました。並んでる行列から出てきてこちらにお入り下さい。」という命令です。 要は「accept」した時点でサーバクライアントの接続が確立するのです。 この「接続が確立する」とは「ソケットが作られた」ということでしたよね。

socket
通信を行う2つのプロセスがソケットを作成するためのシステムコール。
bind
お互いを認識できるソケット名をソケットに付けるシステムコール。一般にアドレスファミリ、IPアドレス、ポート番号から構成されます。
listen
サーバとなるプロセスでの受け入れ準備のためのシステムコール。
connect
クライアントとなるプロセスからのソケット接続要求。
accept
サーバの要求受付。
close
通信の終了。

補足

ソケット通信はBSD版UNIXで採用されたため、バークレイソケットやBSDソケットのように呼ばれる場合もあります。

WinSockはWindows独自のソケットモジュール。

狭義でTCP/IPにおいてIPアドレスポート番号を組み合わせたネットワークアドレスのことを指す場合もあります。

広告

Copyright (C) 2005 七鍵 key@do.ai 初版:2005年12月04日 最終更新:2005年12月04日