Laboratório: Comparativo TCP e UDP utilizando nc e tcpdump
Laboratório: Comparativo TCP e UDP
- Neste laboratório serão utilizadas as ferramentas nc (netcat) e tcpdump.
tcpdump
O tcpdump é um programa que permite capturar e analisar o tráfego de rede, e é executado a partir de um terminal.
Veja no link as instruções para download e instalação do tcpdump, bem como as instruções para seu uso.
O tcpdump necessita de conta de administrador para poder ser executado. Caso você esteja utilizando máquina virtual, certifique-se que a mesma esteja na mesma rede local das demais máquinas do laboratório. Se não estiver, modificar a configuração da máquina virtual para trabalhar em modo bridge.
nc (NetCat)
Permite criar comunicações e soquetes de escuta TCP e UDP .
- Parâmetros comuns para uso com nc
- -l especifica porta para escuta TCP ou de recepção UDP;
- -n não converte endereços IP e porta, mantendo o formato numérico;
- -u usa comunicação UDP (por default usa TCP).
As páginas de manual do nc trazem informações detalhadas do uso deste comando:
man nc
Comparativo entre uma comunicação TCP e UDP
Para este exercício será utilizado um terminal no seu computador e outro em um computador de um colega ou na máquina virtual.
Conexão TCP
- Abertura de conexão, troca de pacotes e encerramento de conexão TCP
- Verificar o endereço IP que está sendo utilizado pela máquina remota que será utilizada para comunicação com o comando ifconfig.
- Teste a conectividade entre as máquinas que serão utilizadas através do comando ping.
- A primeira comunicação será feita usando o protocolo TCP. No computador servidor execute o netcat para criar um soquete de escuta TCP em uma porta especificada, por exemplo, 5555:
nc -l 5555
- No computador cliente execute o netcat para abrir uma conexão TCP com o servidor especificado no endereço IP (X é o número do computador do colega de laboratório que vai aceitar a conexão) e porta especificada:
nc 192.168.10.X 5555
- Com estes dois comandos, abre-se uma conexão TCP, full-duplex entre as máquinas, na qual tudo o que for teclado em um host será enviado ao outro host.
- Depois de testada a conexão, encerrar a mesma com CTRL-C.
- Preparar, em outro terminal, um comando tcpdump para capturar pacotes na porta 5555.
- Relançar a conexão TCP com netcat e para analisar os pacotes capturados pelo tcpdump.
- Análise dos pacotes capturados numa conexão TCP
- Verifique as portas origem e destino escolhidas pelo cliente e servidor;
- Analise a sequência de abertura de conexão TCP, verificando os flags setados em cada pacote;
- Verifique os números de sequência iniciais escolhidos pelo cliente e servidor;
- Verifique o tamanho Máximo de Segmento (MMS) escolhidos pelo cliente e servidor na conexão;
- Verifique a evolução dos números de sequência e reconhecimento durante as trocas de pacotes realizadas, e compare com a quantidade de bytes de cada mensagem;
- Verifique o encerramento de conexão TCP quando um dos host derruba a conexão com CTRL-C.
- Teste de uma recusa de conexão TCP
- Utilizar o comando netcat criar no computador servidor um soquete de escuta TCP em uma porta especificada, por exemplo, 5555:
nc -l 5555
- Preparar, em outro terminal, um comando tcpdump para capturar pacotes na porta 5555.
- No computador cliente execute o netcat para abrir uma conexão TCP com o servidor especificado no endereço IP (X é o número do computador do colega de laboratório que vai aceitar a conexão) e uma porta inexistente, por exemplo 6666:
nc 192.168.10.X 6666
- Análise dos pacotes capturados na recusa de conexão TCP
- Verifique as portas origem e destino escolhidas pelo cliente e servidor;
- Analise a tentativa de abertura e recusa de conexão TCP, verificando os flags setados em cada pacote.
Comunicação UDP
- Verificar o endereço IP que está sendo utilizado pela máquina remota que será utilizada para comunicação com o comando ifconfig.
- Esta transferência será feita usando o protocolo UDP. No computador receptor execute o netcat com o parâmetro -u, o qual criará um soquete de escuta UDP em uma porta especificada, por exemplo, 5555:
nc -u -l 5555
- No computador transmissor execute o netcat para enviar um datagrama UDP para o receptor especificado no endereço (X é o número do computador do colega de laboratório que vai aceitar a conexão) e porta especificada:
nc -u 192.168.10.X 5555
- Com estes comandos tudo o que for teclado em um host será enviado ao outro host pelo protocolo UDP.
- Depois de testada a comunicação, encerrar a mesma com CTRL-C.
- Preparar, em outro terminal, um comando tcpdump para capturar pacotes na porta 5555 ou pacotes ICMP. A captura de pacotes ICMP é necessária para verificar o que acontece caso seja enviado pacotes UDP quando um dos lados encerrou a comunicação e não há mais porta de escuta do outro lado.
- Relançar a comunicação UDP com netcat e analisar os pacotes capturados pelo tcpdump.
- Comparação entre TCP e UDP a partir dos pacotes capturados com o tcpdump
- Verifique a abertura de conexão no TCP;
- Verifique a ausência de conexão no UDP;
- Verifique os números de sequência e reconhecimento TCP nas trocas de pacotes realizadas;
- Verifique o encerramento de conexão TCP quando um dos host derruba a conexão com CTRL-C;
- Verifique o que acontece quando um dos lados da comunicação usando UDP encerra com CTRL-C e o outro lado tenta enviar novos pacotes.
Transferência de arquivos com NetCat
- Baixe o arquivo.txt para transferência com TCP
- Escolha um arquivo para transferência;
- Verificar o endereço IP que está sendo utilizado pela máquina remota que será utilizada para comunicação com o comando ifconfig.
- A transferência será feita usando o protocolo TCP. No computador receptor execute o netcat que criará um soquete de escuta TCP em uma porta especificada, por exemplo, 5555:
nc -l 5555 > arquivo.txt
- No computador transmissor execute o netcat para criar uma conexão TCP com o receptor especificado no endereço (X é o número do computador do colega de laboratório que vai aceitar a conexão) e porta especificada:
time nc 192.168.10.X 5555 < arquivo.txt
- O comando enviará o arquivo usando conexão TCP, ao fim da transmissão a conexão é encerrada.
- O comando time no antes do nc permite visualizar o tempo da transmissão.
- Preparar, em outro terminal, um comando tcpdump para capturar pacotes na porta 5555.
- Relançar a conexão TCP com netcat e capturar os pacotes com o tcpdump.
- Análise da transferência TCP e dos pacotes capturados
- Verifique se o tamanho dos arquivos é o mesmo;
- Verifique o tempo da transferência do arquivo;
- Nos pacotes capturados, identifiquw a abertura e encerramento de conexão;
- Verifique os números de sequência e reconhecimento TCP nas trocas de pacotes realizadas;
- Verifique o tamanho original do arquivo e o número de pacotes com que o mesmo foi fragmentado.
- Verifique se o número de pacotes trocados é compatível com o MSS estabelecido para a conexão TCP.
- Transferência de arquivos com UDP
- O protocolo UDP não é adequado para transferência de arquivos, justamente por não dar garantias de que os dados chegarão corretamente.
O UDP é útil quando quando a aplicação tolera perder alguns dados, como no caso da voz digitalizada de uma comunicação telefônica. Também pode ser útil para mensagens curtas, como na troca de mensagens dos protocolos de roteamento entre roteadores, ou consultas DNS.
Uma aplicação que for utilizar UDP para transferir arquivos deve gerenciar a montagem de cada pacote UDP a ser enviado. Se o arquivo tiver que ser fragmentado, o papel fica a cargo da aplicação, a qual também deverá poder lidar com possíveis perdas de dados.
Tarefa
Faça um relatório detalhando as diferenças entre os protocolos TCP e UDP usando como referência os experimentos realizados com o NetCat e a captura de pacotes com o tcpdump. Ilustre com diagramas de troca de mensagens e arquivos com as capturas realizadas.
--Evandro.cantu (discussão) 15h25min de 16 de abril de 2015 (BRT)