Introducción a la capa de transporte

A través del aprendizaje de la capa de red IP, sabemos que el protocolo IP puede enviar los paquetes enviados por el host de origen A al host de destino B de acuerdo con la dirección de destino en el encabezado. Entonces, ¿por qué necesitamos una capa de transporte?
Desde la capa IP, los dos extremos de la comunicación son dos hosts, lo que a menudo se denomina comunicación punto a punto . Pero la verdadera entidad de comunicación en la red informática es el proceso que se ejecuta en la computadora host, y es su interacción de datos. Por lo tanto, la capa de red IP solo entrega el paquete al host, pero no lo entrega al proceso de comunicación real, por lo tanto, la capa de transporte debe indicar que el paquete de datos recibido de la red debe entregarse al proceso. Esto a menudo se conoce como comunicación de extremo a extremo .
Dado que el host puede estar ejecutando múltiples aplicaciones de red al mismo tiempo, es necesario que la capa de transporte pueda distinguir los paquetes de la capa de red que deben entregarse a esa aplicación. En este momento, se necesita un letrero para indicar que se entrega a una aplicación, y el número de puerto se utiliza para la identificación en la red informática . Múltiples procesos de aplicación pueden usar el protocolo de la capa de transporte para transmitir datos, es decir, la capa de transporte tiene funciones de multiplexación , y después de quitar el encabezado del paquete después de recibir el paquete, los datos se pueden entregar correctamente al proceso de aplicación de destino, por lo que la capa de transporte También debe tener una función de demultiplexación . La siguiente figura es el proceso de entrega de información entre procesos en dos hosts.
Inserte la descripción de la imagen aquí
La capa de transporte en TCP / IP utiliza un número de puerto de 16 bits para marcar un puerto. El número de puerto se divide en: número de puerto del sistema (0-1023), número de puerto de registro (1024-49151), número de puerto utilizado por el usuario final (49152-65535 ) Los siguientes son números de puerto conocidos de uso común:
Inserte la descripción de la imagen aquí
donde la capa de transporte proporciona comunicación lógica entre los procesos de aplicación. La comunicación lógica se refiere a: la capa de aplicación solo necesita entregar paquetes de aplicación a la siguiente capa de transporte, y la capa de transporte puede transmitir estos paquetes a La capa de transporte de la otra parte parece comunicar datos directamente a lo largo de la dirección horizontal. Pero, de hecho, no hay una conexión física horizontal entre las dos capas de transporte.
La capa de transporte protege a los usuarios de alto nivel de los detalles del núcleo de la red a continuación. Hace que el proceso de la aplicación vea como si hubiera un canal de comunicación lógica de extremo a extremo entre las dos entidades de la capa de transporte . La capa de transporte debe verificar los mensajes recibidos en busca de errores. Cuando el paquete IP llega al host de destino y se entrega a la capa superior, si se descubre que el número de puerto es incorrecto (es decir, no hay proceso de este puerto), enviará un mensaje de control de error "puerto inalcanzable" al remitente.
Los dos protocolos principales en la capa de transporte: Protocolo de datagramas de usuario UDP y Protocolo de control de transmisión .

Protocolo UDP

Características principales de UDP :

  • UDP no tiene conexión, es decir, no es necesario establecer una conexión antes de enviar datos
  • UDP utiliza la entrega de mejor esfuerzo, lo que no garantiza una entrega confiable
  • UDP esOrientado a mensajesEs decir, el mensaje UDP enviado por el remitente a la aplicación se entrega a la capa IP después de agregar el encabezado (el mensaje no se fusiona ni se divide)
  • UDP no tiene control de congestión, es decir, la presencia de congestión en la red no reducirá la velocidad de envío del host de origen
  • UDP admite comunicación interactiva uno a uno, uno a muchos, muchos a uno y muchos a muchos
  • cabecera UDP cabeza es pequeña, sólo el 8 bytes
    UDP mayores ventajas es su alta en tiempo real y sencilla , formato de cabecera UDP como se muestra a continuación:
    Inserte la descripción de la imagen aquí
  • El pseudo encabezado no es el encabezado real del datagrama de usuario UDP, solo se usa para el cálculo y la verificación, y no se envía hacia arriba o hacia abajo.
  • El número de puerto se utiliza para marcar el proceso de comunicación.
  • Longitud: la longitud de todo el datagrama de usuario
  • Suma de comprobación: verifique el datagrama de usuario completo .

