ポートとソケット
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/07 18:19 UTC 版)
「ポート (コンピュータネットワーク)」の記事における「ポートとソケット」の解説
プログラムでポートを用いて通信するには、一般にソケットと呼ばれる仕組みを用いる(ソケットはBSDで開発されたため、特にBSDソケットとも呼ぶ)。ソケットとは通信の端点のことで、2台のコンピュータが通信しているとき、その通信路の両端、すなわちそれぞれのコンピュータにソケットが存在する。また、ソケットのインターフェイス(API)やソケットを扱うライブラリプログラムも併せてソケットと呼ぶこともある。ソケットを利用したプログラムを記述することをソケットプログラミングと呼ぶ。 ソケットを用いた通信は、以下のような手順で行われる(クライアントサーバモデル)。 サーバ機でサービスを提供するプログラムは、ソケットを作成し、サービス固有のポート番号をソケットに割り当て (bind)、待ち行列を用意し (listen)、クライアントからの接続を待ち受ける (accept)。 サービスを利用するクライアントプログラムは、ソケットを作成し、そのソケットの通信相手としてサーバ機のIPアドレスとサービスのポート番号を指定し (connect)、接続を行う。 サーバは接続を受け付けると、新規にソケットを作成し、そのソケットとクライアントとの間に通信を確立する。もとのソケットは再び待ち受けに戻る(これは、会社などで、受付係が来客を担当者に引き合わせ、その後また受付に戻るようなものと考えることができる)。 通信が終わると、2.および3.で作成したソケットは破棄される。 WWW (HTTP) の場合、原則としてHTMLファイルや画像ファイルを1件取得するたびに上記2.〜4.の手順が繰り返されるため、アクセスが集中するとサーバの負荷が非常に高くなる(ただしHTTP 1.1では1回の接続で複数件のデータを取得する持続的接続が標準の動作となっている)。 このように、ポート番号とはサーバ上のサービスを特定するための番号であるといえる。そのため、サーバ側のポート番号は重要であるが、クライアント側のポート番号は通常問題とされず、空いている番号を適当に自動で割り当てる。 なお、上記手順の3.で作成されるソケットは、待ち受け用のソケットと同じIPアドレス・ポート番号・プロトコル (TCP/UDP) を有する。すなわち、1台のサーバ機に、同じIPアドレス・ポート番号・プロトコルのソケットが複数存在し得る(ポートとソケットは一対多の対応となり得る)ことに注意が必要である。この様子は、同時に複数の相手と通信を行っているWebサーバなどで、netstatコマンド(ソケットの通信状況を表示するコマンド)を実行してみるとよくわかる(最近[いつ?]のGNU/Linuxではiproute2への移行が進んでいるため前述のコマンドよりも$ ss --resolve --tcp --udpなどとしたほうがいいであろう)。 $ netstattcp4 0 0 xxx.yyy.zzz.www.80 aaa.bbb.ccc.ddd.39321 ESTABLISHEDtcp4 0 0 xxx.yyy.zzz.www.80 eee.fff.ggg.hhh.56047 TIME_WAITtcp4 0 0 xxx.yyy.zzz.www.80 iii.jjj.kkk.lll.41358 TIME_WAITtcp4 0 0 xxx.yyy.zzz.www.80 mmm.nnn.ooo.ppp.3356 FIN_WAIT_2tcp4 0 0 xxx.yyy.zzz.www.80 qqq.rrr.sss.ttt.3355 FIN_WAIT_2 ここでxxx.yyy.zzz.wwwはこのWebサーバ機のIPアドレス、80はWebサーバプログラムのポート番号、右側は各クライアントのIPアドレスおよびポート番号である。
※この「ポートとソケット」の解説は、「ポート (コンピュータネットワーク)」の解説の一部です。
「ポートとソケット」を含む「ポート (コンピュータネットワーク)」の記事については、「ポート (コンピュータネットワーク)」の概要を参照ください。
- ポートとソケットのページへのリンク