¡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)
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
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
Los segmentos que el receptor procesa fuera de orden se pueden almacenar en caché o descartar, y no hay regulación. Dependiendo de ...
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
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.
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
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
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;
2. Recomendaciones para generar TCP ACK [RFC 1122, RFC 2581]
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
• 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:
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
Búferes de receptor de socket TCP: búferes de receptor de socket TCP
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)
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
1. Acepta establecer una conexión
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
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
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
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 ~
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.
Fin de este articulo