Día 7: TCP: transmisión orientada a la conexión, TCP: transmisión de datos confiable, TCP: control de flujo, TCP: gestión de la conexión

¡Vamos! Robar Bozi

Los poemas que vi hoy son grises

El cielo es gris, la
carretera es gris, el
edificio es gris, la
lluvia es gris,
entre las cenizas muertas,
dos niños pasaron,
uno rojo brillante y el
otro verde claro -
"Feeling" julio de 1980


Al punto

1. TCP: transmisión orientada a la conexión

1. TCP: descripción general (RFC: 793, 1122, 1323, 2018, 2581)

Inserte la descripción de la imagen aquí

Explicación:
· El
llamado límite sin mensaje : el
remitente envía dos mensajes pequeños, tal vez el receptor recibe un mensaje grande o viceversa.
Buffers de envío y recepción ,
para retransmisión de tiempo de espera o retransmisión de detección de errores, las velocidades de envío y recepción coincidentes son inconsistentes
·
MTU:
Unidad de transmisión máxima, la unidad de transmisión de datos más grande, el paquete de transmisión de red más grande; la MTU de Ethernet máxima es 1500B
MSS:
Tamaño de segmento máximo El proceso de aplicación se distribuye a los segmentos de entidad TCP de la capa de transporte , y el procesamiento se segmenta de acuerdo con el tamaño de la información del encabezado TCP del MSS en segmentos TCP (segmento)
.
Por lo tanto, (el mensaje se convierte en un flujo de bytes, Y luego dividido en MSS individual)
MSS + información de encabezado TCP + información de encabezado IP <= MTU (como Ethernet MTU1500B) , ("¿Entonces no hay problema con la fragmentación?" ¿Qué fragmentación ...)
·
De lo contrario, si el datagrama IP se enviado es mayor que la MTU de la capa de enlace de datos, el datagrama no se puede enviar.
También puede consultar este intercambio de internautas: la relación entre MSS y MTU


2. Estructura del segmento TCP

Inserte la descripción de la imagen aquí

Haga una explicación:
puerto de origen de 16
bits , puerto de destino de 16 bits, número de serie de 32 bits, número de confirmación.
Entonces, inteligente, se puede obtener lo mismo: 32 bits opcionales; suma de comprobación y así sucesivamente
Número de secuencia de bytes de 16 bits :
para que la capa de aplicación se entregue al Mensaje, divida el MSS de cada capa y el cuerpo de cada segmento TCP (segmento) La parte es la parte de carga útil (correspondiente a MSS), y el desplazamiento (desplazamiento) del primer byte de la carga útil en todo el flujo de bytes es el número de secuencia de bytes

3. Número de serie TCP, número de confirmación

Inserte la descripción de la imagen aquí

Los segmentos que el receptor procesa fuera de orden se pueden almacenar en caché o descartar, y no hay regulación. Dependiendo de ...
Inserte la descripción de la imagen aquí
Explicación:

  • Host A → Host B Seq = 42, ACK = 79, data = 'C':
    Host A, el número de secuencia inicial negociado es Seq = 42, y se espera que el número de secuencia inicial del Host B comience desde 79, y el Se requiere que el byte C se repita
  • Entonces Host B → Host A Seq = 79, ACK = 43, data = 'C':
    Dado que el Host B recibió Seq42 antes, confirme ACK = 43 después del procesamiento. Al mismo tiempo, ACK = 43 significa que el Host B ha recibido 42 y antes, y espera que el Host A comience en 43.
    …Eso es todo

4. Retardo de ida y vuelta de TCP (RTT) y tiempo de espera

Configure y mida / estime RTT correctamente.

  • P: ¿Cómo configurar el tiempo de espera de TCP?
     Más largo que RTT  Pero RTT cambia
     Demasiado corto : tiempo de espera demasiado temprano  retransmisión innecesaria
     Demasiado largo: demasiado lento para reaccionar a la pérdida de segmento, negativo

  • P: ¿Cómo estimar el RTT?
     SampleRTT: Mide el tiempo desde que se envía el segmento del mensaje hasta la recepción de la confirmación
     Si hay una retransmisión, ignora esta medición
    SampleRTT cambiará, por lo que el RTT estimado debería ser más suave
     Promedio de varias mediciones recientes en lugar de Usar solo el SampleRTT actual

TimeoutInterval es una medida adaptativa y un cálculo del cálculo de
Inserte la descripción de la imagen aquí
EstimatedRTT actual:
`

" EstimatedRTT = (1-α) EstimatedRTT + α SampleRTT ": el
lado izquierdo del signo igual es el RTT promedio actual , y el RTT estimado en el lado derecho del signo igual es el RTT promedio más reciente . Antes de cualquier otro muestreo vez, uno más (1-α), la contribución al promedio actual disminuye exponencialmente.
`
Estimado: adj. Estimado.
Inserte la descripción de la imagen aquí
Este DevRTT (Desviación RTT) es muy similar a la desviación estándar. Es el valor de desviación / cambio entre SampleRTT y EstimatedRTT.
DevRTT = (1-β) DevRTT + β (| SampleRTT-EstimatedRTT |): Calcule la diferencia entre los valores suavizados RTT y la media móvil real (ponderada))


