Entendendo TCP/IP (Parte 5) - Portas TCP/UDP

Neste artigo, o quinto da série, vou explicar o que são portas TCP/UDP e as principais ferramentas para monitorá-las. Este artigo é uma introdução para um próximo, sobre IPtables.

[ Hits: 34.142 ]

Por: Ricardo Lino Olonca em 10/03/2012


Conceitos e Portas Locais



Conceitos

Hoje em dia, é comum trabalharmos com vários aplicativos diferentes abertos ao mesmo tempo, como por exemplo um navegador com várias abas, um cliente de mensagem instantânea, um cliente de e-mail, um player de MP3, etc. Todos eles recebendo e enviando dados ao mesmo tempo.

Mas você já parou para pensar, em como o computador sabe para qual programa enviar um dados, quando este chega na interface de rede? Como ele sabe que um determinado pacote é para a primeira aba do navegador e não para o cliente de e-mail?

Quando uma aplicação de rede é iniciada, ela abre uma porta com um numeração única. Cada aplicação fica associada a uma porta. As aplicações cliente abrem uma porta aleatória que varia de 1024 até 65535. Aplicações servidoras possuem portas padrão.

Por exemplo, um Servidor Web vai abrir a porta 80 e ficar aguardando conexões. Se você quiser acessar a página do Viva o Linux, o seu navegador abrirá uma porta alta aleatória e tentará a conexão na porta 80 do Servidor que hospeda o site.

Na figura abaixo, isto está exemplificado melhor.

Resumidamente, o IP identifica a máquina na Internet, o MAC address identifica a máquina dentro do segmento de rede, e a porta identifica a aplicação.

O arquivo “/etc/services”, contém uma lista das principais portas usadas por padrão. Abaixo um trecho do arquivo.

#/etc/services 
ftp            21/tcp
ssh		22/tcp				# SSH Remote Login Protocol
smtp        25/tcp
tacacs		49/tcp				# Login Host Protocol (TACACS)
domain		53/tcp				# name-domain server
bootps		67/tcp				# BOOTP server
bootpc		68/tcp				# BOOTP client
www		80/tcp		http		# WorldWideWeb HTTP
kerberos	88/tcp		kerberos5 krb5 kerberos-sec	# Kerberos v5
kerberos	88/udp		kerberos5 krb5 kerberos-sec	# Kerberos v5
pop3		110/tcp		pop-3		# POP version 3
nntp		119/tcp		readnews untp	# USENET News Transfer Protocol
ntp		123/udp				# Network Time Protocol
netbios-ssn	139/tcp				# NETBIOS session service
imap2		143/tcp		imap		# Interim Mail Access P 2 and 4
snmp		161/tcp				# Simple Net Mgmt Protocol
snmp		161/udp				# Simple Net Mgmt Protocol
snmp-trap	162/tcp		snmptrap	# Traps for SNMP
snmp-trap	162/udp		snmptrap	# Traps for SNMP


Há vários tipos de portas. As principais são TCP, UDP e ICMP.

- Portas ICMP:

São usadas para controle de tráfego. Não se transfere dados 'úteis' por ele, apenas dados relacionados a conexão, ao link, ao tempo de resposta, etc.

Um exemplo típico de ICMP, é o famoso comando Ping. O Ping envia uma requisição ao destino e gera estatísticas, com o tempo da resposta.

Outro comando típico é o Tracert, que nada mais é do que um Ping com 'ttl 1', depois outro Ping com 'ttl 2', assim por diante, até que o alvo seja atingido, ou algum erro for encontrado.

O resultado é uma relação dos saltos (roteadores) usados para se alcançar o alvo, com seus respectivos tempos de resposta.

- Portas TCP:

São usadas para transferência de dados que requerem integridade. Em uma comunicação TCP, as partes estabelecem uma conexão que fica aberta enquanto os dados são trafegados.

Para cada sequência de dados enviada, espera-se como resposta uma confirmação do recebimento. Por isso, dizemos que o TCP possui qualidade na comunicação.

- Porta UDP:

É usada para conexões onde a integridade não é necessária, ou quando o dado trafegado é muito pequeno.

Por exemplo, em uma Vídeo-Conferência ou Stream de áudio, se um pacote de dados se perder durante a comunicação, isto não afetará o entendimento.

Uma requisição DNS também é feita por UDP, pois seus pacotes são muito pequenos. Por isso, o UDP é mais rápido que o TCP, mas não pode ser usado onde a integridade é essencial, como numa transferência bancária, ou mesmo no envio de um e-mail.

Entendidos esses pormenores, vamos fazer algo prático.

Pesquisando Portas Locais

Para ver quais portas estão abertas em sua máquina, use o Netstat.

No exemplo abaixo, estou mostrando apenas as portas TCP e UDP.
Cada linha é uma conexão aberta em sua máquina. As colunas mais importantes aqui, são Endereço Local, Endereço Remoto e Estado.

Os endereços contém o nome do Host e o nome da porta separados por ':'. O nome do Host é resolvido via DNS, e o da porta é retirado do “/etc/services”. Para evitar a resolução de nomes, melhorando o desempenho do Netstat, execute-o com a opção: -n

A última coluna contém o estado da conexão. Abaixo descrevo os estados possíveis. Dependendo da língua padrão do seu sistema, a última coluna pode mudar um pouco.

