[Protocolo TCP] formato de mensaje, mecanismo para transmisión de datos confiable (1)

Hola a todos~ Soy tu viejo amigo: Protege a Xiao Zhou ღ  


Este problema le trae el concepto del protocolo de control de transmisión TCP para la programación de redes. Primero, explicará el formato de mensaje del protocolo TCP . Después de aprender el formato de mensaje, aprenderá dos mecanismos TCP para garantizar una transmisión de datos confiable, confirme la respuesta, Retransmisión de tiempo de espera, que también es un mecanismo central en TCP, y el búfer de recepción puede ordenar y deduplicar datos.


Este problema está incluido en la columna del blogger : JavaEE_Protect Xiao Zhouღ's Blog-CSDN Blog

Adecuado para principiantes en programación, los amigos interesados ​​pueden suscribirse para ver otros "Conceptos básicos de JavaEE".
Estén atentos para más aspectos destacados: Proteger Xiaozhou ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*'


 1. Introducción a la programación de redes

La comunicación de red real se realiza en base al modelo de red de cinco capas TCP/IP, capas de protocolo, de arriba hacia abajo, capa de aplicación -> capa de transporte -> capa de red -> capa de enlace de datos -> capa física, gestión de capas de protocolo, It se estipula que el protocolo de capa inferior proporciona servicios (interfaz-API) para el protocolo de capa superior.El protocolo de capa superior puede llamar directamente al protocolo de capa inferior, pero las llamadas entre capas no están permitidas. A excepción de la capa de aplicación, el resto de las capas están encapsuladas por el sistema operativo y proporcionan una interfaz de capa de transporte (API) - Socket, luego la capa de aplicación se desarrolla en base a Socket, que es lo que solemos llamar programación de red.

Socket: socket, que proporciona principalmente interfaces de protocolo de dos conjuntos de capas de transporte.

1. Desarrollo de la interfaz Socket basada en el protocolo de transporte UDP

2. Desarrollo de la interfaz Socket basada en el protocolo de transporte TCP 


Describa brevemente las principales funciones de los protocolos en cada nivel:

Capa de aplicación: Lo principal es que el programa desarrollado necesita tener una función y modo de networking e interacción de red, este punto es diseñado y desarrollado por el programador de acuerdo a las necesidades reales del negocio (elegir que protocolo de capa de transporte usar) .

Capa de transporte: principalmente responsable de la autenticidad y validez de los datos durante la transmisión, por ejemplo, si se detecta que los datos no se transmiten con éxito, entonces envíe otra copia para garantizar que los datos lleguen al destino desde la fuente.La capa de transporte proporciona servicios a la capa de aplicación.

Capa de red: principalmente responsable de la transmisión de datos, utilizando la dirección IP para encontrar la ubicación del host de destino en la red, el enrutamiento y el reenvío, y proporcionando una ruta de transmisión confiable.

Capa de enlace de datos: principalmente para el intercambio de datos entre dos nodos adyacentes, por ejemplo, los datos en la tarjeta de red se transfieren a la capa física para su conversión e identificación.

Capa física: dispositivos de hardware que transmiten datos binarios en varias formas, señales eléctricas de alto y bajo nivel: cables de red, señales ópticas de fibras ópticas y transmisión, etc.


2. Introducción al protocolo de transporte TCP

TCP (Protocolo de control de transmisión) es un protocolo de transmisión confiable y orientado a la conexión. Pertenece a la capa de transporte en el modelo de protocolo de Internet y también es el protocolo más utilizado en el desarrollo diario. El protocolo TCP puede garantizar una transmisión de datos confiable.

Este blog girará en torno a cómo el protocolo TCP garantiza una transmisión de datos confiable.

Características del protocolo TCP :

  1. Orientado a la conexión: antes de transmitir datos, las dos partes que se comunican primero establecen una conexión confiable
  2. Transmisión confiable:  El protocolo TCP tiene una serie de medidas como un mecanismo de retransmisión de tiempo de espera y un mecanismo de respuesta de confirmación.Cuando se comprueba que no hay problema con la conexión, pero los datos no se transmiten con éxito, los datos serán reenviados.
  3. Orientado a flujo de bytes: Literalmente, utilice transmisión de flujo de bytes.
  4. Búfer: durante la comunicación de datos de red, el búfer se utiliza para almacenar los datos que se enviarán o recibirán. Con el concepto de búfer, puede ayudar a coordinar la velocidad de transmisión de datos entre el remitente y el receptor, y minimizar el riesgo de pérdida o confusión de datos. ...
  5. Tamaño ilimitado de datos transferidos: flujo de bytes, transmisión, siempre que haya una conexión.
  6. Comunicación full-duplex: Ambas partes de la comunicación pueden intercambiar información al mismo tiempo, como: comunicación telefónica

 2. 1 formato de mensaje de protocolo TCP

