El proceso de comunicación del protocolo TCP
Espero que la siguiente información te sea de utilidad.
TCP/IP se compone de muchos protocolos diferentes. En realidad, es un grupo de protocolos. Protocolo de informe de datos de usuario TCP (también
Se llama protocolo de control de transmisión TCP. Protocolo confiable de capa de host a host. Aquí primero debemos enfatizar
que el protocolo de control de transmisión es un OSI red El nombre de la cuarta capa, Protocolo de control de transmisión TCP, es uno de los seis protocolos básicos de TCP.
Los dos TCP tienen significados diferentes. TCP es un servicio de transporte confiable orientado a la conexión.
Transmite datos en segmentos y el host debe establecer una sesión para intercambiar datos. Se comunica mediante flujos de bits, es decir, datos.
Tratado como un flujo de bytes no estructurado. Los números de secuencia se especifican mediante campos en cada transmisión TCP para mayor confiabilidad. Es la cuarta capa en el modelo de referencia OSI. TCP utiliza la función de interconexión de IP para proporcionar una transmisión de datos confiable. IP mantiene los mensajes colocados en la red, y TCP es responsable de garantizar que los mensajes lleguen. En la operación de IP cooperativa, TCP es responsable de: proceso de protocolo de enlace, gestión de mensajes, control de flujo, detección y procesamiento (control) de errores, todos los cuales pueden basarse en un cierto número de secuencias de excepción.
Los mensajes se dan en el nuevo orden. Los documentos RFC sobre TCP incluyen RFC793, RFC791 y RFC1700.
Al comienzo de una sesión TCP, existe el llamado "apretón de manos de tres vías": se negocia cómo rastrear la cantidad de datos enviados cada vez.
Sincronización de segmentos de datos de envío y recepción, el número de confirmaciones de datos determinado en función de la cantidad de datos recibidos y la finalización del envío y recepción de datos.
Cuándo cancelar el contacto y establecer una conexión virtual una vez completado. Para proporcionar una transmisión confiable, TCP utiliza números de secuencia que requieren un orden específico de paquetes antes de enviar nuevos datos y mensajes de confirmación después de que estos paquetes se transmiten a la máquina de destino. TCP siempre se utiliza
para enviar grandes cantidades de datos. TCP también se utiliza cuando una aplicación desea acusar recibo de datos después de haberlos recibido. El formato de TCP es algo complicado debido a la sobrecarga adicional requerida por el seguimiento del tiempo de TCP. Veamos un caso clásico de TCP, que más tarde se conoció como el ataque Mitnick. KEVIN ha sido pionero en dos técnicas de ataque:
Secuestro de sesión TCP
Inundación sincrónica (inundación sincrónica)
Aquí estamos discutiendo el tema del secuestro de sesión TCP.
Primero echemos un vistazo al proceso básico y simple de establecer una conexión TCP. Para construir un pequeño ambiente de imitación, lo dejamos.
Hay tres máquinas conectadas a Internet. a es un avión de ataque controlado por el atacante. b es un trampolín intermediario (dispositivo de servicio confiable). c es la máquina utilizada por la víctima (principalmente un servidor). Aquí, la máquina C está bloqueada como máquina de destino. Una máquina envía un paquete SYN a la máquina b, solicitando establecer una conexión. En este momento, la máquina B, que ha respondido a la solicitud, responderá SYN/ACK a la máquina a.
Indica consentimiento para establecer la conexión. Cuando la máquina A recibe la respuesta SYN/ACK enviada por la máquina B, envía una respuesta ACK para establecer la conexión.
La conexión de red entre la máquina a y la máquina b. De esta forma, se establece con éxito el canal de comunicación TCP entre las dos máquinas.
El servidor de confianza del terminal B inicia una conexión TCP con la máquina C y la máquina A inicia un mensaje SYN al servidor. De esta manera,
la máquina C no puede responder a la máquina B. Al mismo tiempo, la máquina A también se envía un paquete SYN incorrecto a la máquina B.
La máquina B (confiable por la máquina C) que recibe el paquete SYN comienza a enviar paquetes SYN/ACK en respuesta al establecimiento de la conexión. .
En este momento, la máquina C está ocupada respondiendo a los datos SYN enviados anteriormente y no tiene tiempo para responder a la máquina B. El atacante de la máquina A esperaba esto.
Detecta el número de serie del paquete de la máquina B (los números de secuencia TCP ahora son difíciles de predecir) y envíalo a la máquina B haciéndose pasar por la máquina C.
En este momento, en respuesta a ACK, el atacante engaña la confianza de la máquina B y se hace pasar por la máquina C para establecer una sesión TCP con la máquina B.
Contestar el teléfono. En este momento, la máquina C todavía está respondiendo a los datos SYN enviados por la máquina atacante A.
Debilidades de la pila de protocolos TCP: consumo de recursos de las conexiones TCP, incluida información de paquetes, estado de condición y secuencia.
No, etc. Al no completar deliberadamente el proceso de protocolo de enlace de tres vías necesario para establecer una conexión, se agotan los recursos de la parte que se conecta.
Si el atacante no completa deliberadamente el protocolo de enlace de tres vías necesario para establecer una conexión, la máquina C
agota los recursos. La previsibilidad del número de secuencia se puede predecir mediante el número de secuencia SYN/ACK devuelto por el host de destino en respuesta a la solicitud de conexión.
Sé medido. (Para obtener detalles sobre la pila del protocolo TCP inicial, consulte el documento RFC793 sobre el prototipo TCP publicado en 1981).
Estructura del encabezado TCP
El encabezado del protocolo TCP tiene al menos 20 bytes. incluyendo las siguientes áreas (debido a diferentes traducciones, el artículo proporciona las palabras en inglés correspondientes):
Puerto de origen TCP: puerto de origen de 16 bits, incluido el puerto que inicia la comunicación. La función del puerto de origen y
dirección IP de origen es indicar la dirección de retorno de la consulta.
Puerto de destino TCP: El campo Puerto de destino de 16 bits define el propósito de la transmisión. Este puerto se refiere
a la interfaz de dirección de la aplicación en la computadora que recibe el mensaje.
Número de secuencia TCP: el número de secuencia de 32 bits utilizado por la computadora receptora, que es relativamente pesado.
El mensaje recién segmentado está en su formato original. Cuando aparece SYN, el código de secuencia es en realidad el número de secuencia inicial (ISN) y el primer byte es ISN 1. Este número de secuencia (número de secuencia) puede compensar las inconsistencias en la transmisión.
Número de confirmación TCP: El número de secuencia de 32 bits utilizado por el ordenador receptor, que se repite.
Combina mensajes segmentados en su forma original. Si el bit de control ACK está establecido, este valor indica el orden de los paquetes que se recibirán.
Código de columna.
Desplazamiento de datos (HLEN): 4 bits incluyen el tamaño del encabezado TCP e indican dónde comienzan los datos.
Reservado: rango de 6 bits, estos bits deben ser 0. Reservado para futura definición de nuevos usos.
Bit de código: campo de bandera de 6 bits. Se muestra como: señal de emergencia, señal de respuesta significativa, presionar y restablecer.
Indicador de conexión, indicador de número de secuencia de sincronización y indicador de finalización de transferencia de datos. En orden: Ergo, Aker, PSH,
RST, SYN, FIN.
Ventana: 16 bits, utilizada para indicar el tamaño de cada segmento de datos TCP a recibir.
Suma de comprobación: cabecera TCP de 16 bits. La máquina de origen calcula un valor en función del contenido de los datos y el receptor debe ser exactamente el mismo que el valor de la máquina de origen para demostrar la validez de los datos.
Puntero de prioridad (puntero urgente): 16 bits, apuntando al byte posterior al dato de prioridad, en el URG.
Solo válido cuando la bandera está configurada. Si el indicador URG no está configurado, se completa el campo urgente. Agilizar el procesamiento de artículos marcados como urgentes. segmento de datos de
.
Opciones: Longitud indefinida, pero debe estar en bytes. Si no hay opción, se representa este byte. El campo de
es igual a 0.
Relleno: longitud variable, el contenido del relleno debe ser 0, que existe para fines matemáticos. El objetivo es garantizar la previsibilidad entre estar vacío
. Asegúrese de que la combinación del encabezado del paquete y el desplazamiento al comienzo de los datos sea divisible por 32, generalmente con ceros adicionales.
Demuestra que el encabezado TCP es un múltiplo entero de 32 bits.
Función de control de símbolos
URG: Bandera de emergencia
La bandera del puntero de emergencia es válida.
Establecer indicador de emergencia,
ACK: indicador de confirmación
Confirma que la secuencia numérica es válida. En la mayoría de los casos, se establecerá la bandera.
El número de confirmación (w 1, Figura: 1) contenido en la columna de número de confirmación del encabezado TCP es el siguiente número de secuencia esperado, que es el mismo que el anterior.
Indica que el sistema remoto ha recibido correctamente todos los datos.
PSH: push flag
Cuando se establece este indicador, el extremo receptor no pone en cola los datos, sino que los transmite a la aplicación lo más rápido posible.
Procesamiento. Este indicador siempre se establece cuando se manejan conexiones en modo interactivo (como telnet o rlogin).
RST: restablecer bandera
La bandera de restablecer es válida. Se utiliza para restablecer la conexión TCP correspondiente.
SYN: Indicador de sincronización
La columna del número de secuencia de sincronización es válida. Esta bandera sólo es verdadera durante un protocolo de enlace de tres vías.
Válido durante la conexión TCP. Solicita al servidor de la conexión TCP que verifique el número de secuencia, que es el punto de partida de la conexión TCP.
El número de secuencia inicial del cliente (normalmente el cliente). Aquí, el número de secuencia TCP se puede considerar como un número que va del 0 al 4,
294, 967, 295 como un contador de 32 bits. Cada byte de los datos intercambiados a través de una conexión TCP está numerado secuencialmente.
La columna de número de secuencia en el encabezado TCP contiene el número de secuencia del primer byte en el segmento de datos TCP.
fin: end symbol
Los paquetes con este indicador configurado se utilizan para finalizar la respuesta TCP, pero el puerto correspondiente permanece abierto.
Listo para recibir datos posteriores.
El servidor está en estado de escucha y el paquete IP utilizado por el cliente para establecer una solicitud de conexión cumple con TCP/IP.
La pila de protocolos se combina en un segmento de procesamiento TCP.
Analizar información de encabezado: La capa TCP recibe los encabezados TCP e IP correspondientes y almacena esta información en la memoria.
Comprobar suma de comprobación TCP: La suma de comprobación estándar se encuentra en el segmento de datos (Figura 2). Si la prueba
falla y no se devuelve ningún reconocimiento, el segmento se descarta y el cliente espera la retransmisión.
Busca el bloque de control de protocolo (PCB): TCP busca el bloque de control de protocolo asociado a esta conexión. Si no puede encontrarlo, TCP descarta el segmento y devuelve RST. (Este es el mecanismo de procesamiento de TCP sin un monitor de puerto) Si este bloque de control de protocolo existe, pero el estado es cerrado y el servidor no llama a connect() o listening(). El segmento se descarta pero no se devuelve.
Volver a Prim. El cliente intentará restablecer la solicitud de conexión.
Crear un nuevo socket: cuando el socket de escucha recibe este segmento, crea un socket secundario.
Crea socket{}, tcpboard {} y pub{} al mismo tiempo. En este punto, si ocurre un error, se eliminará mediante el bit de bandera.
Socket y memoria liberados, la conexión TCP falló. Si la cola de caché está llena, TCP cree que se ha producido un error.
Todas las solicitudes de conexión posteriores serán rechazadas. Aquí puedes ver cómo funciona el ataque SYN Flood.
Descartar: si el indicador en el segmento de datos es RST o ACK, o no hay un indicador SYN, el segmento de datos se descartará.
Y liberar la memoria correspondiente.
Enviar variable de secuencia
SND. UNA: Envío sin acuse de recibo.
SND. NXT: Manda el siguiente.
SND. WND: Ventana de envío
SND. Arriba: Enviar puntero de prioridad
SND. WL1: el número de secuencia del segmento de la última actualización de la ventana.
SND. WL2: Número de confirmación del segmento de la última actualización de la ventana.
ISS: Número de secuencia de transmisión inicial
Número de secuencia de recepción
RCV. NXT: Toma el siguiente.
RCV.
WND: Acepta el siguiente.
RCV. Arriba: Puntero de prioridad de recepción
IRS: Número de secuencia de recepción inicial
Variable de segmento actual
SEG. SEQ: Número de segmento
SEQ. ACK: indicador de confirmación del segmento de datos
SEG. Longitud: longitud del segmento de línea
SEG. WND: Ventana de segmento
SEG. Arriba: puntero de emergencia segmentado
SEG. PRC: Prioridad de subdivisión
Cerrar significa que no hay conexión. El significado de cada estado es el siguiente:
Escucha: escucha las solicitudes de conexión desde el puerto TCP remoto.
SYN-SENT: espera una solicitud de conexión coincidente después de enviar una solicitud de conexión.
SYN-RECEIVED: Después de recibir y enviar la solicitud de conexión, espere la confirmación de la solicitud de conexión.
ESTABLECIDO: Indica una conexión abierta y se pueden transmitir datos al usuario.
FIN-WAIT-1: Espera la solicitud de interrupción de la conexión TCP remota o la confirmación de la solicitud de interrupción de la conexión anterior.
FIN-WAIT-2: Espera una solicitud de interrupción de la conexión desde el TCP remoto.
CLOSE-WAIT: Espera la solicitud de interrupción de la conexión del usuario local.
Cerrar: Esperar a que el TCP remoto confirme la interrupción de la conexión.
LAST-ACK: Espera el reconocimiento de la solicitud de interrupción de la conexión enviada originalmente al TCP remoto.
TIEMPO DE ESPERA: Espere el tiempo suficiente para garantizar que el TCP remoto reciba la confirmación de la solicitud de interrupción de la conexión.
Cerrar: Sin estado de conexión.
El proceso de conexión TCP es una transición de estado, el usuario llama: ABRIR, ENVIAR,
Recibir, cerrar, abortar y estado. Segmentos de datos transmitidos, especialmente aquellos que contienen los siguientes números.
Según Theon, Ekko, RST y Fin. También hay un tiempo de espera, que ocurre cuando el estado de TCP cambia en la metrópoli mencionada anteriormente.
Número de secuencia
Tenga en cuenta que cada byte que enviamos en la conexión TCP tiene un número de secuencia. Como está numerado, puedes
confirmar su recepción. La confirmación de los números de serie es acumulativa. Los tipos de operaciones de comparación de números de secuencia que TCP debe realizar incluyen
lo siguiente:
(1) Determinar algunos números de secuencia que se han enviado pero no se han confirmado.
② Asegúrese de haber recibido todos los números de serie.
③Determine el número de secuencia que debe incluirse en el siguiente párrafo.
Para que TCP reciba acuse de recibo de los datos enviados, qué se debe hacer durante el proceso de acuse de recibo:
SND. UNA = número de secuencia confirmado más antiguo.
SND. NXT = Siguiente número de secuencia a enviar.
Seg. ACK = Recibir un acuse de recibo de TCP y recibir el siguiente número de secuencia esperado por TCP.
Seg. SEQ = primer número de secuencia del segmento de datos.
Seg. LEN = Número de bytes contenidos en el segmento de datos.
Seg. SEG. LEN-1 = el último número de secuencia del segmento de datos.
Si el número de secuencia del segmento de datos es menor o igual que el valor del número de reconocimiento, se reconoce todo el segmento de datos. Sin embargo
Al recibir datos, se requiere la siguiente operación de comparación:
RCV. NXT = Número de secuencia esperado y borde más bajo de la ventana de recepción.
RCV. RCV NXT. WND: 1 = último número de secuencia y borde más alto de la ventana de recepción.
Seg. SEQ = primer número de secuencia recibido.
Seg.seq seg.len: 1 = Último número de secuencia recibido.