experiencia en redes informáticas

1. Modelo OSI de siete capas ❤️❤️❤️❤️❤️❤️

	OSI 模型(Open System Interconnection Model)是⼀个由 ISO 提出的概念模型,
	试图提供⼀个使各种不同的的计算机和⽹络在世界范围内实现互联的标准框架。
	虽然OSI参考模型在实际中的应⽤意义并不是很⼤,但是它对于理解⽹络协议内部的运作很有帮助,
	为我们学习⽹络协议提供了⼀个很好的参考。它将计算机⽹络体系结构划分为7层,
	每层都为上⼀层提供了良好的接⼝。以下将具体介绍各层结构及功能。

2. Estructura jerárquica

1. Capa física

En pocas palabras, la capa física garantiza que los datos originales se puedan transmitir en varios medios físicos. Esta capa especifica la activación, el mantenimiento y el apagado de las características mecánicas, eléctricas y funcionales entre los extremos de la comunicación y proporciona un medio físico para la transmisión de datos para el protocolo de la capa superior.Esta capa transmite flujos de bits.

2. Capa de enlace de datos ❤️❤️❤️

La capa de enlace de datos (Data Link Layer) proporciona una transmisión confiable a través de medios físicos no confiables. Las funciones de esta capa incluyen: direccionamiento de direcciones físicas, tramas de datos, control de flujo, detección de errores de datos, retransmisión, etc. En esta capa, el flujo de bits se encapsula en una trama de trama.

3. Capa de red ❤️❤️❤️

La capa de red es responsable de enrutar paquetes de datos entre subredes. Además, la capa de red también puede implementar funciones como control de congestión e interconexión a Internet. En esta capa, la unidad de datos se denomina paquete.

4. Capa de transporte

La capa de transporte es una capa de extremo a extremo, es decir, de host a host. La capa de transporte es responsable de segmentar los datos de la capa superior y proporcionar una transmisión de extremo a extremo, confiable o no confiable. Además, la capa de transporte también se ocupa de los problemas de control de flujo y control de errores de extremo a extremo. En esta capa, la unidad de datos se denomina segmento.

5. Capa de sesión ❤️❤️❤️

Esta capa administra los procesos de sesión entre hosts, es decir, es responsable de establecer, administrar y finalizar sesiones entre procesos. La capa de sesión también implementa la sincronización de datos mediante la inserción de puntos de control en los datos y establece y mantiene mecanismos de comunicación entre aplicaciones, incluida la verificación de acceso y la gestión de sesiones. Por ejemplo, la autenticación del servidor del inicio de sesión del usuario la realiza la capa de sesión. Permite que una sesión de comunicación reanude la comunicación desde un punto de control cuando falla la comunicación. Por ejemplo, establezca una sesión, como autenticación de sesión y carga reanudable.

6. Capa de presentación

Esta capa resuelve principalmente el problema de la representación gramatical de la información del usuario. Convierte los datos a intercambiar de una sintaxis abstracta adecuada para un determinado usuario a una sintaxis de transferencia adecuada para el uso interno del sistema OSI. Es decir, proporciona servicios de representación y transformación de datos formateados. La capa de presentación realiza la compresión y descompresión de datos, el cifrado y el descifrado. Por ejemplo, solución de codificación de imágenes y videos, encriptación de datos.

7. Capa de aplicación ❤️❤️❤️

Esta capa proporciona una interfaz para que el sistema operativo o las aplicaciones de red accedan a los servicios de red.

3. Comparación de protocolos de transmisión, unidades de transmisión y principales equipos funcionales de cada capa

nombre Protocolo de transferencia unidad de transmisión Dispositivo/interfaz de función principal
capa fisica IEEE 802.1A, IEEE 802.2 flujo de bits flujo de bits Fibra óptica, par trenzado, repetidor, concentrador, interfaz de cable de red
Capa de enlace de datos ARP, MAC, FDDI, Ethernet, Arpanet, PPP, PDN marco marco Puente, conmutador de capa 2
Capa de red IP, ICMP, ARP, RARP paquete enrutadores, conmutadores de capa 3
capa de transporte TCP, UDP Segmento/Datagrama Conmutador de capa 4
capa de sesión SMTP, DNS mensaje QoS
Capa de presentación Telnet, SNMP mensaje -
capa de aplicación FTP, TFTP, Telnet, HTTP, DNS mensaje -

