Introducción al protocolo de red IP 22TCP-Capa de transporte: protocolo UDP
A menudo hay varios procesos de aplicación en el host que se comunican con el mundo exterior al mismo tiempo (por ejemplo, su navegador y QQ se ejecutan al mismo tiempo). En la siguiente figura, el proceso AP1 del host A se comunica con el proceso AP3 del host B, y el proceso AP2 del host A también se comunica con el proceso AP4 del host B.
Hay un espacio entre las capas de transporte de los dos hosts. Una flecha gris de dos puntas que dice "La capa de transporte proporciona comunicación lógica entre los procesos de aplicación".
Comunicación lógica: parece que los datos se transmiten horizontalmente a lo largo de la flecha bidireccional en la capa de transporte, pero en realidad se transmiten a través de múltiples capas de protocolo a lo largo de la línea de puntos en la figura.
La capa de transporte de la pila de protocolos TCP/IP tiene dos protocolos importantes: UDP y TCP. Diferentes procesos de aplicaciones utilizan TCP o UDP en la capa de transporte.
En la primera sección ya hemos entendido el concepto de puerto, y el papel del puerto se refleja en la capa de transporte.
En la figura de ahora, la comunicación entre AP1 y AP3 y la comunicación entre AP2 y AP4 se pueden transmitir a través del mismo protocolo de capa de transporte (TCP o UDP). Los datos solo se pueden transferir al host correcto según la dirección IP o la dirección MAC, mientras que el puerto identifica qué proceso debe transferirse.
Por ejemplo, si usa un navegador y QQ al mismo tiempo, el navegador ocupa 80 puertos y QQ ocupa 4000 puertos, entonces los mensajes QQ enviados se mostrarán en el cliente QQ a través de 4000 puertos, sin cualquier error mostrado en el navegador.
Los números de puerto van del 0 al 65535, donde:
Los números del 0 al 1023 son números de puerto del sistema. Estos números de puerto se pueden encontrar en www.iana.org y están asignados a algunas de las aplicaciones TCP/IP más importantes. Los siguientes son algunos números de puertos comunes del sistema:
Utilice el comando netstat -luant a continuación para enumerar los puertos de escucha:
Puede ver que todos son protocolos TCP. Pero más adelante escribiremos un programa para simular el envío de paquetes UDP y usaremos la herramienta tcpdump para capturar los paquetes para ayudar a todos a comprender el protocolo UDP.
UDP (Protocolo de datagramas de usuario) El protocolo de datagramas de usuario solo agrega algunas funciones al servicio de datagramas IP. Las características principales son las siguientes:
UDP no tiene conexión, no es necesario. establezca una conexión antes de enviar datos (como TCP), lo que reduce la sobrecarga y el retraso.
UDP utiliza la entrega con el mejor esfuerzo y no garantiza la confiabilidad de la entrega.
UDP está orientado a mensajes. Para los datagramas IP enviados desde la capa de aplicación, solo se realiza una encapsulación muy simple (encabezado UDP de 8 bytes) y la sobrecarga del encabezado es muy pequeña.
UDP no tiene control de congestión. Cuando se produce una congestión en la red, el remitente no reducirá la velocidad de envío. Esta característica es muy importante para algunas aplicaciones en tiempo real, como telefonía IP, videoconferencias, etc. Permiten que algunos datos se pierdan en la congestión porque si estos datos no se descartan, existe una alta probabilidad de que se acumule latencia.
UDP admite comunicaciones interactivas uno a uno, uno a muchos, muchos a uno y muchos a muchos.
Encapsulación en todos los niveles, desde la capa de aplicación hasta la capa de transporte y la capa de red;
El datagrama UDP se puede dividir en dos partes: encabezado UDP y parte de datos. La parte de datos son los datos pasados por la capa de aplicación. El encabezado UDP tiene *** 8 bytes y estos 8 bytes se dividen en 4 campos:
Este programa en C enviará un mensaje de "hola" al puerto 7777 con la dirección IP 192.168.1. Puede utilizar el editor para modificar el programa y enviar contenido diferente a diferentes IP.
No lo ejecutes después de compilarlo. También necesitamos usar una conocida herramienta de captura de paquetes, tcpdump. Ingrese los siguientes comandos para instalar y ejecutar tcpdump:
Abra una nueva terminal e ingrese los siguientes comandos para ejecutar la prueba del programa C recién compilado. :
Después de que se ejecute el programa de prueba, regrese a la terminal donde se acaba de ejecutar tcpdump y verifique los resultados de la captura de paquetes:
El cuadro azul es el puerto de destino en 16, el cuadro verde es la IP de destino en 16, y el cuadro rojo es el encabezado IP de 20 bytes, el subrayado naranja es el encabezado UDP de 8 bytes y el subrayado rojo es el código ASCII de saludo.
De 4500 a 0101 son todos encabezados IP. El paquete IP se ha mencionado antes y no se repetirá aquí. La segunda mitad es el mensaje UDP.
Sabemos que el encabezado UDP tiene *** 8 bytes, por lo que eb39 a ac82 son parte del encabezado UDP.
Eb39: Puerto de origen, 2 bytes, convertido a decimal, es 32830.
1e61: Puerto de destino, 2 bytes, decimal 7777.
001c: Longitud del paquete de datos, en bytes. Si se utiliza decimal, la longitud del paquete es de 28 bytes.
Ac82: Suma de comprobación
A continuación se muestra el código ASCII del contenido de los datos.
Utiliza tcpdump para obtener datagramas UDP e interpretar los mensajes.
Modifica el programa C para enviar diferentes contenidos a diferentes IP y diferentes puertos.