EPx professional blog and repository for braindumps

2008/05/30

Carteira de identidade de uma conexão

Cada conexão TCP/IP tem uma identificaação única na Internet. Esta id. é composta por quatro valores: os endereços IP das duas pontas, mais os números de porta que cada ponta atribuiu àquela conexão em particular.

Da minha experiência como professor, sei que o conceito de endereço é mais ou menos compreensível por todos, mas o conceito de porta fica no ar.

A porta é uma abstração criada pelo protocolo de transporte. O objetivo é permitir que um terminal possa manter diversas conexões abertas ao mesmo tempo, e mesmo várias conexões separadas entre os mesmos dois terminais. Sem a porta, seria necessário criar algum outro mecanismo que distinguisse os dados vindos de cada conexão.

Poddemos fazer uma analogia com os correios. Em geral, uma carta menciona o nome do destinatário, embora ele não seja necessário para a entrega da carta; bastaria o endereço. Mas aí, se mora mais de uma pessoa na casa, como saber para quem é a carta sem um nome? Seria necessário abrir a carta, e tentar inferir o destinatário pelo conteúdo.

A porta num pacote TCP ou UDP faz o mesmo papel do nome em uma carta. Mas a porta ainda tem uma utiilidade adicional na Internet, que é identificar os serviços. Por exemplo, um servidor Web sempre atende na porta 80. Isto facilita a vida dos clientes que não precisam descobrir a porta do serviço Web, basta saber o endereço.

Isto também significa que todas as conexões com este servidor Web terão metade de suas identidades sempre igual, já que endereço o porta do terminal servidor são sempre iguais. A distinção entre conexões fica totalmente dependente do endereço e porta do terminal cliente.

Bem, e qual vai ser o número de porta do lado cliente? Não importa, pois é do cliente a iniciativa de fazer a conexão, assim o servidor fica sabendo já no primeiro pacote qual é a porta do ooutro lado (para quem ele deverá mandar o pacotte de resposta).

Normalmente o cliente escolhe uma porta 'alta', ou seja, acima de 32000, que não costuma ser usada por servidores. O valor exato costuma ser escolhido pelo sistema operacional. Mas absolutamente nada impede que a própria aplicação cliente escolha sua porta, e pode escolher uma porta 'baixa', até mesmo a porta 80. Se não estiver em uso por outra conexão, nem houver um servidor Web rodando na mesma máquina, tá valendo.

A única exigência é o cliente escolher uma porta que ele mesmo já não esteja usando para outra conexão com o mesmo servidor.

Assim, não há nada esotérico a respeito das portas. É apenas um truque para que um terminal possa manter várias conexões abertas concomitantemente. E a convenção de o servidor atender sempre à mesma porta existe apenas para evitar a necessidade de fazer-se procura DNS também pela porta.

Aliás, o DNS suporta resolução de porta além de resolver eendereços. Alguns serviços como LDAP usam rotineiramente este método de resolução, pois não se sabe a priori nem o endereço nem a porta do servidoor LDAP responsável por um domínio.

Assim, ninguém precisa ficar assustado com a perspectiva futura dos serviços não terem mais portas fixas. O DNS dá jeito -- se estiver corretamente configurado...

Num próximo post, veremos como fica a identidade única das conexões na presença de um roteador NAT.

1 comentários:

ESB disse...

Esclareceu muito. Obrigado.

Postar um comentário