Socket Unix - Puertos y servicios

Cuando un proceso de cliente desea conectarse a un servidor, el cliente debe tener una forma de identificar el servidor al que desea conectarse. Si el cliente conoce la dirección de Internet de 32 bits del host en el que reside el servidor, puede comunicarse con ese host. Pero, ¿cómo identifica el cliente el proceso de servidor particular que se ejecuta en ese host?

Para resolver el problema de identificar un proceso de servidor en particular que se ejecuta en un host, tanto TCP como UDP han definido un grupo de puertos conocidos.

Para nuestro propósito, un puerto se definirá como un número entero entre 1024 y 65535. Esto se debe a que todos los números de puerto menores a 1024 se consideran conocidos ; por ejemplo, telnet usa el puerto 23, http usa 80, ftp usa 21, y así.

Las asignaciones de puertos a los servicios de red se pueden encontrar en el archivo / etc / services. Si está escribiendo su propio servidor, debe tener cuidado de asignar un puerto a su servidor. Debe asegurarse de que este puerto no esté asignado a ningún otro servidor.

Normalmente, es una práctica asignar cualquier número de puerto superior a 5000. Pero hay muchas organizaciones que tienen servidores escritos con números de puerto superiores a 5000. Por ejemplo, Yahoo Messenger se ejecuta en 5050, SIP Server se ejecuta en 5060, etc.

Ejemplos de puertos y servicios

Aquí hay una pequeña lista de servicios y puertos asociados. Puede encontrar la lista más actualizada de puertos de Internet y servicios asociados en IANA - Asignaciones de puertos TCP / IP .

Service Port Number Service Description
eco 7 UDP / TCP devuelve lo que recibe.
descarte 9 UDP / TCP desecha la entrada.
tiempo de día 13 UDP / TCP devuelve la hora ASCII.
chargen 19 UDP / TCP devuelve caracteres.
ftp 21 Transferencia de archivos TCP.
telnet 23 Inicio de sesión remoto TCP.
smtp 25 Correo electrónico TCP.
tiempo de día 37 UDP / TCP devuelve tiempo binario.
tftp 69 Transferencia de archivos trivial UDP.
dedo 79 Información de TCP sobre los usuarios.
http 80 TCP World Wide Web.
iniciar sesión 513 Inicio de sesión remoto TCP.
OMS 513 UDP diferente información sobre los usuarios.
Xserver 6000 Ventanas TCP X (NB> 1023).

Funciones de puerto y servicio

Unix proporciona las siguientes funciones para obtener el nombre del servicio del archivo / etc / services.

  • struct servent *getservbyname(char *name, char *proto) - Esta llamada toma el nombre del servicio y el nombre del protocolo, y devuelve el número de puerto correspondiente para ese servicio.

  • struct servent *getservbyport(int port, char *proto) - Esta llamada toma el número de puerto y el nombre del protocolo y devuelve el nombre del servicio correspondiente.

El valor de retorno de cada función es un puntero a una estructura con la siguiente forma:

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

Aquí está la descripción de los campos de miembros:

Atributo Valores Descripción
nombre de http Es el nombre oficial del servicio. Por ejemplo, SMTP, FTP POP3, etc.
s_aliases ALIAS Contiene la lista de alias de servicio. La mayoría de las veces, se establecerá en NULL.
deporte 80 Tendrá el número de puerto asociado. Por ejemplo, para HTTP, será 80.
s_proto

TCP

UDP

Está configurado según el protocolo utilizado. Los servicios de Internet se proporcionan mediante TCP o UDP.