Unixソケット-ポートとサービス
クライアントプロセスがサーバーに接続する場合、クライアントは接続するサーバーを識別する方法を持っている必要があります。クライアントは、サーバーが存在するホストの32ビットインターネットアドレスを知っている場合、そのホストに接続できます。しかし、クライアントはそのホストで実行されている特定のサーバープロセスをどのように識別しますか?
ホストで実行されている特定のサーバープロセスを識別する問題を解決するために、TCPとUDPの両方で既知のポートのグループが定義されています。
この目的では、ポートは1024〜65535の整数として定義されます。これは、1024より小さいすべてのポート番号が既知であると見なされるためです。たとえば、telnetはポート23を使用し、httpは80を使用し、ftpは21を使用します。等々。
ネットワークサービスへのポート割り当ては、ファイル/ etc / servicesにあります。独自のサーバーを作成している場合は、サーバーにポートを割り当てるように注意する必要があります。このポートを他のサーバーに割り当てないようにする必要があります。
通常、5000を超えるポート番号を割り当てるのが慣例です。ただし、5000を超えるポート番号を持つサーバーを作成している組織はたくさんあります。たとえば、Yahoo Messengerは5050で実行され、SIPServerは5060で実行されます。
ポートとサービスの例
これは、サービスと関連するポートの小さなリストです。インターネットポートと関連サービスの最新のリストは、IANA-TCP / IP PortAssignmentsにあります。
Service | Port Number | Service Description |
エコー | 7 | UDP / TCPは、受信したものを送り返します。 |
破棄する | 9 | UDP / TCPは入力を破棄します。 |
昼間 | 13 | UDP / TCPはASCII時間を返します。 |
Chargen | 19 | UDP / TCPは文字を返します。 |
ftp | 21 | TCPファイル転送。 |
telnet | 23 | TCPリモートログイン。 |
smtp | 25 | TCP電子メール。 |
昼間 | 37 | UDP / TCPはバイナリ時間を返します。 |
tftp | 69 | UDPトリビアルファイル転送。 |
指 | 79 | ユーザーに関するTCP情報。 |
http | 80 | TCPワールドワイドウェブ。 |
ログインする | 513 | TCPリモートログイン。 |
WHO | 513 | ユーザーに関するUDPのさまざまな情報。 |
Xserver | 6000 | TCP Xウィンドウ(NB> 1023)。 |
ポートおよびサービス機能
Unixには、/ etc / servicesファイルからサービス名をフェッチするための次の関数が用意されています。
struct servent *getservbyname(char *name, char *proto) −この呼び出しは、サービス名とプロトコル名を受け取り、そのサービスに対応するポート番号を返します。
struct servent *getservbyport(int port, char *proto) −この呼び出しは、ポート番号とプロトコル名を受け取り、対応するサービス名を返します。
各関数の戻り値は、次の形式の構造体へのポインタです。
struct servent {
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
};
メンバーフィールドの説明は次のとおりです-
属性 | 値 | 説明 |
---|---|---|
s_name | http | サービスの正式名称です。たとえば、SMTP、FTPPOP3など。 |
s_aliases | エイリアス | サービスエイリアスのリストを保持します。ほとんどの場合、NULLに設定されます。 |
スポーツ | 80 | 関連付けられたポート番号があります。たとえば、HTTPの場合は80になります。 |
s_proto | TCP UDP |
使用するプロトコルに設定されます。インターネットサービスは、TCPまたはUDPのいずれかを使用して提供されます。 |