Cien batallas c++ (red)

notas misceláneas

  1. La capa inferior proporciona servicios a la capa superior y el protocolo inferior es transparente para la entidad superior.
  2. MAC, el puente (puede verse como un conmutador de múltiples interfaces) funciona en la capa de enlace de datos. Los enrutadores funcionan en la capa de red.
  3. La capa de red proporciona solo el servicio de datagramas de mejor esfuerzo más simple, más flexible, sin conexión hacia arriba
  4. ARP: IP->MAC transmite paquetes ARP en la LAN y establece la vida útil (caché)

 

La unidad máxima de transmisión de MTU es de 1500 bytes (datos + encabezado), la bandera MF=1 significa que todavía hay MF=0, significa que no hay más. DF=0 significa que se puede fragmentar y DF=1 significa que no se puede fragmentar.

El desplazamiento del chip es la posición relativa, es decir, la posición original del encabezado de datos actual y luego dividida por 8. Porque son 8 bytes como unidad.

  1. Función de máscara de subred: reduce el desperdicio de direcciones IP. (no necesita tantos hosts)
  2. Mensajes ICMP (informe de error/interrogación). Funciona en la capa IP. IGMP es un protocolo utilizado para establecer y mantener la pertenencia a un grupo de multidifusión entre un host IP y sus enrutadores de multidifusión directamente adyacentes .
  3. Agregación de direcciones CIDR: principio de coincidencia de prefijo más largo

Dirección IP de subred :: = {<ID de red>, <ID de subred>, <ID de host>}

Dirección IP de clase ::= {<número de red>,<número de host>}

Dirección IP de agregación de direcciones Cidr ::= {<prefijo de red>,<número de host>}

Modelo OSI TCP/IP de cinco capas, qué hardware está funcionando en cada capa

 

Dispositivos de capa física: repetidores, concentradores.

Capa de enlace de datos: puente o conmutador

Por encima de la capa de red: puerta de enlace

La capa superior de la red informática llama a los servicios de la capa inferior, y la capa inferior es transparente a la capa superior.

¿Qué sucede después de que el navegador ingresa una dirección y presiona Enter?

Ingrese la URL en el navegador. Primero, el navegador necesita analizar la URL en una dirección IP. Primero, verifique si el archivo de hosts locales tiene esta relación de mapeo. De lo contrario, se utiliza el protocolo DNS. Primero, el host consultará el caché de DNS y, de lo contrario, enviará una solicitud de consulta al DNS local.

La consulta de DNS se divide en dos formas, una es una consulta recursiva y la otra es una consulta iterativa. Si se trata de una consulta iterativa, el servidor DNS local envía una solicitud de consulta al servidor de nombres de dominio raíz, el servidor de nombres de dominio raíz informa al servidor de nombres de dominio de primer nivel sobre el nombre de dominio y luego el servidor local envía una solicitud de consulta a el servidor de nombres de dominio de primer nivel, y así sucesivamente hasta que la consulta llegue al servidor de nombres de dominio de primer nivel La dirección IP del nombre de dominio. El servidor DNS se basa en UDP, por lo que se utilizará el protocolo UDP.

Consulta recursiva significa que si el servidor de nombres de dominio local consultado por el host no conoce la dirección IP del nombre de dominio consultado, entonces el servidor de nombres de dominio local continuará enviando mensajes de solicitud de consulta a otros servidores de nombres de dominio raíz como un cliente DNS ( es decir, continuar consultando el host), en lugar de dejar que el host realice la siguiente consulta por sí mismo.

Después de obtener la dirección IP, el navegador establecerá una conexión http con el servidor. http es una conexión sin estado establecida en tcp. (Capa de aplicación) Por lo tanto, se utiliza el protocolo http y el formato del mensaje del protocolo http se ha mencionado anteriormente. http genera un mensaje de solicitud de obtención y pasa el mensaje a la capa TCP para su procesamiento. Si se usa https, los datos http se cifrarán primero. Si es necesario, la capa TCP fragmenta primero el paquete HTTP y la fragmentación se basa en la ruta MTU y MSS. Luego, los paquetes TCP se envían a la capa IP, utilizando el protocolo IP. La capa IP selecciona rutas a través del enrutamiento y las envía a la dirección de destino salto por salto. Por supuesto, el direccionamiento en un segmento de red se realiza a través del protocolo Ethernet (u otros protocolos de capa física, como PPP, SLIP).El protocolo Ethernet necesita la dirección física hasta la dirección IP de destino, y se requiere el protocolo ARP.