4. Describa el encabezado TCP. ❤️❤️❤️❤️❤️❤️❤️❤️

  • Número de secuencia 32 (bit): el número de byte del flujo de bytes en la dirección de transmisión. El número de secuencia inicial se establecerá con un valor inicial aleatorio (ISN), y luego, cada vez que se envíen datos, el valor del número de secuencia = ISN + el desplazamiento de los datos en todo el flujo de bytes. Suponiendo que A -> B e ISN = 1024, el primer segmento de datos de 512 bytes ha llegado a B, entonces el número de secuencia del segundo segmento de datos es 1024 + 512. Se utiliza para resolver el problema de los paquetes de red fuera de servicio.
  • Número de confirmación (32 bits): la respuesta del receptor al segmento TCP del remitente y su valor es el número de secuencia recibido + 1. ❤️
  • Longitud del encabezado (4bit): Indica cuántos 4 bytes * longitud del encabezado hay, el máximo es 15, es decir, 60 bytes.
  • Bit de bandera (6 bits):
    • URG: indica si el puntero urgente es válido.
    • ACK: Marca si el número de confirmación es válido (segmento de confirmación). Se utiliza para resolver el problema de la pérdida de paquetes.
    • PSH: solicita al receptor que lea los datos del búfer inmediatamente.
    • RST: Indica que se requiere que la otra parte restablezca la conexión (restablecer segmento).
    • SYN: Indica una solicitud para establecer una conexión (segmento de conexión).
    • FIN: significa cerrar la conexión (desconectar el segmento).
  • Ventana (16 bits): ventana de recepción. Se utiliza para informar a la otra parte (emisor) cuántos bytes de datos se pueden recibir en el búfer de esta parte. Se utiliza para resolver el control de flujo.
  • Suma de comprobación (16 bits): el extremo receptor utiliza CRC para comprobar si todo el segmento del mensaje está dañado.

5. Apretón de manos y saludo de tres vías de TCP ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

1. Proceso de apretón de manos de tres vías

  • La primera vez: el cliente envía un paquete que contiene el bit SYN, SEQ_NUM = S al servidor. (invitado -> SYN_SEND)
  • La segunda vez: el servidor envía un paquete que contiene ACK, bit SYN y ACK_NUM = S + 1, SEQ_NUM = P al cliente. (servir -> SYN_RECV)
  • La tercera vez: el cliente envía un paquete que contiene el bit ACK, ACK_NUM = P + 1 al servidor. (Cliente -> ESTABLECER, Servicio -> ESTABLECER)

2. El proceso de agitar cuatro veces

  • La primera vez: el cliente envía un paquete que contiene el bit FIN, SEQ = Q al servidor. (Invitado -> FIN_WAIT_1)
  • La segunda vez: el servidor envía un paquete que contiene ACK y ACK_NUM = Q + 1 al servidor. (Servidor -> CLOSE_WAIT, Invitado -> FIN_WAIT_2), ¡aquí está esperando!
  • Tercera vez: el servidor envía un paquete que contiene FIN y SEQ_NUM = R al cliente. (Servidor -> LAST_ACK, Invitado -> TIME_WAIT) ¡Aquí está esperando!
  • Cuarta vez: El cliente envía el último paquete con bit ACK y ACK_NUM = R + 1 al cliente. (Serviendo -> CERRADO)

3. ¿Por qué hay tres apretones de manos y cuatro ondas? ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

  • Para el apretón de manos: el apretón de manos solo necesita confirmar el número de secuencia de inicialización cuando las dos partes se comunican, para garantizar que la comunicación no se desordene. (Necesidad del tercer protocolo de enlace: suponiendo que se pierda la confirmación del servidor y la conexión no se desconecte, el cliente vuelve a enviar la solicitud de conexión después de un tiempo de espera, de modo que el servidor mantendrá múltiples conexiones con el mismo cliente, lo que resultará en una pérdida de recursos.)
  • Para agitar: TCP es dúplex, por lo que tanto el remitente como el receptor necesitan FIN y ACK. Es solo que un lado es pasivo, por lo que parecen 4 manos agitadas.

