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. |