A continuación, mire TCP haciendo RDT

2. TCP: transmisión de datos confiable

TCP estableció rdt sobre la base de un servicio IP no confiable

  •  Segmento de tubería (• GBN o SR)
  •  Confirmación acumulativa (como GBN)
  •  Temporizador de retransmisión único (como GBN)
  •  ¿Se puede aceptar fuera de servicio, no existe un estándar

La retransmisión se desencadena por los siguientes eventos

  •  Tiempo de espera (solo se retransmite el segmento no confirmado más antiguo: como SR nuevamente)
  •  Confirmación repetida
    • Ejemplo: recibió ACK50 y luego recibió 3 ACK50 (reconocimiento redundante)

Primero considere el remitente TCP simplificado: (punto 1 a continuación)

  •  Ignore las confirmaciones repetidas
  •  Ignore el control de flujo y el control de congestión

1. Remitente TCP (versión simplificada

Mi explicación para la siguiente figura:
·
Inicialmente, establezca una conexión TCP. A partir de la línea de puntos, hay una inicializado siguiente número de secuencia y SendBase,
(como remitente inicial, la primera secuencia de bytes número enviado es del número de secuencia inicial)
·
A continuación, esperar para el evento ,
y luego ver las agujas del reloj .
Entonces , viene la espera , el proceso de aplicación llega a los datos, crea el segmento y envía la secuencia frontal de la ventana.
Y luego busque una capa inferior y envíe la
transmisión de datagrama encapsulado ip ventana deslizante de vanguardia: ( NextSeqNum NextSeqNum + = length (Data) )
no cuenta, el temporizador se inició
·
Si se agota el tiempo de espera, transmite solo con un número mínimo de segmentos no reconocidos
como el SR , no Pasar todos los no reconocidos una vez
`
Cuando se recibe ACK, y el valor de ACK es y,
si y> SendBase, entonces SendBase = y , que es
equivalente a deslizar el borde posterior de la ventana de envío a la posición y, y
finalmente hay un temporizador para el funcionamiento del temporizador, mira la imagen
Inserte la descripción de la imagen aquí


1.1 Evento del remitente de TCP: (ppt a la explicación de la figura anterior)

Reciba datos de la capa de la aplicación:

  •  Crear segmento con nextseq
  •  El número de secuencia nextseq es el número de flujo de bytes del primer byte del segmento de mensaje
  •  Si no está funcionando, inicie el temporizador
    •  El temporizador está asociado con el segmento no reconocido más antiguo
    •  Intervalo de vencimiento: TimeOutInterval

Tiempo de espera:
 El segmento más antiguo después de la retransmisión
 Reinicie el temporizador

Recibo de confirmación:

  •  Si es para confirmar el segmento no confirmado
  •  Actualice el número de secuencia del mensaje confirmado  Si todavía hay segmentos de mensaje sin confirmar, reinicie el temporizador
    Inserte la descripción de la imagen aquí

Disfrutemos del pseudocódigo para la realización del envío y envío de imágenes 1.TCP

	NextSeqNum = InitialSeqNum
	SendBase = InitialSeqNum
	loop (forever) {
    
    
		switch(event) 
		event: data received from application above 
			create TCP segment with sequence number NextSeqNum 
			if (timer currently not running) 
				start timer 
			pass segment to IP 
			NextSeqNum = NextSeqNum + length(data) 
		event: timer timeout
			retransmit not-yet-acknowledged segment with smallest sequence number start timer 
		event: ACK received, with ACK field value of y 
			if (y > SendBase) {
    
     
				SendBase = y
			if (there are currently not-yet-acknowledged segments) 
				start timer 
				} 
	} /* end of loop forever */
	
	/*注释:• SendBase-1: 最后一个累积确认的字节例:
			• SendBase-1 = 71;
			y= 73, 因此接收方期望73+ ;
			y > SendBase,因此新的数据被确认
 	*/

Finalmente, pase a otra imagen
para confirmar el byte más alto recibido en secuencia;
Inserte la descripción de la imagen aquí


2. Recomendaciones para generar TCP ACK [RFC 1122, RFC 2581]

Inserte la descripción de la imagen aquí

3. Retransmisión rápida

Retransmisión rápida: retransmite el segmento del mensaje antes de que expire el temporizador


Detecta la pérdida del segmento del mensaje a través de ACK repetido

  •  El remitente suele enviar una gran cantidad de segmentos de forma continua
  •  Si el segmento del mensaje se pierde, generalmente causará (recibirá) múltiples ACK repetidos

 Si el remitente recibe 3 ACK redundantes para los mismos datos (tres ACK50 redundantes como se muestra en la figura siguiente),

  • Vuelva a transmitir el segmento con el número de secuencia más pequeño:
  • Asume que los datos que siguen a los datos confirmados se pierden

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
• El primer ACK es normal;
• Se recibe el segundo ACK de este segmento, lo que significa que el receptor ha recibido un segmento fuera de secuencia después de este segmento;
• Se reciben los ACK 3 y 4 de este segmento, lo que significa que receptor Después de recibir este segmento, es muy probable que se pierdan 2 o 3 segmentos fuera de secuencia

3.1 Algoritmo de retransmisión rápida:

Inserte la descripción de la imagen aquí

dup: duplicate: adj. exactamente igual, redundante

Tres, TCP: control de flujo

El receptor controla al remitente y
no permite que el remitente envíe demasiado o demasiado rápido para
evitar que el búfer del receptor se desborde

Inserte la descripción de la imagen aquí
Búferes de receptor de socket TCP: búferes de receptor de socket TCP
Inserte la descripción de la imagen aquí

Entonces TCP es full duplex, entonces:

  •  El receptor "anuncia" su tamaño de búfer libre en el campo rwnd de su encabezado de segmento TCP al remitente .
    (No es un mensaje de confirmación por separado, sino una pequeña marca "espacio libre en el búfer" en el cuadro rápido)
    • tamaño RcvBuffer se establece por opción de socket (tamaño típico por defecto es de 4096 bytes)
    •  Muchos sistemas operativos ajustan automáticamente RcvBuffer
  •  El remitente limita el número de bytes sin acuse de recibo ("en vuelo") el valor rwnd enviado por el
    receptor para garantizar que el receptor no se vea abrumado

Revise la ventana de recepción y el búfer de recepción (campo Ventana de recepción y búfer de recepción)
Inserte la descripción de la imagen aquí


Cuatro, TCP: gestión de la conexión

Antes de intercambiar datos oficialmente, el remitente y el receptor se dan la mano para establecer una relación de comunicación:

  •  Acepte establecer una conexión (cada parte sabe que la otra parte está dispuesta a establecer una conexión)
  •  Acepta los parámetros de conexión
    Inserte la descripción de la imagen aquí

1. Acepta establecer una conexión

Inserte la descripción de la imagen aquí

Escenario de falla de protocolo de enlace bidireccional: semiconexión
, el
proceso del host del cliente a la izquierda, debido al tiempo de espera de acc_conn (x), retransmite una nueva solicitud de conexión (req_conn (x)),
lo que hace que el proceso del host del servidor mantenga una semiconexión
Inserte la descripción de la imagen aquí

2. Protocolo de enlace de 3 vías de TCP (solución de protocolo de enlace de 2 vías)

Hay un bit de bandera SYN en TCP.
SYN = 1 representa la solicitud de conexión
Seq = x representa la transmisión desde el byte x
Inserte la descripción de la imagen aquí

Generalmente, la primera transferencia de datos y el tercer protocolo de enlace son juntos.

2.1 Solución de protocolo de enlace de tres vías: media conexión y problemas de recepción de datos antiguos

Inserte la descripción de la imagen aquí

Utilice el número de secuencia de inicialización como el número de secuencia del segmento TCP en lugar de un número de secuencia fijo :
puede
evitar efectivamente que
los datos
de la
conexión anterior
causen interferencia a los datos de la nueva conexión.

2.2 Apretón de manos de tres vías: FSM (máquina de estado finito)

Envía algunos para ver ~
Inserte la descripción de la imagen aquí

3.TCP: cierra la conexión

  •  El cliente y el servidor respectivamente cierran la conexión en su propio lado (las conexiones en ambas direcciones se eliminan por separado)
     Enviar segmento TCP con el bit FIN = 1 (FIN = 1 significa cerrar la conexión)
  • Una vez recibido el FIN, responda con ACK
     Al recibir el segmento FIN, se puede enviar ACK junto con el segmento FIN enviado por sí mismo
  • puede manejar el intercambio de FIN simultáneo

Hay algunas cosas divertidas, ¿qué
pasa si no se recibe la confirmación FIN?
¿Qué pasa si FIN no puede pasar?
¿Qué pasa si alguien falsifica FIN para enviar a la otra parte?
jajaja

La liberación de la conexión TCP no es perfecta y se utiliza un mecanismo de temporizador para desconectar la conexión.
Inserte la descripción de la imagen aquí


Fin de este articulo

Supongo que te gusta

Origin blog.csdn.net/m0_46156900/article/details/113826344
Recomendado
Clasificación