Cuando aprendemos un protocolo, lo mejor es empezar a analizar los datagramas del protocolo.

Diagrama estructural de un mensaje TCP:

Observe cuidadosamente el diagrama de estructura del paquete de datos TCP, encontraremos que todo el encabezado fijo de TCP ocupa 20 bytes, 160 bits binarios, pero de acuerdo con el diagrama de estructura que dibujamos, la suma de todos los nodos es solo 158 bits binarios.

En esta línea de compensación de datos, 4 + 4 + 6 + 16 = 30 bits, de hecho, se " desperdician " dos bits binarios.

Análisis de paquetes TCP:

Puerto de origen y puerto de destino: cada uno de los dos puertos ocupa 16 bits binarios.  El puerto se puede considerar como la identidad de la aplicación . Cada programa que ingresa a la red se vinculará aleatoriamente a un número de puerto cuando se inicie, o puede ser asignado manualmente al programa. Un número de puerto, pero tenga en cuenta que el número de puerto no se puede repetir en el mismo host. Otro punto es que el número de puerto es menor o igual a 1024, lo que se denomina "número de puerto conocido". y es utilizado por algunos servidores conocidos, como: http 80. Utilice el número de puerto para identificar qué aplicación envía el mensaje y qué aplicación lo recibe.

Número de serie y número de confirmación: cada uno ocupa 32 bits binarios  para una transmisión de datos confiable. Cada byte del flujo de bytes transmitido se numerará en secuencia para garantizar que el orden de transmisión de datos sea el mismo que el orden de recepción. El número de secuencia representa el número de secuencia del paquete de datos enviado actualmente y el número de confirmación representa el número de secuencia del siguiente paquete de datos que se espera recibir.

Remitente: 1. Buenos días amigo, 2. ¿Te interesa salir los fines de semana?

Destinatario: 2. Te interesa salir los fines de semana 1. Buenos días amigo.

Esta situación obviamente no es confiable.La importancia del número de serie y el número de confirmación es garantizar que el orden de transmisión de datos sea el mismo que el orden de recepción.               

Desplazamiento de datos: ocupa 4 bits binarios  para determinar la longitud del encabezado del mensaje TCP y le dice al programa de aplicación en el extremo receptor dónde comenzar la parte de datos después de eliminar el mensaje del encabezado TCP.

Bits de bandera: incluidos ACK, SYN, FIN, RST, PSH y URG, cada uno de los cuales ocupa un bit binario.

Si la posición de la bandera es 1, significa verdadero.

ACK se utiliza para confirmar la recepción de paquetes de datos;

SYN juzga si las partes de la comunicación han establecido una conexión;

FIN se utiliza para cerrar la conexión;

RST se utiliza para restablecer la conexión;

PSH se usa para solicitar al receptor que envíe los datos a la aplicación inmediatamente en lugar de ingresar al búfer de recepción;

URG se utiliza para indicar que hay datos urgentes en el paquete TCP .