4. ¿Estado de la conexión TCP?

  • CERRADO: estado inicial.
  • LISTEN: El servidor está en estado de escucha.
  • SYN_SEND: el socket del cliente realiza una conexión CONNECT, envía un paquete SYN y entra en este estado.
  • SYN_RECV: el servidor entra en este estado después de recibir el paquete SYN y enviar el paquete SYN del servidor.
  • ESTABLECER: Indica que la conexión está establecida, el cliente entra en este estado después de enviar el último paquete ACK, y el servidor entra en este estado después de recibir el paquete ACK.
  • FIN_WAIT_1: ingrese después de que la parte que finalizó la conexión (generalmente el cliente) envíe un mensaje FIN. Espere el FIN de la otra parte.
  • CLOSE_WAIT: (suponiendo que el servidor) espera la etapa de cierre después de recibir el paquete FIN del cliente. Después de recibir el paquete FIN de la otra parte, es natural responder un paquete ACK inmediatamente, lo que indica que se conoce la solicitud de desconexión. Sin embargo, si la parte local se desconecta inmediatamente (envía un paquete FIN) depende de si hay algún dato para enviar al cliente, si es así, permanece en este estado antes de enviar el paquete FIN.
  • FIN_WAIT_2: En este momento, se encuentra en estado semiconectado, es decir, una parte solicita cerrar la conexión y espera a que la otra parte cierre. El cliente recibe el paquete ACK del servidor, pero no recibe inmediatamente el paquete FIN del servidor y entra en el estado FIN_WAIT_2.
  • LAST_ACK: el servidor envía el último paquete FIN, espera la última respuesta ACK del cliente y entra en este estado.
  • TIME_WAIT: el cliente recibe el paquete FIN del servidor e inmediatamente envía un paquete ACK para la confirmación final. El tiempo 2MSL posterior se denomina estado TIME_WAIT.

5. ¿Explicar el estado FIN_WAIT_2, CLOSE_WAIT y TIME_WAIT?

  • FIN_ESPERA_2:
    • estado semicerrado.
    • La parte que envía datos aún tiene la capacidad de recibir datos, pero ya no tiene la capacidad de enviar datos.
  • Estado CLOSE_WAIT:
    • La parte que cierra pasivamente la conexión responderá inmediatamente con un paquete ACK después de recibir el paquete FIN, lo que indica que se ha recibido la solicitud de desconexión.
    • Si la parte que cierra pasivamente la conexión todavía tiene datos para enviar, entrará en el estado CLOSED_WAIT.
  • Estado TIME_WAIT
    • También llamado estado de espera 2MSL.
    • Si el cliente ingresa directamente al estado CERRADO, si el servidor no recibe el último paquete ACK, volverá a enviar el paquete FIN después del tiempo de espera. En este momento, debido a que el cliente ya está CERRADO, el servidor no recibirá el ACK pero sí recibir el ACK.RST. Por lo tanto, el propósito del estado TIME_WAIT es evitar que los datos del último protocolo de enlace lleguen a la otra parte y activen la retransmisión de los preparativos de FIN.
    • Durante el tiempo de 2MSL, ya no se puede usar el mismo socket, de lo contrario, puede mezclarse con los datos de la conexión anterior (si el socket de la nueva conexión y la conexión anterior son los mismos).

