Laboratório: Comparativo TCP e UDP utilizando nc e tcpdump
Laboratório: Comparativo TCP e UDP
- Para este laboratório será utilizado a ferramenta nc (netcat) e tcpdump.
O laboratório deve ser realizado em uma máquina virtual, em virtude da necessidade de conta de administrador para utilizar o tcpdump.
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
- Verificar o endereço IP que está sendo utilizado pela máquina remota que será utilizada para comunicação com o comando ifconfig.
- A primeira 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
- 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:
nc 192.168.10.X 5555
- Com estes comandos, abre-se uma conexão TCP, full-duplex, 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 analisar os pacotes capturados pelo tcpdump.
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.
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)