Udp

Pessoal,

estou desenvolvendo um programa em Java que utiliza o protocolo UDP. No livro Redes de Computadores e a Internet do Kurose é mostrado um exemplo utilizando DatagramPacket. O meu problema é que quero fazer uma verificação do checksum do datagrama, mas não vi nenhum atributo checksum na classe DatagramPacket. Teoricamente deveria ter já que um datagrama é composto pela porta de origem, destino, comprimento da mensagem, checksum e a mensagem em si. Como que eu poderia montar esse checksum, então?

A classe DatagramSocket não tem acesso ao pacote IP “cru” (“raw”), ou seja, com todos esses campos. Apenas ao seu conteúdo (“payload”).

Para acessar pacotes IP “crus” é necessário ter as permissões adequadas do sistema operacional, e usar algumas APIs do sistema operacional onde você está rodando seu programa, já que o java.net não tem métodos que acessem o protocolo IP nesse ponto.

Esquece isso, pois isso e feito no nivel do protocolo, ou seja, se o checksum do packet nao passa o packet inteiro e dropado.

Conclusao: vc NUNCA recebera um pacote corrompido com UDP, pois a placa de rede descarta qualquer pacote corrompido.

O que se faz é sequenciar os pacotes e implementar um mecanismo de retransmissao em caso de perda.

Se vc quer fazer o checksum na mão, para reaproveitar o pacote corrompido (audio e video com noise, I don’t care) então vc precisa do protocolo UDP-lite e não UDP.