Pueden TCP y UDP vincular el mismo puerto al mismo tiempo? Antes de responder a esta pregunta, primero debemos comprender qué son TCP y UDP y qué son los puertos de red.
Introducción a TCP y UDP
TCP y UDP son dos protocolos independientes de IP (Protocolo de Internet). Ambos funcionan en la capa de red en el modelo OSI. La mayor diferencia entre TCP y UDP está orientada a conexión y sin conexión.
Cuando la confiabilidad de los datos que deben transmitirse es muy importante, generalmente usamos TCP para la transmisión, porque los datos transmitidos por el protocolo TCP se transmiten en secuencia. Si el receptor de datos no recibe los datos transmitidos por el remitente, TCP reenviará el paquete después de un tiempo específico. Esto es lo que a menudo llamamos mecanismo de retransmisión de pérdida de paquetes, así como control de congestión, control de flujo, etc. La confiabilidad de TCP se debe precisamente a estas características.
UDP (Protocolo de datagramas de usuario) es un servicio sin conexión. Los datos UDP no se transmitirán en orden como TCP. El receptor no retransmitirá los datos independientemente de si se han recibido o no. Por lo tanto, UDP tiene un rendimiento inferior que TCP. UDP se usa más comúnmente en aplicaciones donde la prioridad del tiempo es mayor que la confiabilidad de los datos, como videollamadas diarias, juegos en línea, etc. Porque para estas aplicaciones, el tiempo es más importante que la coherencia de los datos.
Qué es un puerto de red? Qué hace el puerto?
Hay muchos programas de comunicación en nuestras computadoras. Después de que nuestras computadoras reciben paquetes de datos, cómo los distribuyen con precisión a diferentes aplicaciones? Podemos entenderlo de esta manera: la dirección IP en la red es equivalente al nombre de la comunidad en nuestra vida real y el número de puerto es como el número de casa específico.
La función del puerto es permitir que varios procesos de aplicación en la capa de aplicación entreguen sus datos hacia abajo a la capa de transporte a través del puerto, y hacerle saber a la capa de transporte que los datos en sus segmentos de mensajes deben entregarse hacia arriba a la capa de aplicación. proceso a través del puerto. Para distinguir los puertos, cada puerto está numerado, que es el número de puerto. Cuando enviamos datos de un dispositivo a otro, van a un puerto TCP o UDP concreto, dependiendo del protocolo que utilicemos para comunicarnos.
Se pueden vincular los sockets TCP y UDP al mismo puerto?
Tanto las redes de servidores TCP como UDP llamarán a bind para vincular el puerto.
programación de red tcp
programación de red UDP
Los puertos TCP y UDP no están relacionados entre sí. Los puertos TCP son interpretados por la pila TCP, mientras que los puertos UDP son interpretados por la pila UDP. Los puertos son una forma de multiplexar conexiones para que varios dispositivos puedan conectarse a un solo nodo. Entonces, técnicamente hablando, los protocolos de nivel superior pueden usar números de puerto TCP y UDP iguales o diferentes. Por otro lado, una computadora puede comunicarse con dos servicios diferentes utilizando los mismos números de puerto TCP y UDP al mismo tiempo.
Como se muestra en la figura anterior, los números de puerto de TCP/UDP son independientes entre sí. TCP tiene un número de puerto 80 y UDP también puede tener un número de puerto 80. No hay conflicto entre los dos.
Por lo tanto, TCP y UDP se pueden vincular al mismo puerto al mismo tiempo.
Los protocolos de transporte TCP y UDP se implementan en el kernel mediante dos módulos de software completamente independientes.
Cuando el host recibe el paquete de datos, puede saber si el paquete de datos es TCP o UDP en el campo "Número de protocolo" del encabezado IP, de modo que puede determinar a qué módulo (TCP/UDP) enviarlo para su procesamiento según esta información y la envía al módulo TCP/UDP. El paquete se envía a qué aplicación se determina en función del "número de puerto" para su procesamiento.
Por lo tanto, los respectivos números de puerto de TCP/UDP también son independientes entre sí y no se afectan entre sí.
Se puede reutilizar el puerto del cliente?
El kernel permite la reutilización de puertos siempre que el cliente no esté conectado al mismo servidor. Una conexión TCP se confirma de forma única mediante una tupla de cuatro (dirección IP de origen, puerto de origen, dirección IP de destino, puerto de destino). Si algún elemento de la tupla de cuatro cambia, representa una conexión TCP diferente.
Si el cliente usa el puerto 1 para establecer una conexión con el servidor A, el cliente también puede usar el puerto 1 para establecer una conexión con el servidor B. Incluso si el número de puerto del cliente es el mismo, el cambio en la información cuádruple no provocará una conexión. conflicto.
Se pueden vincular varios procesos de servicio TCP al mismo puerto?
Si varios procesos de servicio TCP vinculan la misma dirección IP y puerto al mismo tiempo, se informará el error "Dirección ya en uso" al ejecutar bind() si el proceso de servicio TCP solo vincula el mismo puerto, pero las direcciones IP vinculadas; son diferentes, entonces no se informará ningún error.