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