PR

 コンピュータがTCP/IPを使って通信するとき、IPプロトコルやTCPプロトコルの機能はたいてい、オペレーティング・システム(OS)の機能として実現されています。一般にWebブラウザやメーラーといったアプリケーション・プログラムはAPI(エーピーアイ:application program interface)と呼ばれるしくみでOSの機能を呼び出しています。ソケット(socket)はTCP/IPの機能を利用するときに使う標準的なAPIで、ポート番号はそこで使われる識別子です。

UNIXのAPIを他のOSに移植

 ソケットはUNIX OSと密接な関係にあります。ソケットはもともと、カリフォルニア大学バークレー校が開発したBSD UNIX(ビーエスディユニックス)と呼ばれるUNIX OSでTCP/IPの機能を利用するためのAPIでした。TCP/IPやこれを使った通信ソフトの開発は米国の大学や研究機関が中心になって進めたのですが、その際に多く使われたのがUNIXワークステーションでした。

 BSD UNIXはTCP/IPを使ったネットワーク機能を搭載していたうえに、プログラムのソースコードを無料で公開したので、BSD UNIXとソケットAPIはTCP/IPを使う通信ソフトを開発する際のリファレンス(基本となる手法)になりました。TCP/IPの普及に伴い、ソケットは通信ソフトがOSのTCP/IP機能を利用するAPIとしてデファクト・スタンダードの地位を確立しました。

 ソケットは現在、BSD UNIX以外のOSにも広く移植されています。たとえばWindows系OSはWinSock(ウインソック)と呼ばれるソケット互換のAPIを搭載しており、これを活用してTCP/IP機能を使います。そのため、ソケットを使うことを前提に書かれたUNIXの通信ソフトは少しの修正でWindowsで使えるようになります(pict.1)。

拡大表示
 UNIXのソケットAPIはOSの基本機能の一部として組み込まれていますが,Windows OSの場合,WinSockはOSに機能を追加するプログラム・モジュールという形になっています。ソケットAPIはUNIXで開発されたのでUNIXに依存した設計になっています。UNIXと基本的な設計が異なるOSでソケットAPIを提供する場合は,プログラム・モジュールで追加する方が容易なのです。どちらにせよ,アプリケーション・プログラムからは同じソケットAPIとして見えます。
 処理速度だけを考えればUNIXのようにOSの基本機能として組み込んだ方が有利です。しかしプログラム・モジュールはそれだけを入れ替えられるので,改良や機能追加のときに有利というメリットがあります。