Soquete Unix - Portas e Serviços
Quando um processo cliente deseja se conectar a um servidor, o cliente deve ter uma maneira de identificar o servidor que deseja conectar. Se o cliente souber o endereço de Internet de 32 bits do host no qual o servidor reside, ele poderá contatar esse host. Mas como o cliente identifica o processo de servidor específico em execução naquele host?
Para resolver o problema de identificação de um determinado processo de servidor em execução em um host, tanto o TCP quanto o UDP definiram um grupo de portas conhecidas.
Para o nosso propósito, uma porta será definida como um número inteiro entre 1024 e 65535. Isso ocorre porque todos os números de porta menores que 1024 são considerados bem conhecidos - por exemplo, telnet usa a porta 23, http usa 80, ftp usa 21, e assim por diante.
As atribuições de porta para serviços de rede podem ser encontradas no arquivo / etc / services. Se você estiver escrevendo seu próprio servidor, deve-se tomar cuidado ao atribuir uma porta a ele. Você deve se certificar de que esta porta não deve ser atribuída a nenhum outro servidor.
Normalmente, é uma prática atribuir qualquer número de porta superior a 5.000. Mas existem muitas organizações que escreveram servidores com números de porta superiores a 5.000. Por exemplo, o Yahoo Messenger é executado em 5050, o servidor SIP é executado em 5060 etc.
Portas e serviços de exemplo
Aqui está uma pequena lista de serviços e portas associadas. Você pode encontrar a lista mais atualizada de portas de Internet e serviços associados em IANA - Atribuição de portas TCP / IP .
Service | Port Number | Service Description |
eco | 7 | UDP / TCP envia de volta o que recebe. |
descartar | 9 | UDP / TCP descarta a entrada. |
dia | 13 | UDP / TCP retorna a hora ASCII. |
Chargen | 19 | UDP / TCP retorna caracteres. |
ftp | 21 | Transferência de arquivos TCP. |
telnet | 23 | Login remoto TCP. |
smtp | 25 | Email TCP. |
dia | 37 | UDP / TCP retorna o tempo binário. |
tftp | 69 | Transferência de arquivo UDP trivial. |
dedo | 79 | Informações de TCP sobre usuários. |
http | 80 | TCP World Wide Web. |
Conecte-se | 513 | Login remoto TCP. |
quem | 513 | UDP informações diferentes sobre os usuários. |
Xserver | 6000 | Janelas TCP X (NB> 1023). |
Funções de porta e serviço
O Unix fornece as seguintes funções para buscar o nome do serviço do arquivo / etc / services.
struct servent *getservbyname(char *name, char *proto) - Esta chamada pega o nome do serviço e o nome do protocolo e retorna o número da porta correspondente para esse serviço.
struct servent *getservbyport(int port, char *proto) - Esta chamada pega o número da porta e o nome do protocolo e retorna o nome do serviço correspondente.
O valor de retorno de cada função é um ponteiro para uma estrutura com a seguinte forma -
struct servent {
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
};
Aqui está a descrição dos campos de membro -
Atributo | Valores | Descrição |
---|---|---|
s_name | http | É o nome oficial do serviço. Por exemplo, SMTP, FTP POP3, etc. |
s_aliases | ALIAS | Ele contém a lista de aliases de serviço. Na maioria das vezes, ele será definido como NULL. |
esporte | 80 | Ele terá o número da porta associado. Por exemplo, para HTTP, será 80. |
s_proto | TCP UDP |
É definido para o protocolo usado. Os serviços de Internet são fornecidos usando TCP ou UDP. |