Protocolo TCP

Características principales de TCP

  • TCP es un protocolo de capa de transporte orientado a la conexión, es decir, una aplicación debe establecer una conexión TCP antes de usar el protocolo TCP. Después de transmitir datos, se debe liberar la conexión TCP establecida.
  • Cada conexión TCP solo puede tener dos puntos finales, y cada conexión TCP solo puede ser punto a punto .
  • TCP proporciona servicios de entrega confiables
  • TCP está orientado a bytes . En la comunicación TCP, el número de bytes que debe contener un paquete se determina en función del valor de ventana proporcionado por la otra parte y el nivel de congestión de red actual .
    Cada conexión TCP tiene dos puntos finales, entonces, ¿cuál es el punto final de la conexión TCP? El punto final de una conexión TCP se denomina socket o socket. El socket se empalma desde el número de puerto a la dirección IP. En Linux, los protocolos TCP y UDP usan sockets para la comunicación.

Formato de encabezado del segmento TCP

Inserte la descripción de la imagen aquí
Encabezado de segmento TCPLos primeros 20 bytes son fijos, Los siguientes 4N bytes son opciones agregadas según las necesidades, a continuación se presenta brevemente el significado de cada campo.

  • Número de puerto: escriba el puerto de origen y el puerto de destino por separado, para marcar el tipo de aplicación de capa superior.
  • Número de secuencia: el número de secuencia se calcula utilizando el mod 2 32. El valor del campo de número de secuencia en el encabezado se refiere al número de secuencia del primer byte de los datos enviados en este segmento . TCP está orientado a bytes. Cada byte en el flujo de bytes transmitido en una conexión TCP está numerado en secuencia. El número de secuencia inicial de todo el flujo de bytes a transmitir debe establecerse cuando se establece la conexión.
  • Numero de confirmacion:Espere recibir el número de secuencia del primer byte de datos del siguiente segmento de la otra parte
  • Desplazamiento de datos: indica qué tan lejos está el inicio de datos del segmento TCP desde el inicio del segmento TCP. Esa es la longitud del encabezado del paquete TCP .
  • URG de emergencia: cuando URG = 1, indica que el campo de puntero de emergencia es válido. Le dice al sistema que hay datos urgentes en este segmento, que deben transmitirse lo antes posible . El remitente inserta los datos de emergencia en el frente de los datos del mensaje, y los datos después de los datos de emergencia siguen siendo datos normales. En este momento, debe usarse junto con el campo de puntero de emergencia en el encabezado.
  • Confirmar ACK: el campo del número de confirmación solo es válido cuando ACK = 1; de lo contrario, el número de confirmación no es válido. TCP estipula que todos los segmentos transmitidos deben establecer ACK después de que se establezca la conexión.
  • Push PUH: TCP utiliza la operación push push. En este momento, el emisor establece PSH en 1 e inmediatamente crea un segmento para enviar. Del mismo modo, el receptor entrega el proceso de solicitud de recepción tan pronto como sea posible después de recibir el segmento PSH = 1. En lugar de esperar a que se llene todo el caché antes de entregarlo hacia arriba.
  • Restablecer RST: RST = 1, lo que indica que se produjo un error grave en la conexión TCP, la conexión debe liberarse y luego restablecer la conexión de transporte. Este campo también se usa para rechazar un segmento ilegal o negarse a abrir una conexión.
  • SINCRONIZACIÓN: se utiliza para sincronizar el número de serie cuando se establece la conexión. Cuando SYN = 1, ACK = 0, indica que este es un segmento de solicitud de conexión. Si acepta establecer una conexión, SYN = 1 y ACK = 1 en el segmento de respuesta.
  • Finalizar FIN: se utiliza para liberar una conexión. Cuando FIN = 1, indica que se han enviado los datos del remitente de este segmento y solicita liberar la conexión de transporte.
  • Ventana: La ventana se refiere a la ventana de recepción de la parte que envía este segmento. El valor de la ventana le dice a la parte opuesta la cantidad de datos (en bytes) que el destinatario actualmente permite que la otra parte envíe desde el número de confirmación en el encabezado de este segmento.
  • Suma de verificación: el alcance de la verificación de la suma de verificación es el mensaje TCP completo (es decir, incluido el encabezado y los datos). Similar a UDP, se debe agregar un pseudo encabezado de 12 bytes .
  • Puntero urgente: este campo solo tiene sentido cuando URG = 1. Indica el número de bytes de datos urgentes en este segmento ( datos normales después del final de los datos urgentes ).Tenga en cuenta que los datos de emergencia se pueden enviar incluso cuando la ventana es cero
  • Opciones: longitud variable, hasta 40 bytes. Hay una longitud máxima de segmento de mensaje MSS, expansión de ventana, marca de tiempo, confirmación de selección y otras opciones.

