[Linux] Introducción a la Programación de Redes (TCP + UDP)

Breve descripción del catálogo:

Prefacio:

1. Descripción general de la comunicación en red

En segundo lugar, la función principal de la programación de red.

(1) función de enchufe

(2) función de enlace

(3) función de enlace

(4) aceptar la función

(5) función de conexión

(6) función de envío

(7) función de recepción

(8) función recvform

(9) función enviar a


Prefacio:

Enlace inicial: con las siguientes preguntas, práctica de lectura dirigida, es más fácil profundizar

(1) ¿Qué es la comunicación en red?

  • ①¿Cuáles son los elementos básicos de la transmisión de datos en la red?
  • ②La estructura de cinco capas de un protocolo de red general, ¿cuál es la función de cada capa?
  • ③¿Cuáles son las características de TCP y UDP del protocolo de la capa de transporte? ¿Escenario de aplicación?
  • ④¿Cómo es el proceso de comunicación de la red TCP/UDP?

(2) Introducción a las funciones principales de la programación de redes

El contenido del siguiente artículo responderá a las preguntas anteriores en detalle. Si hay alguna ayuda, es posible que desee prestarle atención tres veces ( ^_^ ).

1. Descripción general de la comunicación en red

¿Qué es la comunicación en red?

La comunicación de red se refiere a la comunicación de conexión entre dos o más computadoras para completar el proceso de servicios de red. Es una parte importante de Internet y un método de comunicación de red informática que proporciona a los usuarios una conexión remota de una computadora a otra.

Lo más importante en la comunicación de red es el protocolo de comunicación de red . Los protocolos de comunicación comúnmente utilizados incluyen el protocolo TCP/IP, el protocolo IPX/SPX y el protocolo NetBEUI.

①¿Cuáles son los elementos básicos de la transmisión de datos en la red?

Todas las transmisiones de datos tienen tres elementos: origen, destino y duración. En la transmisión de red, "IP y puerto" se utilizan para indicar el origen o el destino. Como se muestra abajo:

 En un transporte, hay dos objetos, el servidor y el cliente. El cliente inicia la solicitud de forma activa y el servidor responde a la solicitud de forma pasiva.

②El protocolo de red es muy importante En la estructura de cinco capas de un protocolo de red general, ¿cuál es la función de cada capa?

  • Capa de aplicación: es la capa más alta de la arquitectura y proporciona servicios directamente a los procesos de aplicación del usuario, como correo electrónico, transferencia de archivos y emulación de terminal.
  • Capa de transporte: Encargada de brindar servicios para la comunicación entre procesos en dos hosts. Los dos protocolos principales utilizados por la capa de transporte son TCP y UDP.
  • Capa de red: Responsable de mover paquetes de capa de red llamados datagramas de un host a otro.
  • Capa de enlace: la capa de red de Internet enruta datagramas a través de una serie de enrutadores entre el origen y el destino.
  • Capa física: La unidad de datos transmitidos en la capa física es bit. La tarea de la capa física es transmitir el flujo de bits de forma transparente.

Aquí, necesitamos la "capa de transporte" para escribir la aplicación, y nuestra aplicación se encuentra en la "capa de aplicación".

③¿Qué son TCP y UDP? ¿Cuáles son sus características? ¿Escenario de aplicación?

(1) Protocolo de control de transmisión TCP (Protocolo de control de transmisión) : orientado a la conexión, la unidad de transmisión de datos es un segmento de mensaje, que puede proporcionar una entrega confiable.

TCP proporciona servicios orientados a la conexión a sus aplicaciones. Este servicio tiene 2 características: transmisión confiable, control de flujo (es decir, coincidencia de velocidad de transmisión/recepción). Incluye la división de paquetes de capa de aplicación en paquetes cortos y proporciona mecanismos de control de congestión.

(2) Protocolo de datagramas de usuario UDP (Protocolo de datagramas de usuario) : sin conexión, la unidad de transmisión de datos es el datagrama de usuario, que no garantiza una entrega confiable, pero solo puede proporcionar " entrega con el mejor esfuerzo " .
El protocolo UDP proporciona servicios sin conexión a sus aplicaciones. No tiene confiabilidad, ni control de flujo, ni control de congestión.
UDP tiene las siguientes características:
  • Control más granular sobre cuándo enviar qué datos
  • Al usar UDP, siempre que el proceso de aplicación pase datos a UDP , UDP los pasará inmediatamente a la capa de red. Y TCP tiene un mecanismo de retransmisión independientemente del tiempo que tarde la entrega confiable. Sin embargo, las aplicaciones en tiempo real generalmente no desean demorar excesivamente la transmisión de segmentos de mensajes y pueden tolerar cierta pérdida de datos.
  • No hay necesidad de establecer una conexión y no se introduce ningún retraso al establecer una conexión.
  • Sin estado de conexión, puede admitir clientes más activos.
  • La sobrecarga del encabezado del paquete es pequeña.
En muchos escenarios, se puede aceptar la pérdida ocasional de paquetes y el efecto de usar UDP será mejor, como en las videollamadas de idiomas.
④¿Cómo es el proceso de comunicación de la red TCP/UDP?

