Unix Socket - Porte e servizi

Quando un processo client desidera connettersi a un server, il client deve avere un modo per identificare il server a cui desidera connettersi. Se il client conosce l'indirizzo Internet a 32 bit dell'host su cui risiede il server, può contattare quell'host. Ma come fa il client a identificare il particolare processo del server in esecuzione su quell'host?

Per risolvere il problema di identificare un particolare processo server in esecuzione su un host, sia TCP che UDP hanno definito un gruppo di porte note.

Per il nostro scopo, una porta sarà definita come un numero intero compreso tra 1024 e 65535. Questo perché tutti i numeri di porta inferiori a 1024 sono considerati ben noti - ad esempio, telnet utilizza la porta 23, http utilizza 80, ftp utilizza 21, e così via.

Le assegnazioni delle porte ai servizi di rete possono essere trovate nel file / etc / services. Se stai scrivendo il tuo server, devi fare attenzione ad assegnare una porta al tuo server. È necessario assicurarsi che questa porta non venga assegnata a nessun altro server.

Normalmente è pratica assegnare a qualsiasi numero di porta più di 5000. Ma ci sono molte organizzazioni che hanno scritto server con numeri di porta maggiori di 5000. Ad esempio, Yahoo Messenger gira su 5050, SIP Server gira su 5060, ecc.

Porte e servizi di esempio

Ecco un piccolo elenco di servizi e porte associate. Puoi trovare l'elenco più aggiornato delle porte Internet e dei servizi associati su IANA - Assegnazione delle porte TCP / IP .

Service Port Number Service Description
eco 7 UDP / TCP restituisce ciò che riceve.
scartare 9 UDP / TCP elimina l'input.
giorno 13 UDP / TCP restituisce l'ora ASCII.
chargen 19 UDP / TCP restituisce caratteri.
ftp 21 Trasferimento di file TCP.
telnet 23 Accesso remoto TCP.
smtp 25 Email TCP.
giorno 37 UDP / TCP restituisce l'ora binaria.
tftp 69 Trasferimento di file banale UDP.
dito 79 Informazioni TCP sugli utenti.
http 80 TCP World Wide Web.
accesso 513 Accesso remoto TCP.
chi 513 UDP diverse informazioni sugli utenti.
Xserver 6000 TCP X windows (NB> 1023).

Funzioni portuali e di servizio

Unix fornisce le seguenti funzioni per recuperare il nome del servizio dal file / etc / services.

  • struct servent *getservbyname(char *name, char *proto) - Questa chiamata prende il nome del servizio e il nome del protocollo e restituisce il numero di porta corrispondente per quel servizio.

  • struct servent *getservbyport(int port, char *proto) - Questa chiamata prende il numero di porta e il nome del protocollo e restituisce il nome del servizio corrispondente.

Il valore restituito per ogni funzione è un puntatore a una struttura con la seguente forma:

struct servent {
   char  *s_name;
   char  **s_aliases;
   int   s_port;
   char  *s_proto;
};

Ecco la descrizione dei campi dei membri:

Attributo Valori Descrizione
s_name http È il nome ufficiale del servizio. Ad esempio, SMTP, FTP POP3, ecc.
s_aliases ALIAS Contiene l'elenco degli alias di servizio. Il più delle volte, sarà impostato su NULL.
sport 80 Avrà il numero di porta associato. Ad esempio, per HTTP, sarà 80.
s_proto

TCP

UDP

È impostato sul protocollo utilizzato. I servizi Internet vengono forniti utilizzando TCP o UDP.