Gestión de conexión de transporte TCP

TCP es un protocolo orientado a la conexión, y las conexiones de transporte se utilizan para transmitir mensajes TCP. Hay tres etapas en el proceso de transporte TCP y la interacción del circuito, a saber, el establecimiento de la conexión, la transmisión de datos y la liberación de la conexión. La conexión orientada se refiere a la comunicación TCP, cada canal TCP solo puede conectar dos puertos, durante el proceso de comunicación estos dos puertos (incluidos los recursos correspondientes: bloque de control de transmisión TCB) se han asignado al proceso de comunicación Uso, otras aplicaciones no pueden ser utilizadas . Corregido aquí, todavía hay algunos malentendidos sobre la comprensión previa orientada a la conexión.Orientado a la conexión significa que TCP necesita establecer una conexión antes de transmitir datos, determinar el número de serie de ambas partes y similares. En la transmisión posterior, estos valores son necesarios para juzgar si la transmisión es exitosa. El bloque de control de transmisión TCB mencionado anteriormente no es el punto. Cada vez que se establece un núcleo de conexión, asignará algunos recursos a la aplicación.. Ahora la comprensión es así, si el lector tiene una mejor comprensión, corríjame.

Establecer una conexión

TCP utiliza un protocolo de enlace de tres vías para establecer una conexión. Los siguientes problemas deben resolverse durante el proceso de establecimiento de la conexión:

  • Para permitir que cada parte conozca la existencia de la otra parte
  • Permita que ambas partes negocien algunos parámetros (como el número de serie, el valor máximo de la ventana, si usar opciones, etc.)
  • El proceso de asignación de
    apretón de manos (tamaño del búfer) a los recursos de la entidad de transporte es el siguiente: la conexión se establece utilizando el campo SYN . TCP requiere que el segmento SYN no pueda transportar datos, pero consume un número de secuencia. El segmento ACK puede transportar datos, pero si no transporta datos No se consume ningún número de serie. Tenga en cuenta que el segundo protocolo de enlace también se puede dividir en dos segmentos, primero envíe un paquete de confirmación (es decir, ACK = 1, ack = x + 1) y luego envíe un segmento de sincronización (SYN = 1, seq = y ) Tal proceso se convierte en un apretón de manos de cuatro paquetes con el mismo efecto. El ACK anterior es el campo de encabezado ACK, y ack es el número de confirmación.
    Inserte la descripción de la imagen aquí
    Después de que B devuelve los datos a A, puede indicar que AB existe. ¿Por qué A necesita enviar una confirmación por fin?Esto es principalmente para evitar que el mensaje de solicitud de conexión no válida se envíe repentinamente a B, lo que provoca un error. Por ejemplo, el primer mensaje de solicitud de conexión enviado por A permanece durante mucho tiempo en un nodo de red, y A no recibe el mensaje de confirmación y continúa enviando una solicitud de conexión. Comunicación normal ... libere la conexión. Después de que se liberó la conexión, la solicitud que había estado atascada en la red durante mucho tiempo se envió a B. Esto se debe a que B pensó erróneamente que A envió una nueva solicitud de conexión, por lo que envió un segmento de confirmación A a A y acordó establecer una conexión. Si no se utiliza el apretón de manos del tercer mensaje, luego de que B envía un acuse de recibo, se establece una nueva conexión. En este momento, B cree que se ha establecido una nueva conexión de transporte y ha estado esperando a que A envíe datos, por lo que se desperdician muchos recursos de B. El uso de esta función puede causar un ataque al servidor. Muchos hosts envían solicitudes SYN al servidor solo una vez y luego cierran el proceso. El servidor siempre esperará la respuesta de A y desperdiciará recursos. Cada escucha en el calcetín tiene una longitud de cola , Se descartará si excede. Por lo tanto, no se puede establecer una solicitud normal. Esto a menudo se conoce como el ataque SYN .