El servidor procesa la solicitud y devuelve una respuesta html, el navegador acepta el código fuente de la página solicitada, el navegador procesa el html, el navegador envía una solicitud de objeto incrustada en el html, el navegador envía una solicitud asíncrona y cierra la conexión tcp.

¿Cuál es la diferencia entre TCP y UTP?

TCP está orientado a la conexión (apretón de manos de tres vías) y es necesario establecer una conexión antes de la comunicación; UDP no tiene conexión y no se requiere ninguna conexión antes de la comunicación.

TCP logra una transmisión confiable a través de la confirmación, el número de secuencia, la retransmisión, el control de flujo y el control de congestión; UDP no garantiza una transmisión confiable y hace todo lo posible para brindarla.

TCP está orientado a flujos de bytes, por lo que se pueden fragmentar y volver a ensamblar en el extremo receptor; UDP está orientado a datagramas.

TCP punto a punto, UDP punto a multipunto udp puede usar el mismo socket para recibir o enviar una serie de datagramas

encabezado tcp 20 bytes, udp8 bytes

TCP es un protocolo lento y pesado, y UDP es un protocolo rápido y liviano.

tres apretón de manos

SYN

Número de secuencia de sincronización, que indica que este mensaje es un mensaje de solicitud de conexión o un mensaje de aceptación de conexión

ACK

Bit de acuse de recibo, acuse de recibo del mensaje

ALETA

Bit de terminación, que indica que el remitente ha completado el envío de datos y se utiliza para liberar una conexión

PRIMERA

Reinicie la conexión, indicando que ocurrió un error grave en la conexión tcp.

PSH

Empuje bits, enviando datos al proceso de recepción lo más rápido posible

Serial number seq: 4 bytes, se utiliza para marcar la secuencia de segmentos de datos, TCP codifica todos los bytes de datos enviados en la conexión con un número de serie, el número del primer byte se genera aleatoriamente localmente; después de asignar el número de serie, se número se asigna a cada segmento de mensaje; el número de serie seq es el número de datos del primer byte en el segmento de mensaje.

    Acuse de recibo del número de confirmación: ocupa 4 bytes y espera recibir el número de serie del primer byte de datos del siguiente segmento del mensaje; el número de serie indica el número del primer byte de datos transportado por el segmento del mensaje; y el número de confirmación se refiere a Lo que se espera recibir es el número del siguiente byte, por lo tanto, el número + 1 del último byte del segmento de mensaje actual es el número de confirmación.

    Confirmación ACK: 1 bit, solo cuando ACK=1, el campo del número de confirmación es válido. Cuando ACK=0, el número de confirmación no es válido

    Sincronización SYN: Se utiliza para sincronizar el número de serie cuando se establece la conexión. Cuando SYN=1, ACK=0, significa: este es un segmento de solicitud de conexión. Si se acepta la conexión, haga SYN=1 y ACK=1 en el segmento del mensaje de respuesta. Por lo tanto, SYN=1 significa que se trata de una solicitud de conexión o un mensaje de aceptación de conexión. El indicador SYN solo se establecerá en 1 cuando se establezca la conexión TCP, y el indicador SYN se establecerá en 0 después de que se complete el protocolo de enlace.

Terminar FIN: se utiliza para liberar una conexión. FIN=1 significa: los datos del remitente de este segmento de mensaje han sido enviados y se requiere liberar la conexión de transporte

PD: Las palabras en mayúsculas como ACK, SYN y FIN representan bits de marca y sus valores son 1 o 0; las palabras en minúsculas como ack y seq representan números de serie.

 

El primer protocolo de enlace: cuando se establece la conexión, el cliente envía un paquete de sincronización (syn=j) al servidor y entra en el estado SYN_SENT, esperando que el servidor lo confirme;

El segundo protocolo de enlace: el servidor recibe el paquete syn, debe confirmar el SYN del cliente (ack=j+1), y al mismo tiempo enviar un paquete SYN (syn=k), es decir, el paquete SYN+ACK, y el el servidor ingresa al estado SYN_RECV en este momento;

El tercer protocolo de enlace: el cliente recibe el paquete SYN+ACK del servidor y envía un paquete de reconocimiento ACK (ack=k+1) al servidor.Después de enviar el paquete, el cliente y el servidor ingresan ESTABLECIDO (conexión TCP exitosa) estado y completar tres veces dar la mano.

¿Por qué TCP usa un protocolo de enlace de tres vías para establecer una conexión?¿Está bien usar un segundo protocolo de enlace? ¿Por qué usar cuatro ondas para liberar la conexión?