El proceso de comunicación de la red TCP se muestra en la siguiente figura: (servidor como ejemplo)

  • Crear un zócalo (socket)
  • Vincular la dirección al socket (vincular)
  • Anunciar que el servidor puede aceptar solicitudes de conexión (escuchar)
  • Obtener una solicitud de conexión y establecer una conexión (aceptar)
  • Enviar y recibir datos (enviar, recibir)
  • conexión final (cerrar)

 El proceso de comunicación de la red UDP se muestra en la siguiente figura: (servidor como ejemplo)

  • Crear un zócalo (socket)
  • Vincular la dirección al socket (vincular)
  • Enviar y recibir datos (enviar a, recibir formulario)
  • conexión final (cerrar)

En segundo lugar, la función principal de la programación de red.

(1) función de enchufe

int socket(int domain, int type,int protocol);

  1. dominio: La familia de protocolos de comunicación (AF_UNIX , AF_INET, etc. ) adoptada por el host donde se encuentra el programa de red .

  2.tipo:  El protocolo de comunicación utilizado por el programa de red (SOCK_STREAM, SOCK_DGRAM, etc. ) .

  • TCP correspondiente a SOCK_STREAM.
  • UDP correspondiente a SOCK_DGRAM

protocolo:   se especifica el tipo, y este lugar generalmente solo necesita ser reemplazado por 0.

(2) función de enlace

int bind(int sockfd, struct sockaddr *my_addr, int addrlen);

  1.sockfd: es el descriptor de archivo devuelto por la llamada a la función de socket.

  2.my_addr: Es un puntero a sockaddr.

  3.addrlen: es la longitud de la estructura sockaddr.

(3) función de enlace

int listen(int sockfd,int backlog);

La función de escucha convierte el descriptor de archivo de bind en un socket de escucha, y el retorno es el mismo que el de bind.

  1.sockfd: es el descriptor de archivo después de enlazar.

  2. backlog: establezca la longitud máxima de la cola de solicitudes. Cuando hay varios programas cliente conectados al servidor, utilice esto para indicar la longitud de la cola que se puede introducir.

(4) aceptar la función

int accept(int sockfd, struct sockaddr *addr,int *addrlen);

Cuando se llama a accept, el programa del lado del servidor se bloqueará hasta que un programa cliente envíe una conexión. Cuando la aceptación tiene éxito, devuelve el último descriptor de archivo del lado del servidor. En este momento, el lado del servidor puede escribir información en el descriptor. Cuando falla, devuelve -1.

  1.sockfd: Es el descriptor del archivo después de escuchar.

  2. addr, addrlen: Se usa para llenar el programa cliente, y el servidor solo necesita pasar el puntero, bind, listen y accept son funciones que usa el servidor.

(5) función de conexión

int connect(int sockfd, struct sockaddr * serv_addr,int addrlen);

Puede usar connect para establecer una conexión, y la dirección especificada en connect es la dirección del servidor con el que desea comunicarse.

  1.sockfd: el descriptor de archivo devuelto por la función de socket.

  2. serv_addr: Almacena la información de conexión del servidor, donde sin_add es la dirección del servidor.

  3. addrlen: longitud de serv_addr

El cliente utiliza la función connet para conectarse con el servidor. Devuelve 0 cuando tiene éxito, y sockfd es el descriptor de archivo para comunicarse con el servidor, y devuelve -1 cuando falla.

(6) función de envío

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

Tanto las aplicaciones de cliente como las de servidor utilizan la función de envío para enviar datos al otro extremo de la conexión TCP.

  1. sockfd especifica el descriptor de socket del remitente;

  2.buf indica un búfer que almacena datos para ser enviados por la aplicación;

  3.len indica el número real de bytes de datos que se enviarán;

  4. Las banderas generalmente se establecen en 0.

(7) función de recepción

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

Tanto las aplicaciones de cliente como las de servidor utilizan la función recv para recibir datos desde el otro extremo de una conexión TCP.

  1. sockfd especifica el descriptor de socket del receptor;

  2.buf especifica un búfer, que se utiliza para almacenar los datos recibidos por la función recv;

  3.len especifica la longitud de buf;

  4. Las banderas generalmente se establecen en 0.

(8) función recvform

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
 struct sockaddr *src_addr, socklen_t *addrlen);

  1.recvfrom: generalmente se usa para sockets sin conexión, porque esta función puede obtener la dirección del remitente.

  2. src_addr: Es una variable de tipo struct sockaddr, que almacena la dirección IP y el número de puerto de la máquina fuente.

  3. addrlen: siempre establecido en sizeof (struct sockaddr).

(9) función enviar a

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
 const struct sockaddr *dest_addr, socklen_t addrlen);

sendto es similar a send, excepto que sendto permite especificar una dirección de destino en un socket sin conexión.

  1.dest_addr: Indica la dirección IP y la información del número de puerto de la máquina de destino

  2.addrlen: a menudo se asigna como sizeof (struct sockaddr).

  3.sendto: la función también devuelve la longitud real de los bytes de datos enviados o devuelve -1 cuando se produce un error de envío.

Supongo que te gusta

Origin blog.csdn.net/weixin_42373086/article/details/130161973
Recomendado
Clasificación