antecedentes
TCP/IP
Los protocolos son la base de la era actual de Internet. Todos los productos de red, o lenguajes de desarrollo y marcos de desarrollo se basan en tcp/ip
protocolos. Por lo tanto, aprender bien tcp/ip
será de gran ayuda para las personas de la industria de Internet en el futuro.
Pero este es un curso teórico básico, al igual que el curso de sistema operativo, después de aprenderlo puede que no tenga mucho impacto en ti, y no te permitirá tener de inmediato las habilidades para poner en práctica. Pero precisamente porque se trata de un curso de teoría básica, todas las tecnologías de Internet se basan en él. Entonces, si comprende el tcp/ip
acuerdo, tendrá un efecto positivo en su desarrollo futuro o en la resolución de problemas en el trabajo.
control de congestión tcp
El control de flujo mencionado en el artículo anterior tuvo lugar entre C y S sin considerar el impacto del entorno de la red pública. Si la calidad de la red pública actual es particularmente mala y es probable que se produzcan pérdidas de paquetes, el remitente debe prestarle atención. Y este es exactamente el problema con el que debe lidiar el control de la congestión.
Ventana de congestión: evita que el remitente envíe demasiado rápido, lo que hace que la red sea demasiado tarde para procesar, lo que resulta en una congestión de la red. !
Para el control de la congestión, tcp
cada conexión debe mantener 2
un estado central:
- Ventana de congestión
- Umbral de inicio lento
Los algoritmos involucrados son los siguientes:
- Comienzo lento
- Evitación de la congestión
- Retransmisión rápida
- Respuesta rápida
A continuación, veremos estos estados y algoritmos uno por uno.
estado
Ventana de congestión (cwnd)
La ventana de congestión se refiere a la cantidad de datos que aún puede transmitir. Hay algunas diferencias con la ventana de recepción:
- La ventana de recepción (rwnd) es el límite dado por el extremo receptor
- La ventana de congestión (cwnd) es el límite del remitente en sí, y el valor predeterminado es 1 segmento
Nota:
- Ambos son iguales, se utilizan para limitar el tamaño de la ventana de envío
发送窗口大小 = min(rwnd, cwnd)
. Tome el mínimo de los dos, y el control de congestión se usa para controlar loscwnd
cambios.
Umbral de inicio lento (ssthresh)
El tamaño predeterminado es 65536byte
. Cuando ocurre un tiempo de espera, el umbral se establece en 发送窗口的一般
, se cwnd
establece en 1
y luego se reinicia el algoritmo de inicio lento.
algoritmo
Comienzo lento
Cuando empezó a transferir datos, no sabía si la red pública actual era estable o estaba congestionada. Si lo hace de manera demasiado agresiva y envía los paquetes demasiado rápido, puede ocurrir una pérdida de paquetes loca y causar un desastre de red por avalancha. Al mismo tiempo, es un desperdicio de recursos de la red pública.
Por lo tanto, el control de la congestión debe adoptar primero un algoritmo conservador para adaptarse lentamente a toda la red. Este algoritmo se denomina algoritmo de inicio lento. El proceso es el siguiente:
- Primero, tres apretones de manos,
rwnd
el tamaño anunciado por ambas partes - Ambas partes inicializan su propio
cwnd
tamaño - Al comienzo del período de transmisión, cada vez que el remitente recibe uno
ACK
, elcwnd
tamaño aumenta1
. En otras palabras, cada vez que uno pasaRTT
, elcwnd
tamaño de la ventana se duplica. Si la ventana inicial es10
, luego10
de que se transmite la primera ronda de mensajes y el remitente recibe10
unACK
acuse de recibo, elcwnd
tamaño pasa a ser20
; la segunda ronda se convierte en40
; la tercera ronda80
...
cwnd
El tamaño no puede crecer indefinidamente, cuando cwnd
llega al umbral ( cwnd > ssthresh
), ¿cómo controlar cwnd
el tamaño de la ventana? Esto es lo que se debe hacer para evitar la congestión.
Evitación de la congestión
Resulta que cada vez que ACK
se recibe una confirmación, el cwnd
tamaño aumenta 1
. Ahora se alcanza el umbral, cwnd
sólo se puede añadir un poco de: 1/cwnd
. En otras palabras, antes de que una RTT
baja cwnd
de tamaño doble. Ahora uno RTT
abajo, el cwnd
tamaño aumenta1
El diagrama para evitar la congestión es el siguiente, donde AIMD
se adopta el método
AIMD
(La suma aumenta, la multiplicación disminuye)
- Reducción multiplicada
Ya sea en la fase de inicio lento o en la fase de control de congestión, siempre que se agote el tiempo de espera de la red, sessthresh
establecerá en lacwnd
mitad y luegocwnd
en1
un segmento. Luego inicie el algoritmo de inicio lento - Aumento aditivo
Cuando la red se desconecta con frecuencia, sessthresh
reducirá rápidamente. Para reducir la cantidad de paquetes inyectados en la red, el aumento aditivo significa que después de que se implementa la prevención de la congestión, la ventana de congestión aumenta lentamente para evitar que se produzcan prematuramente en la red congestión
Nota:
- La cantidad de paquetes de datos enviados en la fase de inicio lento aumenta exponencialmente y la fase de evitación de la congestión aumenta linealmente
- Los algoritmos para evitar la congestión no pueden evitar completamente la congestión de la red. Al controlar el tamaño de la ventana de congestión, la red no es propensa a la congestión.
Retransmisión rápida
tcp
Si la pérdida de paquetes ocurre durante la transmisión, es decir, cuando el extremo receptor encuentra que el segmento de datos no llega en orden, el método de procesamiento del extremo receptor es enviar repetidamente el paquete de datos anterior ACK
. Por ejemplo, si 4
se ha recibido el paquete anterior y el primer 5
paquete se pierde, incluso si 6、7
llega al extremo receptor en este momento , el extremo receptor siempre devolverá el 4
primer paquete ACK
. Cuando el remitente recibe >=3
un duplicado, ACK
se da cuenta de que el paquete se ha perdido, por lo que lo retransmite de inmediato y no tiene que esperar una RTO
vez para retransmitirlo.
Se trata de una retransmisión rápida, que resuelve el problema de si es necesaria una retransmisión .
Retransmisión selectiva
Con base en la situación anterior, ¿deberíamos retransmitir el primer 5
paquete o el 5、6、7
segundo paquete?
Ahora 6、7
que ha llegado la bolsa, el tcp
diseñador no es tonto, se ha pasado, ¿por qué todavía la pasas? Simplemente registre cuáles de los siguientes paquetes llegaron y cuáles no, y vuelva a transmitirlos en consecuencia.
Después de recibir el remitente del mensaje, el receptor responde a un ACK
mensaje, luego las opciones de encabezado del mensaje, puede agregar SACK
este atributo left edge
e right edge
informar al remitente que ha recibido los datos en qué rango. Por lo tanto, incluso si 5
se pierde el primer paquete, cuando 6、7
se reciba el primer paquete, el extremo receptor le dirá al extremo emisor que estos dos paquetes han llegado, y el 5
paquete se retransmitirá si el primer paquete no ha llegado.
Este proceso se denomina retransmisión selectiva ( SACK
), que resuelve el problema de la retransmisión .
Rápida recuperación
El remitente recibió 3
este duplicado ACK
y encontró la pérdida de paquetes. Consideró que la red actual ya estaba un poco congestionada y entraría en la fase de recuperación rápida. como sigue:
ssthresh
El valor se reduce a lacwnd
mitadcwnd
Valor igual assthresh
cwnd
Incremento lineal (incremento aditivo)
para resumir
Este es el octavo artículo de la serie tcp / ip. Lo anterior son los conceptos y algoritmos en el control de la congestión. Habrá más explicaciones de la escena de uso más detalladas más adelante, esta serie de artículos será muy larga.
Comencemos con el siguiente artículo.