No, el protocolo de enlace de tres vías se usa para evitar que el segmento de solicitud de conexión no válida se transmita repentinamente al servidor, lo que genera un error. Porque el segmento de solicitud de conexión enviado por el cliente no llegó al servidor a tiempo debido a demoras en la red y otras razones, y el cliente vuelve a enviar la solicitud de conexión al servidor después de esperar un período de tiempo, y el establecimiento es exitoso, y la transmisión de datos se completa con éxito. Pero en este momento, el primer segmento del mensaje llega al servidor, si se adopta el segundo protocolo de enlace, el servidor devolverá la información correspondiente para establecer una conexión, pero en este momento el cliente ignora la conexión, lo que resulta en una pérdida de tiempo. recursos del servidor.

Al cerrar la conexión, al recibir la notificación del mensaje FIN de la otra parte, solo significa que la otra parte ha enviado todos los datos, y no significa que todos sus datos hayan sido enviados a la otra parte, así que espere hasta que su se envían datos propios, para luego enviar el mensaje FIN arts. Para cada mensaje FIN, se requiere un mensaje ACK, por lo que se requieren un total de cuatro ondas.

           Dijo cómo la red se cierra después de que se establece la conexión, saludó cuatro veces

 

1) El proceso del cliente envía un mensaje de liberación de conexión y deja de enviar datos. Suelte el encabezado del mensaje de datos, FIN=1, y su número de secuencia es seq=u (igual al número de secuencia del último byte de los datos transmitidos anteriormente más 1), en este momento, el cliente ingresa FIN-ESPERA- 1 (dejar de esperar 1) Estado. TCP estipula que incluso si el segmento FIN no transporta datos, aún consume un número de secuencia.

2) El servidor recibe el mensaje de liberación de conexión, envía un mensaje de confirmación, ACK=1, ack=u+1, y trae su propio número de serie seq=v, en este momento, el servidor ingresa al estado CLOSE-WAIT (cerrar en espera) . El servidor TCP notifica el proceso de aplicación de alto nivel y el cliente se libera en la dirección del servidor. En este momento, está en un estado medio cerrado, es decir, el cliente no tiene datos para enviar, pero si el servidor envía datos, el cliente todavía tiene que aceptarlo. Este estado continuará durante un tiempo, es decir, la duración de todo el estado CLOSE-WAIT.

3) Después de que el cliente recibe la solicitud de confirmación del servidor, en este momento, el cliente ingresa al estado FIN-WAIT-2 (terminar espera 2), esperando que el servidor envíe un mensaje de liberación de conexión (antes de esto, debe aceptar el último mensaje enviado por el servidor) datos).

4) Después de que el servidor envía los últimos datos, envía un mensaje de liberación de conexión al cliente, FIN=1, ack=u+1, porque está en un estado medio cerrado, es probable que el servidor envíe más datos. suponiendo que en este momento el número de serie es seq=w, en este momento el servidor entra en estado LAST-ACK (confirmación final), esperando la confirmación del cliente.

5) Después de que el cliente recibe el mensaje de liberación de conexión del servidor, debe enviar un acuse de recibo, ACK = 1, ack = w + 1, y su propio número de serie es seq = u + 1. En este momento, el cliente ingresa HORA - Estado WAIT (esperar el tiempo). Tenga en cuenta que la conexión TCP no se ha liberado en este momento, y el cliente ingresará al estado CERRADO solo después de que haya transcurrido el tiempo de 2∗MSL (vida útil máxima del segmento), y el cliente revoque el TCB correspondiente.

6) Siempre que el servidor reciba la confirmación del cliente, entrará inmediatamente en estado CERRADO. De manera similar, después de revocar la TCB, esta conexión TCP finaliza. Se puede ver que el servidor finaliza la conexión TCP antes que el cliente.

El motivo de una gran cantidad de TIME_WAIT es cómo resolverlo

La pérdida de paquetes y el tiempo de espera se produjeron en la cuarta ola. Causado por una gran cantidad de conexiones cortas (http 1.0 usa conexiones cortas por defecto).

Configure la opción SO_LINGER del socket en el programa cliente;

La máquina cliente aumenta el valor de tcp_max_tw_buckets;

Modifique ipv4.ip_local_port_range para aumentar el rango de puertos disponibles, pero solo puede aliviar el problema, no resolverlo fundamentalmente;

Cambiar conexión corta a conexión larga (hay demasiadas conexiones cortas)

