¡Sencillo, divertido y fácil de entender! Programación de red Python UDP

1. ¿Qué es UDP?

UDP son las siglas de User Datagram Protocol , el chino es User Datagram Protocol . Es un protocolo de capa de transporte sin conexión en el conjunto de protocolos de Internet , que proporciona servicios de transmisión orientados a transacciones simples y poco confiables . En pocas palabras, UDP es un protocolo de transporte en la capa de transporte . No es necesario establecer una conexión con el host de destino durante la transmisión . Puede transmitir directamente siempre que conozca la IP y el número de puerto de la otra parte . Podemos comparar la UDP con escribir una carta : debe escribir la dirección postal y el número postal cada vez que envía una carta. Puede enviarla directamente sin llamar a la otra parte antes de enviarla.
Tenemos una comprensión general de la definición de UDP, así que echemos un vistazo a las características del "modo escribir letra".

En segundo lugar, las características de UDP

1. Falta de fiabilidad:

UDP hace todo lo posible por entregar, pero no garantiza la entrega . En otras palabras, no se puede garantizar la integridad y accesibilidad de los datos transmitidos a través del protocolo UDP . No se notificará al anfitrión si llega o no . Por lo tanto, no es necesario mantener la complicada relación de conexión entre el host y el host de destino. En términos sencillos, es como en la antigüedad. Tienes que compartir un libro con tu novia en un lugar diferente. ¿Qué pasa? ¿Se puede enviar el sobre (en caso de encontrarse con Lord Bei, luego pastel ...)

Dado que UDP no es confiable, ¿ no es necesario que exista UDP ? La respuesta es no . UDP no se incluye con una gran cantidad de funciones de seguridad como tcp, por lo que UDP no tendrá mucha sobrecarga del sistema durante el proceso de transmisión, lo que reduce en gran medida el tiempo de ejecución y , por lo tanto, mejora la eficiencia de transmisión . . Debido a las ventajas de la velocidad de transmisión UDP, UDP es muy importante para algunas aplicaciones en tiempo real .

 2. Sin conectividad:

UDP no tiene conexión , es decir, no es necesario establecer una conexión antes de la comunicación y la capa de transporte del host de destino no da una confirmación después de recibirla . Siguiendo la analogía anterior, no necesitas avisar a tu novia cuando dejas volar a la paloma (parece que no hay forma de avisar ...); aunque la paloma entregue el sobre, no podrá avisarte inmediatamente "Yo lo he recibido ".

3. Orientado a mensajes:

Los paquetes de la capa de aplicación pasados ​​por la capa de red y entregados a los paquetes ip no se alteran , agregue / elimine directamente el encabezado para el siguiente paso. Si el mensaje es demasiado largo, se fragmentará en la capa ip ; si el mensaje es demasiado corto, el encabezado del datagrama en la capa ip será muy largo. Ya no uso Fei Ge Chuan Shu aquí, uso la versión mejorada de Fei Ge Chuan Shu-write letter (emmm ... pasada): Cuando escribas una carta, pon la letra (campo de datos) en el sobre ( primera parte) Cuando el contenido es demasiado, se utilizarán varios trozos de papel de carta; cuando el contenido es demasiado pequeño, el número de palabras puede no ser tan grande como el del sobre. Y cuando tu novia reciba la carta, simplemente abre el sobre y podrás leer tu "pequeña carta de amor".

4. Sin mecanismo de congestión:

Una vez que la red está congestionada , la velocidad de envío del host de origen no se reducirá , lo cual es muy importante para algunas aplicaciones en tiempo real. Como teléfono IP, video en tiempo real, etc. Al mismo tiempo se permite cuando la red está congestionada perder algunos datos , pero no permite que los datos se demoren mucho .

Debido a que UDP no tiene un mecanismo de congestión, cuando demasiados hosts de origen envían datos en tiempo real de alta velocidad a la red al mismo tiempo, es probable que cause congestión y provoque la pérdida de datos. Para algunas aplicaciones en tiempo real, esta transmisión poco confiable se puede mejorar de manera apropiada y se pueden agregar algunas medidas de protección y reparación, como la corrección de errores hacia adelante o la retransmisión de paquetes perdidos .

