Pergunta

É possível que os dados UDP cheguem corrompidos até você?Eu sei que é possível perdê-lo.

Foi útil?

Solução

Os pacotes UDP usam uma soma de verificação de 16 bits.Não é impossível que os pacotes UDP estejam corrompidos, mas é bastante improvável.Em qualquer caso, não é mais suscetível à corrupção que o TCP.

Outras dicas

Em primeiro lugar, a "soma de verificação de IP" mencionada acima é apenas uma soma de verificação do cabeçalho IP.Não protege a carga útil.Veja RFC 791

Em segundo lugar, o UDP permite o transporte sem checksum, o que significa que o checksum de 16 bits é definido como 0 (ou seja, nenhum).Consulte RFC 768.(Um valor de soma de verificação transmitido totalmente zero significa que o transmissor não gerou nenhuma soma de verificação)

Em terceiro lugar, como outros mencionaram, o UDP possui um checkSUM de 16 bits, que não é a melhor maneira de detectar um erro de vários bits, mas não é ruim.Certamente é possível que um erro não detectado apareça, mas é muito improvável.

Possível?Absolutamente.Não detectado? Improvável, já que o UDP emprega uma soma de verificação que exigiria que erros de vários bits parecessem válidos.Se um erro for detectado, o sistema provavelmente irá descartar o pacote – tais são os riscos do uso do UDP.

Os pacotes UDP também podem ser entregues fora de ordem, portanto, se você estiver desenvolvendo um protocolo sobre o UDP, também deverá levar isso em consideração.

Uma forma comum de “corrupção” que afeta programadores desavisados ​​é truncamento de datagrama.Consulte "Programação de rede Unix" de Stevens para obter mais informações (página 539 na 2ª ed.)

Você pode verificar o sinalizador MSG_TRUNC ...

Resposta curta:SIM.

Resposta detalhada:

Cerca de 7 anos atrás (talvez 2011?) Descobrimos que os datagramas UDP são alterados involuntariamente quando um datagrama UDP é trocado entre um computador na China e outro na Coréia.Obviamente, o Checksum no cabeçalho do pacote UDP também é recalculado em relação à alteração da carga útil.Não havia software malware em dois computadores.

Descobrimos que a mudança não intencional só ocorre quando estas condições correspondem:

  • Os primeiros bytes de datagramas são semelhantes ao datagrama anterior
  • Só ocorre quando os datagramas UDP vão de uma nação para outra

Não sei exatamente a causa, mas acho que é Escudo Dourado da China.

Então, adicionamos o algoritmo de distorção de datagramas ao software ProudNet e o problema desapareceu.Não é difícil de implementar.Basta codificar ou ofuscar os primeiros bytes do seu datagrama.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top