api de socket: cerrar ()和 apagar ()

 Para una conexión TCP, la parte que llama primero a close() entrará en el estado TIME_WAIT Además, hay algunos detalles sobre close() que necesitan ser explicados.
       La acción predeterminada de llamar a close() en un socket tcp es marcar el socket como cerrado e inmediatamente regresar al proceso de llamar a la API. En este momento, desde la perspectiva de la capa de aplicación, el proceso ya no puede usar el socket fd, es decir, ya no se puede usar como parámetro para leer o escribir. Luego, se iniciarán 4 ondas de TCP para cerrar completamente la conexión TCP.
       Llamar a close() es la forma normal de cerrar una conexión TCP, pero hay dos limitaciones de esta manera, razón por la cual se introdujo shutdown(): 1) close() en realidad solo
       disminuye el conteo de referencia del socket fd en 1, solo cuando Cuando el conteo de referencia del socket fd se reduce a 0, la capa de transporte TCP iniciará un protocolo de enlace de 4 vías para cerrar realmente la conexión. Shutdown puede iniciar directamente el protocolo de enlace de 4 vías necesario para cerrar la conexión sin estar limitado por el recuento de referencias;
       2) close() terminará el enlace dúplex TCP. Debido a la naturaleza de dúplex completo de la conexión TCP, puede haber un escenario de aplicación de este tipo: el par local ya no enviará datos al par remoto, y es posible que el par remoto todavía tenga datos para enviar. El par local quiere Informar al par remoto que ya no enviará datos pero que continuará recibiéndolos, no es posible usar close() y shutdown() puede completar esta tarea.

¿ Qué es el estado TIME_WAIT ? Ingresar al estado TIME_WAIT para esperar 2MSL tiene dos propósitos principales:

El estado TIME_WAIT es el estado en el que la parte que cierra activamente la conexión TCP (es decir, la parte que inicia primero el paquete FIN) ingresa al estado después de enviar el último paquete ACK. El sistema debe esperar 2MSL (vida útil máxima del segmento) en el estado TIME_WAIT antes de liberar la conexión (puerto). Según RFC 793, MSL es de 2 minutos, y la implementación general de TCP tiene 30 segundos, 1 minuto y 2 minutos.

Para lograr una liberación confiable de conexiones TCP full-duplex. La parte que cierra activamente la conexión tiene tiempo para reenviar el paquete ACK cuando la otra parte no ha recibido el último paquete ACK (la otra parte reenviará el FIN en este momento, y el intervalo de tiempo entre recibir dos FIN debe ser inferior a 2MSL );

Por otro lado, la conexión (combinación de IP y puerto) en TIME_WAIT no se puede reutilizar, para garantizar que el socket reasignado no se vea afectado por los paquetes de retransmisión retrasados ​​restantes. Porque el mensaje del remitente solo puede sobrevivir a un MSL, y la respuesta solo puede sobrevivir a un MSL.

¿Qué sucede si se establece la conexión, pero el cliente falla repentinamente?

TCP también tiene un temporizador de mantenimiento.Obviamente, si el cliente falla, el servidor no puede esperar para siempre, desperdiciando recursos en vano. El servidor restablecerá el temporizador cada vez que reciba una solicitud del cliente. El tiempo generalmente se establece en 2 horas. Si no ha recibido ningún dato del cliente dentro de dos horas, el servidor enviará un segmento de sondeo. Después de eso, cada 75 enviado cada segundo. Si aún no hay respuesta después de enviar 10 mensajes de detección seguidos, el servidor pensará que el cliente ha fallado y luego cerrará la conexión.

Solo hay 65535 puertos, como lograr millones de concurrencia

Después de que el servidor TCP escuche el puerto especificado para recibir la conexión del cliente, crea un nuevo socket para leer y escribir datos con el cliente, pero el socket no necesita ni vincula un nuevo puerto, por lo que para el servidor TCP, no hay escasez de puertos.

Identificador de conexión TCP (descriptor de archivo fd)

src-ip src-port dest-ip dest-port protocolo

¿En qué se basa TCP para implementar un mecanismo de seguridad (mecanismo de control de errores)?

Número de serie: cuando los datos llegan al receptor, el receptor debe enviar una respuesta para indicar que se ha recibido el segmento de datos, y el número de serie de confirmación indicará el número de serie que debe aceptarse la próxima vez, 2*RTT (tiempo de ida y vuelta del segmento de mensaje) + un valor de compensación .

Mecanismo de confirmación (mecanismo acumulativo) y retransmisión de tiempo de espera.

control de flujo

El control de flujo se logra a través de una ventana deslizante.

Resuelve el problema de datos no confiables entre redes, como pérdida de paquetes, paquetes repetidos, errores, desorden y rendimiento mejorado.

La ventana deslizante de Tcp no tiene un tamaño fijo, pero el receptor notifica al remitente el tamaño de su ventana a través del campo de ventana de notificación en el encabezado del mensaje tcp.