6. Explique la retransmisión de RTO, RTT y tiempo de espera.

  • Retransmisión por tiempo de espera: si el remitente no recibe un mensaje de confirmación durante mucho tiempo después de enviar el mensaje, debe volver a enviar el mensaje. Puede haber varias situaciones:
    • Los datos enviados no llegaron al extremo receptor, por lo que la otra parte no respondió.
    • El extremo receptor recibe los datos, pero el paquete ACK se pierde durante el proceso de devolución.
    • El receptor rechaza o descarta los datos.
  • RTO: el intervalo de retransmisión es el tiempo entre la última vez que se envían los datos y el tiempo entre la próxima retransmisión porque no se ha recibido una respuesta ACK durante mucho tiempo.
    • Normalmente, el RTO de cada retransmisión es el doble del intervalo de retransmisión anterior y la unidad de medida suele ser RTT. Ejemplo: 1RTT, 2RTT, 4RTT, 8RTT...
    • Detenga la retransmisión después de que el número de retransmisiones alcance el límite.
  • RTT: El intervalo de tiempo entre el envío de datos y la recepción de la respuesta de la otra parte, es decir, cuando el datagrama se usa en un viaje de ida y vuelta en la red, el tamaño es inestable.
  • El propósito es que el receptor informe al remitente de la cantidad máxima de datos que puede recibir a través del campo de la ventana del encabezado TCP, para solucionar el problema de que el receptor no puede recibir porque la velocidad de envío es demasiado rápida. Entonces, el control de flujo es un control punto a punto.
  • TCP es un protocolo dúplex, y ambas partes pueden comunicarse al mismo tiempo, por lo que el remitente y el receptor mantienen cada uno una ventana de envío y una ventana de recepción.
    • Ventana de envío: se utiliza para limitar el tamaño de los datos que el remitente puede enviar, donde el tamaño de la ventana de envío está controlado por el campo de la ventana en el segmento TCP devuelto por el receptor, y el receptor informa al remitente de su propio búfer a través de este campo (Limitado por el sistema, hardware, etc.) Tamaño.
    • Ventana de recepción: se utiliza para marcar el tamaño de los datos que se pueden recibir.
  • TCP es un flujo de datos, y el flujo de datos enviado se puede dividir en las siguientes cuatro partes: parte enviada y confirmada | parte no reconocida enviada | parte no enviada pero que se puede enviar | parte que no se puede enviar, donde ventana de envío = enviada pero no parte de confirmación + parte no enviada pero que se puede enviar parte. El flujo de datos recibido se puede dividir en: recibido | no recibido pero listo para recibir | no recibido pero no listo para recibir. Ventana de recepción = no recibido pero listo para recibir parte.
  • Para los datos en la ventana de envío, la ventana de envío solo se mueve cuando se recibe la respuesta ACK de un determinado segmento de datos enviado por el extremo receptor, y el borde izquierdo está cerca de los datos que se acaban de confirmar. La ventana de recepción solo se mueve cuando se reciben datos y el lado izquierdo es continuo.

7. Principio de control de congestión

  • El objetivo del control de congestión es evitar la sobrecarga de los recursos de la red (enrutadores, conmutadores, etc.) debido a la inyección excesiva de datos en la red. Debido a que el control de congestión involucra el enlace de red general, pertenece al control global. La congestión se controla mediante ventanas de congestión.
  • Algoritmo de control de congestión TCP:
    • Inicio lento y evitación de congestión: primero pruebe el nivel de congestión de la red y luego aumente gradualmente la ventana de congestión. La ventana de congestión se duplica cada vez que se recibe un reconocimiento hasta que alcanza el umbral ssthresh, que forma parte del proceso de inicio lento. Una vez que se alcanza el umbral, el tamaño de la ventana de congestión aumenta en un MSS cada vez. Cuando se produce la congestión (no se recibe la confirmación después de un tiempo de espera), el umbral se reduce a la mitad del valor original y continúa el aumento lineal. Este proceso es para evitar la congestión.
    • Eventualmente, la ventana de congestión convergerá a un valor estable.

6. ¿Cómo distinguir entre control de flujo y control de congestión?

  • El control de flujo pertenece a la negociación entre las partes de la comunicación; el control de congestión involucra la calidad del enlace de comunicación.
  • El control de flujo requiere que ambas partes de la comunicación mantengan una ventana de envío y una ventana de recepción. Para cualquier parte, el tamaño de la ventana de recepción se determina por sí mismo, y el tamaño de la ventana de envío se determina por el valor de la ventana en el segmento TCP del la respuesta del receptor. ; El cambio del tamaño de la ventana de congestión del control de congestión se ajusta de manera adaptativa enviando tentativamente una cierta cantidad de datos para detectar las condiciones de la red.
  • Ventana de envío final real = min{ventana de envío de control de flujo, ventana de congestión}.