Tamaño de la ventana : se utiliza para el control de flujo, si el valor de la suma de verificación es correcto y si los datos se ven afectados durante la transmisión (por ejemplo: la interferencia de la señal electromagnética indica la cantidad máxima de bytes de datos no confirmados que el remitente puede enviar, este campo puede ser se utiliza para el control de flujo de TCP, y la ventana deslizante se describirá en detalle a continuación.

Suma de comprobación de TCP : se utiliza para detectar la desviación de datos causada por el encabezado y los datos de TCP. Asegurar la exactitud de los datos.

Puntero urgente: se usa solo cuando el indicador URG se establece en 1, se usa para indicar la posición final de los datos urgentes.

Reservado: los campos reservados en el encabezado TCP se utilizan principalmente para uso futuro, compatibilidad con versiones anteriores y prevención de errores, y brindan escalabilidad y flexibilidad para el protocolo TCP.


3. Mecanismo TCP para garantizar una transmisión de datos confiable 

3.1 Respuesta de acuse de recibo

Respuesta de confirmación: En el protocolo TCP, cada vez que se envían datos, el receptor enviará una respuesta de confirmación para indicarle al remitente que los datos han sido recibidos, si el remitente no recibe la respuesta de confirmación "retrasada", considerará que el los datos no se han enviado con éxito, y los datos serán retransmitidos.

Este es también el mecanismo central del protocolo TCP para lograr una transmisión confiable.

El indicador ACK (acuse de recibo) se utiliza para confirmar la recepción del paquete de datos y dará una retroalimentación ACK a las partes de la comunicación. Usando esta retroalimentación, podemos juzgar que el extremo receptor ha recibido con éxito la información por parte del extremo emisor. Al mismo tiempo, esto también significa que la "eficiencia" de la transmisión se reducirá. Después de un arduo trabajo, debe esperar los comentarios de la otra parte. Si no hay comentarios durante mucho tiempo, intentará reenviarlos ~

La respuesta de reconocimiento TCP (ACK) se refiere a un mecanismo en el que el receptor envía un segmento TCP con un bit indicador de reconocimiento al iniciador como respuesta después de recibir con éxito el paquete de datos TCP enviado por el iniciador.


En la comunicación de red, a menudo nos encontramos con la situación de que la información se "envía primero". Esta situación existió en el chat de QQ en los últimos dos años. También me he encontrado con esta situación. ¿Qué significa? Cuando envío un mensaje grande a mi amigo  Pila de mensajes. En teoría, el orden de los mensajes recibidos por la otra parte debería ser el mismo orden en que yo envié los mensajes. De hecho, no es así. A veces los mensajes no llegan en el orden que esperábamos, lo cual puede causar fácilmente algunos malentendidos. Por ejemplo :

 Hay muchas posibilidades de por qué los mensajes llegan más tarde que otros en la comunicación de red, y las siguientes son varias posibilidades:

  1. Congestión de la red: cuando la cantidad de datos en la red es demasiado grande, provocará la congestión de la red, lo que hará que algunos mensajes se retrasen o se pierdan, mientras que otros mensajes son transmitidos y procesados ​​por el receptor anterior. En este caso, incluso si el mensaje enviado antes que el mensaje enviado después, el mensaje enviado más tarde puede llegar al receptor antes que el mensaje enviado antes.

  2. Errores de transmisión: pueden ocurrir errores de transmisión durante la transmisión de la red, como daños, pérdida de paquetes, etc. Si se produce un error en un paquete de datos, el remitente debe volver a enviarlo a través de la retroalimentación del mensaje de reconocimiento, lo que puede causar que algunos mensajes enviados más tarde lleguen al receptor antes que los mensajes enviados antes.

  3. Retraso en la cola: cuando varios mensajes llegan a un receptor al mismo tiempo, el receptor puede ponerlos en una cola para su procesamiento. Si un mensaje enviado antes se pone en cola antes que un mensaje enviado más tarde, pero debido a otros factores (como el tamaño del mensaje, el tiempo de procesamiento, etc.), un mensaje llega al receptor antes que el mensaje que se envió antes.


Para resolver la situación de "mensajes enviados al último en llegar primero", los mensajes se pueden numerar, se asigna un "número de serie" al mensaje enviado y se proporciona un "número de serie de confirmación" en el mensaje de respuesta.

La transmisión de datos del protocolo TCP introduce números de secuencia y números de secuencia de confirmación.

El protocolo TCP numerará cada byte de datos de adelante hacia atrás, lo que se denomina "número de serie" , porque TCP está orientado a la transmisión de flujo de bytes, no existe tal cosa como un mensaje o dos mensajes.

 El número de secuencia de reconocimiento del paquete TCP del remitente no significa mucho:

La regla para confirmar el número de secuencia: el número de secuencia del siguiente byte de acuerdo con el número de secuencia del último byte de los datos enviados por el remitente.

Según el significado del número de serie 1001:

1. Si el número de acuse de recibo del mensaje de respuesta es < 1001, la información revelada por el receptor al remitente es que he recibido

2. A continuación, el receptor desea solicitar al remitente el flujo de bytes a partir de 1001.

Usando este mecanismo, podemos garantizar el orden de transmisión de datos, y los datos no serán procesados ​​inmediatamente por la aplicación cuando lleguen al receptor.Como se mencionó anteriormente, TCP tiene un concepto de búfer, y el búfer puede clasificar los datos de acuerdo con el " número de serie "

Si la transmisión va bien, el receptor enviará un acuse de recibo ( un "encabezado TCP" donde ACK = 1 ).


3.2 Retransmisión de tiempo de espera

En el proceso de transmisión de datos, inevitablemente causará un problema de "pérdida de paquetes" (datos faltantes). Afortunadamente, el protocolo TCP tiene un mecanismo de respuesta de confirmación. Si no hay respuesta de retroalimentación (ACK) para esa parte de los datos, el remitente lo considerará como justo Si la parte del paquete de datos se pierde, lo reenviará nuevamente.Si no hay respuesta del receptor después de reenviar varias veces, considerará el problema de conexión e intentará restablecer la conexión, etc., como se describe a continuación.

Retransmisión por tiempo de espera: en el protocolo TCP, si el remitente no recibe una respuesta de reconocimiento, realizará una retransmisión por tiempo de espera. El remitente establecerá un período de tiempo de espera y, si no se recibe confirmación dentro de este período, los datos se reenviarán.

El juicio del remitente sobre la pérdida de paquetes es que dentro de un cierto período de tiempo, no se ha recibido ninguna respuesta de reconocimiento ( segmento TCP con indicador de reconocimiento (ACK) ) - ACK = 0

Hay tres situaciones en este momento:
1. Los datos se pierden directamente durante la transmisión y el receptor no recibe los datos, por lo que no devolverá el segmento TCP con el indicador de reconocimiento (ACK).

2. Después de recibir los datos, el receptor retroalimenta un segmento TCP con un indicador de reconocimiento (ACK) (la información del encabezado TCP contiene ACK), y luego el segmento se pierde.

3. Cuando el remitente no recibe comentarios durante un cierto período de tiempo, activará una retransmisión de tiempo de espera y luego se perderán los datos retransmitidos.

Primer caso:

 Segundo caso:

El tercer caso:

En el caso de pérdida continua de múltiples paquetes de datos " sin retroalimentación del receptor ”, existe una alta probabilidad de que haya un problema muy serio en el entorno de la red. El protocolo TCP se ocupa de esta situación en la que se envían múltiples paquetes de datos continuamente y luego perdido de nuevo Sin embargo , cada vez que se pierde un paquete de datos, el tiempo de espera para el tiempo de espera será más largo (la frecuencia de retransmisión se reduce), y si la retransmisión se agota para múltiples transmisiones consecutivas, no se puede obtener la retroalimentación del receptor ( La información del encabezado ACK-TCP contiene ACK ), intente restablecer la conexión entre las partes de la comunicación. En este momento, si falla el restablecimiento de la conexión, el protocolo TCP abandonará esta comunicación de red.


Cuatro Resumen

El protocolo de control de transmisión TCP es el protocolo más utilizado en la comunicación por Internet.Usando el protocolo TCP para transmitir datos, los datos son seguros y confiables, con alta autenticidad y velocidad de transmisión rápida.

El núcleo de aprender un protocolo es estar familiarizado con su formato de mensaje.

Respuesta de reconocimiento:

Cuando el receptor reciba los datos del remitente, le dará al remitente un campo con encabezado TCP, donde ACK = 1, indicando que he recibido los datos. 

Si el remitente no espera el reconocimiento del receptor dentro de un cierto período de tiempo, retransmitirá el "paquete de datos". Si no recibe comentarios durante el período, el remitente reducirá la frecuencia de las retransmisiones, excediendo un cierto número. de veces. , TCP intentará restablecer la conexión para la comunicación, si la conexión falla, terminará esta comunicación de red.

Para resolver el problema de que los datos enviados por TCP son diferentes de los datos recibidos, TCP codifica cada byte para la transmisión de flujo de bytes. El campo de número de serie describe el número de serie del "paquete de datos" actual y el número de serie de confirmación de el remitente no tiene un significado real, el número de secuencia del próximo "paquete de datos" esperado descrito por el número de secuencia de confirmación devuelto por el receptor , de modo que el remitente sepa que la otra parte necesita "ese segmento" de datos la próxima vez, y entonces es el papel del búfer de recepción , y los datos transmitidos están disponibles.Numeración, los datos se pueden ordenar usando el número de serie del "paquete de datos", para garantizar el orden de los datos.

En el caso de que el receptor reciba los datos correctamente, pero se pierda el paquete ACK de retroalimentación, el remitente vuelve a transmitir después de un tiempo de espera y el búfer de recepción deduplicará los datos para garantizar que los datos obtenidos por la aplicación sean únicos.


Ok, aquí vamos, formato de mensaje [protocolo TCP] en ​​programación de red, el mecanismo de transmisión de datos confiable (1) los bloggers han terminado de compartir, hoy es principalmente para aprender la estructura del mensaje de TCP, y dos tipos de datos de garantía confiables La transmisión El mecanismo también es un mecanismo relativamente central. Espero que sea útil para todos. Si hay algo mal, critique y corrija ~

 

Vista previa del próximo número: [Protocolo TCP] "Tres apretones de manos, cuatro ondas" de gestión de conexión

Gracias a todos los que leyeron este artículo, y se avecinan más eventos emocionantes: Proteger Xiaozhou ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

Te conocí, todas las estrellas están cayendo sobre mi cabeza...

Supongo que te gusta

Origin blog.csdn.net/weixin_67603503/article/details/130307122
Recomendado
Clasificación