広告
広告
https://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」した時点でサーバとクライアントの接続が確立するのです。 この「接続が確立する」とは「ソケットが作られた」ということでしたよね。
ソケット通信はBSD版UNIXで採用されたため、バークレイソケットやBSDソケットのように呼ばれる場合もあります。
WinSockはWindows独自のソケットモジュール。
狭義でTCP/IPにおいてIPアドレスとポート番号を組み合わせたネットワークアドレスのことを指す場合もあります。
広告