Pregunta

¿Es posible que los datos UDP lleguen corruptos?Sé que es posible que se pierda.

¿Fue útil?

Solución

Los paquetes UDP utilizan una suma de comprobación de 16 bits.No es imposible que los paquetes UDP estén dañados, pero es bastante improbable.En cualquier caso, no es más susceptible a la corrupción que TCP.

Otros consejos

En primer lugar, la "suma de verificación de IP" a la que se hace referencia anteriormente es solo una suma de verificación del encabezado de IP.No protege la carga útil.Ver RFC 791

En segundo lugar, UDP permite el transporte SIN suma de comprobación, lo que significa que la suma de comprobación de 16 bits se establece en 0 (es decir, ninguna).Véase RFC 768.(Un valor de suma de verificación transmitido todo cero significa que el transmisor no generó ninguna suma de verificación)

En tercer lugar, como otros han mencionado, UDP tiene una suma de verificación de 16 bits, que no es la mejor manera de detectar un error de varios bits, pero no está mal.Ciertamente es posible que se cuele un error no detectado, pero es muy poco probable.

¿Posible?Absolutamente.¿No detectado? Improbable, ya que UDP emplea una suma de comprobación que requeriría errores de varios bits para parecer válido.Si se detecta un error, es probable que el sistema descarte el paquete; tales son los riesgos de utilizar UDP.

Los paquetes UDP también pueden entregarse desordenados, por lo que si está diseñando un protocolo además de UDP, también debe tenerlo en cuenta.

Una forma común de "corrupción" que afecta a programadores desprevenidos es truncamiento de datagramas.Consulte "Programación de redes Unix" de Stevens para obtener más información (página 539 en 2ª ed.)

Puede verificar la bandera MSG_TRUNC...

Respuesta corta:SÍ.

Respuesta detallada:

Hace unos 7 años (¿quizás 2011?) Descubrimos que los datagramas UDP se modifican involuntariamente cuando se intercambia un datagrama UDP entre una computadora en China y otra en Corea.Por supuesto, la suma de comprobación en el encabezado del paquete UDP también se recalcula con respecto al cambio de carga útil.No había software malicioso en dos computadoras.

Descubrimos que el cambio involuntario solo ocurre cuando estas condiciones coinciden:

  • Los primeros bytes de los datagramas son similares al datagrama anterior.
  • Sólo ocurre cuando los datagramas UDP van de una nación a otra.

No sé exactamente la causa, pero supongo que sí. Escudo dorado de China.

Entonces agregamos un algoritmo de confusión de datagramas en nuestro software ProudNet y el problema desapareció.No es difícil de implementar.Simplemente codifique u ofusque los primeros bytes de su datagrama.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top