7. ¿Cómo proporciona TCP una transmisión de datos fiable?

  • Establecer conexión (bit indicador): Confirme la existencia de la entidad de comunicación antes de la comunicación.
  • Mecanismo de número de secuencia (número de serie, número de confirmación): asegura que los datos lleguen en secuencia y en su totalidad.
  • Verificación de datos (suma de verificación): CRC verifica todos los datos.
  • Retransmisión de tiempo de espera (temporizador): asegúrese de que los datos que no llegan debido a una falla del enlace se pueden retransmitir varias veces.
  • Mecanismo de ventanilla (window): Proporciona control de flujo para evitar envíos excesivos.
  • Control de congestión: Igual que el anterior.

8. ¿Proceso de interacción del socket TCP?

  • servidor:
    • 创建socket->int socket(int dominio,int tipo,int protocolo);
      • dominio: Dominio de protocolo, que determina el tipo de dirección del socket, IPv4 es AF_INET.
      • type: especifica el tipo de socket, SOCKET_STREAM es una conexión TCP.
      • protocolo especifica el protocolo. IPPROTO_TCP indica el protocolo TCP, y cuando es 0 se selecciona automáticamente el tipo de protocolo por defecto.
    • Vincular socket y número de puerto -> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      • sockfd: el descriptor de socket devuelto por socket, similar al descriptor de archivo fd.
      • addr: hay un puntero a datos de tipo sockaddr, que apunta a la variable de estructura enlazada.
//IPv4的sockaddr地址结构
struct sockaddr_in{
    
    
	sa_family_t sin_family;//协议类型,AF_INET
	in_port_t sin_port;//端口号
	struct in_addr sin_addr; //IP地址
};
struct in_addr{
    
    
	uint32_t s_addr;
}
  • addrlen: longitud de la dirección.
    • Número de puerto de escucha -> int listen(int sockfd, int backlog);
      • sockfd; la palabra de descripción del calcetín a monitorear.
      • backlog: el número máximo de conexiones que el socket puede poner en cola.
    • Recibir solicitud de usuario -> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
      • socket: palabra de descripción del socket del servidor.
      • addr: puntero a la estructura de la dirección.
      • addrlen: longitud de la dirección del protocolo.
      • Nota: Una vez que la solicitud de un cliente se acepta correctamente, se devolverá un nuevo descriptor para identificar la conexión TCP del cliente específico.
    • Leer caracteres del socket -> ssize_t read(int fd, void *buf, size_t count);
      • fd: descriptor de conexión.
      • buf: buffer buf.
      • recuento: longitud del búfer.
      • Nota: mayor que 0 indica el número de bytes leídos, devolver 0 indica el final de la lectura del archivo y menor que 0 indica que ocurrió un error.
    • cerrar socket -> int cerrar (int fd);
      • fd: el descriptor de conexión devuelto por accept, uno para cada conexión, y el ciclo de vida es el ciclo de conexión.
      • Nota: socket es una palabra de descripción de monitoreo, y solo hay un servidor, que se usa para monitorear si hay una conexión; fd es una palabra de descripción de conexión, que se usa para la operación de cada conexión.
  • Equipo cliente:
    • 创建 socket -> int socket (dominio int, tipo int, protocolo int);
    • Conéctese a la computadora especificada -> int connect(int sockfd, struct sockaddr* addr, socklen_t addrlen);
      • El descriptor sock del cliente sockfd.
      • addr: La dirección del servidor.
      • addrlen: longitud de la dirección del socket.
    • Escribir información en el socket -> ssize_t write(int fd, const void *buf, size_t count);
      • fd, buf, count: mismo significado que en read.
      • Un valor superior a 0 indica que se han escrito algunos o todos los datos, y un valor inferior a 0 indica un error.
    • Cerrar oscket -> int close(int fd);
      -fd: igual que fd del lado del servidor

Supongo que te gusta

Origin blog.csdn.net/qq_43679351/article/details/125271414
Recomendado
Clasificación