Lanzamiento de conexión TCP

El bit de control de terminación FIN en el encabezado del segmento de conexión de envío-liberación debe establecerse en 1, y el mismo TCP estipula que el segmento FIN consume un número de secuencia incluso si no transporta datos .
Inserte la descripción de la imagen aquí
El proceso es:

  • El proceso de solicitud de A primero envía un segmento de mensaje de liberación de conexión a su TCP, deja de enviar datos y cierra activamente la conexión TCP. Envíe el mensaje (FIN se establece en 1, seq = u, u es el número de secuencia del último byte de los datos transmitidos anteriormente más 1), ingrese el estado FIN-WAIT-1, esperando la confirmación de B.
  • Después de recibir el mensaje de liberación de la conexión, B envía un acuse de recibo (ACK = 1, seq = u, ack = u + 1) y entra en el estado CLOSE-WAIT. El proceso del servidor TCP debe informar al proceso de la aplicación de alto nivel en este momento que se libera la conexión de A a B. En este momento, la conexión TCP está en un estado semicerrado.
  • Después de recibir la confirmación de B, A ingresa al estado FIN-WAIT-2 y espera el mensaje de liberación de conexión de B.
  • Si B no tiene datos para enviar a A, su proceso de solicitud notifica a TCP para liberar la conexión. En este momento, B envía un mensaje de liberación y luego B ingresa al estado de ÚLTIMO ACUSE, esperando la confirmación de A.
  • Después de recibir el segmento de mensaje de liberación de conexión B, A debe confirmar esto, enviar el mensaje y luego ingresar el estado de ESPERA DE TIEMPO. Tenga en cuenta que la conexión TCP aún no se ha liberado, y el tiempo debe esperar al tiempo establecido por el temporizador 2MSL antes de que A entre en el estado CERRAR. Cada vez que se emite un ACK, el temporizador de espera se reinicia.
  • B ingresa inmediatamente al estado CERRAR después de recibir la confirmación de A.
    ¿Por qué A tiene que esperar 2MSL en el estado TIME-WAIT?
    Para garantizar que el último mensaje ACK enviado por A pueda llegar a BEste ACK puede perderse. B no retransmitirá el mensaje FIN si no recibe la confirmación del mensaje ACK dentro del tiempo correspondiente. B necesita retransmitir la confirmación dentro de este tiempo de espera. De lo contrario, B no puede entrar en el estado CERRAR.Además, puede evitar que el segmento de solicitud de conexión no válida mencionado en el protocolo de enlace de tres vías aparezca en esta conexiónPorque después de 2MSL, todos los segmentos generados durante la duración de esta conexión desaparecerán de la red.
    Después de liberar la conexión, AB cancelará el bloque de control de transmisión TCB correspondiente. La duración más larga del segmento de mensaje MSL en lo anterior se establece básicamente en 2 minutos. Además del temporizador de espera en el protocolo TCP , también hay un temporizador de mantenimiento , que se utiliza para evitar que el dispositivo funcione mal y no se comunique normalmente durante el proceso de comunicación, lo que hace que el extremo receptor espere y desperdicie recursos. El temporizador Keep-Live generalmente se establece en 2 horas. Si no se recibe un datagrama dentro de 2 horas, se enviará un segmento de sonda. Cada 75 segundos, si aún no hay respuestas después de enviar 10 segmentos de sonda continuamente, Luego cierre la conexión directamente.

Cómo funciona la transmisión confiable TCP