TCP utilizará el control de ventana para aumentar la velocidad de transmisión, lo que significa que dentro de un tamaño de ventana, no es necesario esperar una respuesta para enviar el siguiente dato.El tamaño de ventana es el valor máximo que puede continuar enviando datos sin esperando confirmación. Si no se utiliza el control de ventana, todos los datos que no reciban un reconocimiento deben reenviarse.

Si el acuse de recibo no se recibe dentro del límite de tiempo, el paquete previamente no reconocido se reenviará (retransmisión por tiempo de espera) y la demora de la ventana del remitente permanecerá sin cambios. Si se recibe confirmación, la ventana se retrasará y avanzará; si la ventana de notificación permanece sin cambios, la ventana se moverá hacia adelante. Si la ventana de notificación se reduce, el borde frontal de la ventana no se mueve o el movimiento disminuye.

Si los búferes de envío y recepción están agotados, regrese al número de secuencia inicial y comience a contar nuevamente.

control de congestión

Comienzo lento, retransmisión rápida, recuperación rápida.

Maxwindow=min (rwnd,cwnd)

Rwnd>cwnd; La cantidad de datos que se pueden enviar está controlada por la congestión de la red

Rwnd<cwnd ; la cantidad de datos que se pueden enviar está controlada por la capacidad de aceptar

Inicio lento: Aumente gradualmente la ventana de envío de pequeña a grande y crezca exponencialmente. Cuando se alcanza el umbral de inicio lento (ssthresh), se inicia el algoritmo para evitar la congestión, agregando uno cada vez. Cuando se agota el tiempo de espera de la transmisión de datos, cwnd se restablece a 1 y ssthresh*=1/2.

Al principio, el remitente primero establece cwnd (ventana de congestión) = 1 y envía el primer segmento de mensaje M1.Después de que el receptor recibe M1 , el remitente aumenta cwnd a 2 después de recibir la confirmación del receptor, y luego el remitente envía M2 , M3 , después de que el remitente recibe el acuse de recibo del receptor, cwnd aumenta a 4 , y el algoritmo de inicio lento duplica la ventana de congestión cwnd cada vez que el algoritmo de inicio lento pasa por una ronda de transmisión (se considera que el remitente ha recibido con éxito el acuse de recibo de El receptor).

Retransmisión rápida y recuperación rápida.

El algoritmo de retransmisión rápida requiere que el receptor envíe una confirmación repetida inmediatamente después de recibir un segmento fuera de secuencia, en lugar de esperar la confirmación piggyback cuando envía datos. El receptor aceptó con éxito M1 y M2 del remitente y envió ACK respectivamente . Ahora el receptor no recibió M3 , pero recibió M4 . Obviamente, el receptor no puede confirmar M4 , porque M4 es un segmento de mensaje fuera de secuencia. Si el receptor no hace nada de acuerdo con el principio de transmisión confiable, pero de acuerdo con el algoritmo de retransmisión rápida, al recibir M4 , M5 y otros segmentos de mensajes, enviará repetidamente M2 ACK al remitente , si el receptor recibe Si hay tres repetidos ACK, entonces el remitente no tiene que esperar a que expire el temporizador de retransmisión, y el remitente retransmite el segmento no reconocido lo antes posible.

Recuperación rápida (evitación de congestión)

  1. Cuando el remitente recibe tres confirmaciones seguidas, ejecuta el algoritmo de reducción de multiplicación para reducir a la mitad el umbral de inicio lento ( ssthresh ), pero luego no ejecuta el algoritmo de inicio lento.
  2. En este momento, el algoritmo de inicio lento no se ejecuta, pero cwnd se establece en la mitad de ssthresh y luego se ejecuta el algoritmo para evitar la congestión para aumentar lentamente la ventana de congestión.

Hable sobre el proceso de interacción (ARP) de la capa de enlace de datos TCP/IP

La capa de red espera hasta que la capa de enlace de datos use la dirección mac como destino de comunicación, y cuando el paquete de datos llega a la red y está listo para enviarse a la capa de enlace de datos, primero irá a su propia tabla de caché arp ( donde se almacena la correspondencia ip-mac ) para encontrar la ip de destino Si se encuentra la dirección mac , la dirección mac de la ip de destino se encapsula en el encabezado del paquete de datos de la capa de enlace. Si no se encuentra en el caché, se iniciará una transmisión: quién es ip XXX, dile a ip XXX, todas las máquinas que reciban la transmisión verificarán si la ip es propia, si es propia, enviarán su propia mac dirección en forma de marcación única Responder a la máquina solicitante

Supongo que te gusta

Origin blog.csdn.net/hebtu666/article/details/127204723
Recomendado
Clasificación