5. No hay un sentido claro de cliente y servidor

Ambos pueden escribir y recibir cartas, no hay mucha diferencia entre los dos (el amor es originalmente mutuo ...).

6. Apoyar la comunicación interactiva uno a uno, uno a muchos, muchos a uno, muchos a muchos

  • Unicast: Unicast es un modo de comunicación uno a uno. El remitente debe especificar la IP y el puerto de la otra parte, y solo la máquina correspondiente puede recibir los datos enviados, y no tendrá ningún impacto en otras máquinas de la subred.
  • Multidifusión : la multidifusión es un modo de comunicación de uno a varios. Una máquina se comunica con parte de todas las máquinas de la subred. Todas estas máquinas pueden recibir los datos enviados por el host, pero las máquinas no especificadas en la subred no se ven afectadas.
  • Difusión : cuando la cantidad de máquinas en la multidifusión es la cantidad de todas las máquinas en la subred, la "multidifusión" en este momento ya no se denomina multidifusión, sino difusión. El protocolo ip estipula que la transmisión solo se puede realizar en una subred, pero no en una red de área amplia.
  • Multidifusión : de forma similar, la multidifusión también es un modo de comunicación de uno a varios. Después de que una máquina se une a una IP de multidifusión y luego envía datos a la IP de multidifusión, todas las máquinas de la multidifusión pueden recibir los datos.

 

7. La sobrecarga del encabezado es pequeña, solo 8 bytes

UDP consta de dos partes , una es el campo de encabezado y la otra es el campo de datos .
El campo de encabezado tiene solo 8 bytes y se divide en 4 campos :

  • Puerto de origen : número de puerto de origen. Elija cuándo necesita que la otra parte responda y use todo 0 cuando no lo necesite.
  • Puerto de destino : número de puerto de destino. Usado al final de la entrega.
  • Longitud : la longitud del datagrama de usuario udp, el valor mínimo es 8 (solo el encabezado).
  • Suma de comprobación : compruebe si hay algún error en la transmisión del datagrama de usuario udp y deséchelo si hay algún error.

Tres, comunicación de socket

De hecho, la forma de crear un socket es similar a la forma de leer y escribir archivos. ¿Todavía recuerdas cómo leer y escribir archivos? Recordemos juntos:

f  = open()   # 打开文件
f.read()/f.write()    #  对文件进行操作
f.close()   # 关闭文件   

Veamos la forma de crear un socket nuevamente:

1. Importe el módulo de socket

import socket

2. Crea un objeto socket (socket)

t = socket.socket(socket.AF_INET,sockeet.SOCK_DGRAM)

Al crear un socket, socket requiere dos parámetros socket (AddressFamily, Type)

AdressFamily : Puede elegir AF_INET (para la comunicación entre procesos de Internet) o AF_UNIX ( para la comunicación entre procesos en la misma máquina). En la práctica, AF_INET se usa comúnmente.
Tipo : Puede ser SOCK_STREAM (socket de flujo, usado principalmente para el protocolo TCP) o SOCK_DGRAM (conector de datagramas, que utiliza principalmente el protocolo UDP).

3. Vincular información local (vincular)

t.bind(("",5678))   #参数为一个含有两位元素的元组,第一个元素为本机ip,默认自动分配;第二个元素为端口号。

4. Utilice socket para recibir / enviar datos (recvfrom / sendto)

# 1.发送数据
data = ""   # 需要发送的数据
t.sendto(data.encode("转码"),("ip",port))   # 两个参数:参数1为传输数据,参数2为元组("目标ip",目标端口)

# 2.接收数据
recv _data, dest_ip_and_port = t.recvfrom(1024)   # 返回数据:数据内容,对方的(ip和端口号)

Cerrar el enchufe (cerrar)

t.close()  

¡Sígueme y diviértete con Python!

 

Supongo que te gusta

Origin blog.csdn.net/qq_45807032/article/details/105139292
Recomendado
Clasificación