Sabemos que los paquetes enviados por TCP se entregan a la capa IP para su transmisión, pero la capa IP solo puede proporcionar los mejores servicios, por lo que TCP debe tomar las medidas adecuadas para que la comunicación entre las dos capas de transporte sea confiable. El mecanismo de confirmación y retransmisión utilizado aquí a menudo también se denomina solicitud de retransmisión automática ARQ

  • Protocolo de detención de espera El protocolo de
    detención de espera consiste en dejar de enviar cada vez que se envía un paquete, esperar la confirmación de la otra parte y luego enviar el siguiente paquete después de recibir la confirmación. El remitente establece un temporizador de tiempo de espera después de enviar un paquete y, una vez que expira el temporizador, reenvía el último paquete enviado. Antes de recibir la confirmación de la otra parte antes de que expire el temporizador, se cancela el temporizador establecido. Los protocolos de transmisión confiables como este a menudo se denominan protocolos de solicitud de retransmisión automática ARQ para
    Inserte la descripción de la imagen aquí
    detener la espera. Las ventajas son simples, pero la desventaja es que la tasa de utilización del canal es demasiado baja. Para mejorar la eficiencia de la transmisión, el emisor puede usar la transmisión de la tubería en lugar del ineficiente protocolo de parada y espera . Es decir, el remitente puede enviar múltiples paquetes en sucesión, sin tener que pausar cada vez que se envía un paquete y esperar la confirmación de la otra parte. Como se muestra en la siguiente figura:
    Inserte la descripción de la imagen aquí
    Este es el protocolo ARQ continuo . El remitente mantiene la ventana de envío y luego mueve la ventana de envío hacia adelante un paquete después de recibir la confirmación del paquete. El receptor generalmente adopta el método de reconocimiento acumulativo. Después de recibir múltiples paquetes, envía un reconocimiento al último paquete que llega en secuencia .

En el protocolo TCP, existen muchos mecanismos para garantizar el funcionamiento estable de los datos, el más importante de los cuales es el control de ventana deslizante . Similar a la transmisión de la tubería descrita anteriormente, los paquetes de datos se envían continuamente cuando las condiciones lo permiten. El receptor le informará al remitente el estado del búfer (tamaño del puerto) del receptor, y el remitente envía datos al receptor de acuerdo con la ventana.
En la comunicación de red, la capa de aplicación entrega los datos que deben enviarse a la capa de transporte, y luego maneja otras cosas: dado que TCP está orientado a la transmisión de flujo de bytes, ¿cuándo recibirá el caché TCP los datos de la capa de aplicación cuando se envíe? Que?
Hay tres oportunidades de envío TCP: TCP mantiene una variable, que es igual a la longitud máxima del segmento de mensaje, cuando los datos almacenados en el búfer alcanzan el byte MSS, se envía; PUCH push, utilizado para datos que necesitan un procesamiento urgente, TCP recibe PUSH de la capa de aplicación Después de la instrucción, el segmento de mensaje se envía inmediatamente; TCP inicia el temporizador y el temporizador se envía cuando se acaba el tiempo.
El control de flujo en la comunicación TCP es permitir que la velocidad de envío del remitente no sea demasiado rápida, pero que el receptor tenga tiempo de recibir. De hecho, es para controlar el tamaño de la ventana. Luego, para hacer que TCP sea más eficiente, el algoritmo de Nagle a menudo se usa para enviar primero los datos recibidos en el caché, después de recibir el acuse de recibo, luego enviar todos los datos en el caché y continuar esperando la confirmación del recibo ... Si los datos almacenados en el búfer han alcanzado la mitad del tamaño de la ventana de transmisión o la longitud máxima del segmento de mensaje, se envía un segmento de mensaje inmediatamente. El receptor también es el mismo, el receptor tiene suficiente espacio para acomodar un segmento más largo, o espere hasta que el búfer receptor tenga la mitad del espacio libre . El receptor enviará un mensaje de confirmación.
En el control de flujo, hay un temporizador de duración de ventana cero. Mientras la parte receptora del TCP reciba la notificación de ventana cero de la otra parte, iniciará el temporizador de duración y el tiempo expirará. Simplemente envíe un segmento de mensaje de detección de ventana cero, para que el punto muerto se pueda romper (el remitente ha estado esperando un mensaje de ventana que no sea cero, pero este mensaje se pierde). El
mecanismo de control de congestión TCP es similar a la implementación de control de flujo. Cuando el tráfico en la red es demasiado grande, la velocidad de envío de datos se controlará a través de la ventana, reduciendo así el grado de congestión. Pero la congestión y el control de flujo no son un concepto.

Publicado 35 artículos originales · Me gusta1 · Visitas 1870

Supongo que te gusta

Origin blog.csdn.net/lzj_linux188/article/details/104500164
Recomendado
Clasificación