Um computador pode ter um ou mais endereços IP.
Alguns protocolos IP, como o ICMP, precisam apenas de endereços IP para se comunicar. Outros, como UDP e TCP, exigem que os pacotes sejam endereçados a uma porta, bem como a um endereço IP. Geralmente, você tem um programa que implementa um serviço de escuta em uma porta conhecida para que outros sistemas saibam como contatá-lo. Um servidor ssh
irá, por exemplo, escutar na porta 22 / tcp:
$ netstat -a -t
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
$ netstat -a -t -n
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
O programa netstat
dará nomes simbólicos aos números de portas, procurando em /etc/services
, e um programa como sshd
chamará getservbyname (" ssh "," tcp ") para converter um nome para um número de porta.
Se você ouvir o endereço IP 0.0.0.0
, isso significa ouvir todos os endereços IP de um sistema, e é por isso que o netstat imprime *
.
O servidor ssh
não tem para escutar na porta 22. Você pode alterar seu arquivo de configuração para escutar na porta 8022, por exemplo. Contanto que o usuário remoto saiba o número da porta, e qualquer firewall interferente permita o tráfego para a porta 8022, ele funcionará.
Para centenas de serviços em todo o mundo, os números de porta conhecidos são mantidos no Nome do Serviço e Registro do Número de Porta do Protocolo de Transporte . É um superconjunto do /etc/services
do seu sistema local.
Um soquete é um terminal de comunicação. Antes de poder ser usado, ele deve estar vinculado a um endereço IP, número de porta e protocolo. Se estiver usando TCP, ele deve estar conectado a outro soquete antes que os pacotes possam ser trocados. Um servidor chama socket
para criar um soquete, bind
para vinculá-lo e listen
para escutar conexões. Um cliente usa socket
e bind
e, em seguida, connect
para se conectar a um servidor. (A chamada para bind
é opcional para um cliente; quando connect
for chamado, o sistema alocará uma porta não usada e escolherá um endereço IP apropriado para ligar ao soquete.)
sockets with TCP port 53 and UDP port 53 are distinct sockets
Se um serviço pode ser oferecido em TCP e UDP, é habitual que o número da porta seja o mesmo em ambos os protocolos. No caso acima, você provavelmente teria um único servidor DNS que cria dois sockets, um que escuta em 0.0.0.0:53/tcp
e o outro escuta em 0.0.0.0:53/udp
.
Alguns serviços mais antigos foram projetados para serem executados em apenas um protocolo e, nesses casos, você pode ver dois serviços usando o mesmo número de porta (mas, é claro, em protocolos diferentes). Por exemplo, 512 / tcp é para rexec, mas 512 / udp é para biff. Sistemas como este têm programas completamente diferentes ouvindo nas portas. rexecd
escuta em 512 / tcp e comsat
escuta em 512 / udp.