- ESTABELECIDO: A conexão está estabelecida.

- SYN_SENT: O Socket está tentando estabelecer uma conexão. Indica que a estação tentou estabelecer uma conexão enviando um pacote SYN, mas ainda não recebeu a resposta SYN ACC. Isso pode ocorrer quando há algum problema para se conectar, como um firewall bloqueando a conexão, ou quando a conexão está lenta.

- SYN_RECV: Uma requisição de conexão foi recebida da rede.

- FIN_WAIT1: O Socket está fechado e a conexão está terminando.

- FIN_WAIT2: A conexão está fechada e o Socket está esperando por uma terminação pela máquina remota.

- TIME_WAIT: A conexão está aberta, mas não há dados trafegando neste momento. Após um período de inatividade, a conexão será fechada.

- FECHADO: A conexão está fechada.

- CLOSE_WAIT: O lado remoto terminou, esperando pelo fechamento do Socket.

- ÚLTIMO_ACK: O lado remoto terminou, e o Socket está fechado. Esperando por uma confirmação.

- OUVINDO: O Socket está aguardando conexões, ou seja, tem uma aplicação servidor rodando em sua máquina.

- FECHANDO: Ambos os Sockets estão terminados, mas nós ainda não enviamos todos os nossos dados.

- DESCONHECIDO: O estado do Socket é desconhecido.

É possível descobrir qual o programa que está usando a porta em questão através do 'lsof'.

# netstat -na | grep :4200
tcp   0   0 0.0.0.0:4200   0.0.0.0:*   OUÇA

# lsof -i TCP:4200
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF NODE NAME
shellinab    1423  shellinabox   4u  IPv4  5541  0t0 TCP *:4200 (LISTEN)

Podemos perceber com isso, que o programa 'shell in a box', está usando a porta 4200 e está aguardando por conexões.

Outro exemplo:

# netstat -na | grep :37319
tcp   0   0 172.20.16.60:37319   74.125.65.125:5222   ESTABELECIDA

# lsof -i TCP:37319
COMMAND  PID   USER  FD    TYPE DEVICE SIZE/OFF NODE NAME
pidgin    7188  ricardo   15u IPv4 172198   0t0 TCP compaq:37319->gx-in- f125.1e100.net:xmpp-client (ESTABLISHED)

Neste exemplo, o Pidgin abriu a porta 37319 na minha estação de trabalho, e se conectou na porta 5222 do servidor 74.125.65.125.
    Próxima página

Páginas do artigo
   1. Conceitos e Portas Locais
   2. Portas Remotas e Considerações
Outros artigos deste autor

Entendendo TCP/IP (parte 4) - DHCP

Entendendo TCP/IP (Parte 3) - Resolução de nomes

Entendendo TCP/IP (Parte 6) - Firewall

Problemas encontrados na adoção do IPv6

O fim está próximo

Leitura recomendada

Utilizando a ferramenta Iptstate

Iptables 1.3.4 com Layer 7 e Kernel 2.6.14 no Debian 3.1

Slackware 11 + kernel-2.6.18 + Layer7 + iptables

IPtables - Trabalhando com Módulos

Balanceamento de carga entre 2 placas de rede

  
Comentários
[1] Comentário enviado por julio_hoffimann em 10/03/2012 - 19:36h

Oi Ricardo,

Cada episódio da série é um mundo de informação! Sem tempo de ler com calma, mas favoritei para futura leitura. ;-)

Abraço!

[2] Comentário enviado por cesarufmt em 10/03/2012 - 22:47h

Muito bom Ricardo! Parabéns!

Bem construído mesmo. Agora é esperar pelo do firewall/iptables.

Obrigado!

o//

[3] Comentário enviado por BispoBH em 14/03/2012 - 13:42h

Grande Olonca,

Parabens pelos Artigos...estou esperando os proximos.

Abraços,

Dennis Figueiredo (Atento BH...Lembra ??)


[4] Comentário enviado por ricardoolonca em 20/03/2012 - 13:53h

Opa, lembro sim. Como você está? Ainda na Atento?

Pode esperar que em breve vou escrever sobre o firewall.

[5] Comentário enviado por apchagas81 em 05/04/2012 - 14:48h

Caro Ricardo, parabéns pela série de artigos sobre conceitos básicos de TCP/IP isso realmente se faz necessários antes de partirmos para as "brincadeiras com IPTbles, etc"

ABS

[6] Comentário enviado por marcioam-vm em 17/10/2012 - 09:37h

muito boa explicação parabéns pelo post.

[7] Comentário enviado por wleite em 26/07/2016 - 20:22h

Ricardo, você esta de parabéns!! Ler os seus artigos está sendo de grande ajuda!!! Graças a você estou finalmente compreendendo alguns conceitos sobre o TCP/IP.

Continue assim!!!

[8] Comentário enviado por ricardoolonca em 27/07/2016 - 11:12h


[7] Comentário enviado por wleite em 26/07/2016 - 20:22h

Ricardo, você esta de parabéns!! Ler os seus artigos está sendo de grande ajuda!!! Graças a você estou finalmente compreendendo alguns conceitos sobre o TCP/IP.

Continue assim!!!


Fico feliz em saber que os artigos estão sendo úteis.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts