Red de conocimiento informático - Problemas con los teléfonos móviles - TCP es una transmisión confiable y la capa de aplicación aún necesita realizar sumas de verificación

TCP es una transmisión confiable y la capa de aplicación aún necesita realizar sumas de verificación

Recientemente entrevisté a muchos estudiantes y descubrí que muchos principiantes de TCP tienen algunos malentendidos sobre el uso de TCP. Estos errores también me confundieron. Hay muy pocos artículos en Internet que analicen estos temas en detalle, es decir, solo hay conclusiones y prácticas directas, y nadie explicará los entresijos con claridad, así que contaré los entresijos de estos temas. En esta serie de artículos, con la esperanza de que la mayoría de los principiantes en TCP eviten estos errores.

En las entrevistas, una pregunta que me hacen a menudo es cómo TCP garantiza la exactitud de los datos y la exactitud del contenido de los datos. La mayoría de la gente empezará a hablar de retransmisiones por pérdida de paquetes, acuses de recibo y similares, pero todo esto no tiene sentido siempre que unas pocas personas puedan responder correctamente la pregunta del título: Primera suma de comprobación.

Para aquellos que puedan responder a esta pregunta, quisiera preguntar además: ¿este mecanismo de suma de verificación garantiza que no haya errores en la transmisión de datos?

La respuesta es no, pero hasta el momento no he conocido a ningún entrevistador que haya respondido correctamente a esta pregunta.

El protocolo TCP especifica que uno de los campos del encabezado TCP es la suma de verificación, y el remitente usa la suma acumulada de las sumas de verificación para calcular un número a partir del pseudo encabezado, el encabezado TCP y los datos TCP y lo almacena en el encabezado En el campo de suma de verificación, el receptor repite el proceso cuando recibe un paquete TCP y luego compara la suma de verificación calculada con la suma de verificación en el encabezado recibido. Si hay una discrepancia, los datos están en tránsito. Si no coinciden, los datos se transmitieron incorrectamente. Este es el mecanismo de verificación de datos de TCP.

Pero ¿puede este mecanismo garantizar que se detecten errores? Obviamente no. Porque la suma de comprobación es una suma acumulativa, es decir, una serie de números (el protocolo TCP especifica un número por cada 16 bits de datos) acumulados hasta el último dígito.

Pero todos los estudiantes de primaria saben que A B = B A, si dos bits de datos de 16 bits se invierten durante la transmisión (¿por qué es tal coincidencia? No lo sé, tal vez haya un problema con el enrutador, tal vez hay algo mal en el universo, las partículas de alta energía golpean el cable. De todos modos, la probabilidad de que esto suceda no es cero, puede suceder), y luego la suma de verificación calculada es la misma que antes de la inversión, luego el receptor. No debe poder comprobar que se trata de datos incorrectos.

En cuanto a lo que sucederá después de que la capa de aplicación reciba estos datos, aún no está claro. Depende de la suerte. Si falla inmediatamente, el resultado será mejor.

Esta publicación de blog registra una interrupción en la que Amazon encontró este problema y sufrió grandes pérdidas.

Dado que el algoritmo de suma de verificación que viene con TCP no es confiable, necesitamos crear un nuevo conjunto de sumas de verificación de datos en la propia capa de aplicación.

Lo más simple es usar la suma de verificación MD5, cifrar los datos con MD5 antes de enviarlos y enviar el resumen MD5 juntos. Después de recibir los datos, el extremo receptor los cifrará nuevamente con MD5. digest is with Si los resúmenes recibidos son consistentes, los datos son correctos.

Así lo maneja Amazon.

El uso de la suma de comprobación de TCP y el cifrado MD5 en un enfoque doble hace que sea esencialmente imposible tener algún tipo de error de transmisión, pero aún así pasar la doble verificación porque sus principios de cifrado son muy diferentes. Por supuesto, si la probabilidad de que esto suceda es 0 o no requiere una prueba matemática estricta, pero mi nivel es limitado y no puedo darlo. Pero aún se puede ver claramente que la probabilidad de que esto suceda es muchos órdenes de magnitud menor que la probabilidad de que un solo mecanismo de verificación pase debido a un error accidental.

Por supuesto, también se pueden cifrar otras sumas de comprobación además de MD5 utilizando otros algoritmos de suma de comprobación criptográficos.

La vulnerabilidad de verificación de datos TCP es una vulnerabilidad muy oscura. Solo aquellos que la entienden pueden pensar en ella, porque la probabilidad de que la gente común la encuentre es muy pequeña y solo es posible en un servidor muy grande. Aparece una vez, por lo que está bien no considerarlo en el desarrollo web normal.

No existe un estándar sobre cuándo debería considerar abordar este problema. Creo que debe abordar este problema cuando su servidor tiene una vulnerabilidad de suma de comprobación y puede causar grandes pérdidas. Como se mencionó anteriormente, Amazon ha experimentado costosas interrupciones, por lo que si no tiene pérdidas graves, realmente no importa si su servidor se cae una vez.

Comprender las sumas de verificación de datos TCP no es un punto crítico en el desarrollo web, pero esta pregunta muestra cuánto comprende y piensa una persona sobre el protocolo TCP. Así que escribí este artículo con la esperanza de permitir a los entrevistadores tener una comprensión y una reflexión más profundas sobre el protocolo TCP y lograr mejores resultados en las entrevistas.

1. Malentendidos entre principiantes en TCP: el significado de la suma de comprobación de datos