Capa de transporte TCP, desde 2020-08-05
TCP se llama orientado a la conexión porque antes de que un proceso pueda enviar datos a otro proceso, los dos procesos deben darse la mano primero, es decir, comenzar a enviarse segmentos de mensajes preliminares entre sí. Garantizar los parámetros para establecer una conexión de datos.
TCP es una conexión lógica y su homomorfismo solo se almacena en los programas TCP de los dos sistemas finales de comunicación. Sin embargo, los elementos de red entre sistemas finales no mantienen el estado de conexión TCP. Los enrutadores intermedios son completamente ciegos al TCP. Sólo ven el datagrama, no la conexión.
Funciones de comunicación
Servicio full-duplex, hay una conexión entre el proceso A y el proceso B en diferentes hosts, y los datos pueden fluir de A a B y de B a A en el mismo tiempo.
Punto a punto, conexión entre un único remitente y un único receptor.
Proceso servidor y proceso cliente
El proceso que inicia la conexión se llama proceso cliente y el otro se llama proceso servidor.
(2020.08.08)
Una vez que los datos se envían al socket, el cliente TCP lo controla y coloca los datos en un búfer de datos (C/S en ambos extremos). Este búfer también es donde se almacenan los datos del protocolo de enlace de tres vías. TCP tomará un dato del caché y lo pasará a la capa de red.
Datos del cliente del encabezado TCP = segmento de datos TCP.
La cantidad de datos que TCP saca del búfer de envío y coloca en el segmento de mensaje está limitada por el tamaño máximo de segmento (MSS), que es la longitud máxima de la trama de la capa de enlace determinada inicialmente por el host local. (es decir, la configuración de la unidad máxima de transmisión (MTU). La MTU de los enlaces Ethernet y PPP es de 1500 bytes. Teniendo en cuenta que el encabezado TCP/IP generalmente tiene 40 bytes (el encabezado TCP es 20 bytes), la longitud de datos típica en el segmento TCP es 1460 bytes. Tenga en cuenta que el MSS aquí se refiere a la longitud máxima de los datos de la capa de aplicación en el segmento de datos TCP.
La composición de una conexión TCP
El caché, las variables y los sockets del proceso de conexión en un host, y el caché, las variables y los sockets en otro host.
Campo de datos del título. Cuando TCP envía un archivo grande, como una imagen, TCP generalmente divide el archivo en varios fragmentos de longitud MSS. Excepto el último fragmento, los demás son todos MSS. Para aplicaciones como Telnet, el campo de datos tiene solo un byte de longitud, es decir, su TCP generalmente tiene solo 21 bytes.
Longitud típica: 20 bytes/160 bits (cuando el campo de opción está vacío)
Número de puerto de origen: 16 bits
Número de puerto de destino: 16 bits
Número de serie: 32 dígitos
Número de confirmación: 32 dígitos.
Campo de ventana de recepción: 16 bits, utilizado para control de flujo, indicando el número de bytes que el receptor está dispuesto a recibir.
Campo de longitud del encabezado: 4 bits, que es la longitud del encabezado TCP en palabras de 32 bits.
Opciones: opcional y largo variable.
Campo de bandera): 6 bits, ACK/RST/SYN/FIN/PSH/URG.
El número de secuencia se basa en el flujo de bytes transmitido, no en el valor de secuencia del segmento de mensaje. El número de secuencia del segmento de mensaje es el número de flujo de bytes del primer byte del segmento de mensaje. Por ejemplo, si un archivo a enviar tiene * * * 10.000 bytes y cada segmento TCP envía 1.000 bytes, entonces el número de secuencia del primer segmento es 0, el segundo número de secuencia es 1.000, y así sucesivamente. El número de secuencia es el número de bytes utilizados para numerar los segmentos del mensaje.
En el ejemplo anterior, se supone que el número de secuencia inicial es 0. En aplicaciones reales, el remitente y el receptor seleccionan aleatoriamente el número de secuencia inicial.
El número de confirmación es un poco más complicado. La comunicación TCP se establece entre los hosts A y B. El número de confirmación completado por el host A en el segmento de mensaje es el número de secuencia del siguiente byte que A espera recibir de B.
El segmento de mensaje SampleRTT (SampleRTT) es la cantidad de tiempo entre el envío de un segmento de mensaje (entrega a IP) y la recepción de un acuse de recibo del segmento de mensaje.
El SRTT se estima solo para los segmentos que se han enviado pero aún no se ha confirmado, generando así un nuevo valor de SRTT cercano a cada RTT; el SRTT no se cuenta para los segmentos de mensajes que se han retransmitido; el SRTT solo se mide para los segmentos de datos que se transmiten una vez; .
Debido a cambios en el entorno de la red, como la congestión en los enrutadores y cambios en la carga del terminal, SRTT no siempre es típico. TCP mantendrá una estimación de SRTT y calculará ERTT de acuerdo con la siguiente fórmula.
Valor recomendado. El promedio móvil ponderado exponencialmente (EWMA) otorga a las muestras más recientes una ponderación mayor que a las muestras más antiguas porque las muestras recientes reflejan mejor el estado de congestión de la red.
Además, la desviación estándar de RTT, DevRTT, se utiliza para estimar el grado en que SRTT se desvía de ERTT:
Valor recomendado.
El intervalo de tiempo de espera debe ser mayor o igual que ERTT; de lo contrario, se producirán retransmisiones innecesarias. Sin embargo, no debería ser mucho mayor que el ERTT, lo que provocaría grandes retrasos en la transferencia de datos. Cuando SRTT fluctúa significativamente, el rango es mayor y cuando SRTT fluctúa ligeramente, el rango es menor.
Valor inicial recomendado, duplicado cuando se agota el tiempo de espera. Actualice ERTT tan pronto como se reciba el mensaje y vuelva a calcular TimeoutInterval según la fórmula.
(sábado, 9 de agosto de 2020)
Temporizadores
La gestión de temporizadores requiere una sobrecarga considerable, por lo que [RFC 6298] recomienda que solo se utilice un temporizador de retransmisión incluso si hay varios segmentos enviados pero no reconocidos.
(sábado, 9 de agosto de 2020)
Tres acciones principales relacionadas con el remitente en TCP
Las instrucciones de retroalimentación del remitente sobre estas acciones principales son la parte de transmisión de datos fiable.
Selección del intervalo de tiempo de espera
Cada vez que ocurre un evento de tiempo de espera, TCP retransmitirá el segmento de datos no reconocido con el número de secuencia más pequeño. Es solo que cada retransmisión TCP establece el siguiente intervalo de tiempo de espera al doble del valor anterior, en lugar de usar el valor calculado a partir de EstimadoRTT y DevRTT. Sin embargo, siempre que el temporizador encuentra otros dos eventos, a saber, ACK y datos de la capa superior, el TimeoutInterval de inicio del temporizador se calcula en función de los últimos ERTT y DRTT.
Los hosts en ambos extremos de TCP tienen buffers de recepción. El servicio de control de flujo se utiliza para eliminar la posibilidad de que sndr desborde la caché de rcvr. Por lo tanto, fcs es un servicio de coincidencia de velocidad, es decir, la velocidad de envío de sndr coincide con la velocidad de lectura de la aplicación rcvr.
TCP permite a sndr mantener una variable en la ventana de recepción para proporcionar control de flujo, es decir, rw se usa para indicar a sndr cuánto espacio de búfer está disponible. TCP es una comunicación full-duplex y ambos remitentes mantienen un rw. Analice una situación en la que el host A envía un archivo grande a B a través de TCP y B asigna un búfer de recepción para la conexión, representado por RcvBuffer. El proceso de aplicación de b lee datos del caché. Existen las siguientes variables:
No se permite el desbordamiento del búfer, por lo que hay una ventana de recepción representada por rwnd y la cantidad de espacio libre en el búfer (es decir, la cantidad de espacio libre) está representada por
El host A necesita realizar un seguimiento. Otras dos variables, LastByteSent y LastByteAcked, están disponibles para A.
Un caso especial, cuando el búfer de recepción de B está lleno, rwnd=0, suponiendo que B no tiene datos para enviar a A en este momento. Considerando que TCP no envía un nuevo segmento con rwnd a A, de hecho TCP solo envía un segmento a A cuando hay datos o alguien quiere enviarlos. Por lo tanto, A no sabe que hay nuevo espacio en el búfer de recepción de B y A no puede enviar datos. Solución: la especificación TCP requiere que cuando la ventana de recepción de B sea 0, A continuará enviando segmentos de mensajes con solo un byte de datos. Estos segmentos de mensajes serán reconocidos por el receptor y, finalmente, se vaciará el búfer. contendrá un segmento de mensaje incorrecto de 0.
(2020.08.05)
El papel del protocolo de enlace de tres partes en el proceso de establecimiento de TCP
Después de tres transmisiones, sndr/rcvr confirmó el envío y la recepción capacidades propias y de la otra parte. Una vez finalizado el protocolo de enlace, se puede establecer la conexión.
(2020.08.07)
Los segmentos de mensaje de los dos primeros apretones de manos no transportan "carga útil", es decir, no contienen datos de la capa de aplicación. datos de la capa de aplicación.
(Sábado 9 de agosto de 2020)
Después de completar estos tres pasos, C-S puede comunicarse y el SYN de cada segmento de mensaje se establecerá en 0.
Finalizar conexión
El cliente tiene la intención de finalizar la conexión y enviar un segmento de mensaje especial con FIN=1 establecido. El servidor recibe el segmento del mensaje de respuesta con FIN=1. El servidor envía otro segmento de cierre con FIN=1. Después de recibirlo, el cliente envía un ACK y libera los recursos ocupados.
La capa IP no proporciona información de retroalimentación sobre la congestión de la red a los dos sistemas finales. un poco.
El remitente sndr establece la ventana de congestión variable n, cwnd, que limita la velocidad a la que TCP envía tráfico a la red y determina la velocidad de envío en combinación con la ventana de recepción rwnd mencionada anteriormente, es decir ,
¿Cómo percibe TCP la congestión entre él y el destino?
Defina eventos de pérdida de paquetes: se produce un tiempo de espera o se reciben tres acuses de recibo redundantes del receptor.
Un segmento de mensaje perdido significa congestión y la velocidad de transmisión de TCP sndr se reduce cuando se pierde el mensaje. Eso es para reducir cwnd.
El segmento de datos de confirmación indica que la red está transmitiendo el segmento de datos de sndr a rcvr, por lo que la velocidad del remitente puede aumentar cuando llega la confirmación del segmento de datos no reconocido previamente.
Prueba de préstamo.
El algoritmo se divide en tres partes: 1) inicio lento, 2) evitación de congestión y 3) recuperación rápida. Donde 1 y 2 son las partes obligatorias de TCP. Cuando se recibe un ACK, el inicio lento puede aumentar la longitud de cwnd más rápido que evitar la congestión.
Cuando se inicia una conexión TCP, el valor de cwnd generalmente se establece en un valor MSS más pequeño. Esto da como resultado una tasa de transferencia de aproximadamente MSS/RTT. Si MSS = bytes, RTT = 200 milisegundos, la velocidad de transferencia inicial es de 20 kbps. Tenga en cuenta que el ancho de banda puede ser mucho más rápido que la velocidad inicial en este punto. En el estado de inicio lento, el valor de cwnd comienza con un MSS y se incrementa en un MSS cada vez que se confirma un segmento enviado por primera vez. Este proceso duplica la tasa de envío de cada RTT. La velocidad inicial es lenta, pero la fase ss crece exponencialmente.
Acabar con la situación de las SS