Cómo saber si un protocolo usa TCP o UDP

9

Bueno, sé que puede sonar una pregunta estúpida y creo que la respuesta más adecuada será la que pueda decir a medida que mi experiencia se acumula y aprendo más y más sobre los protocolos.

Sin embargo, soy estudiante y no tengo mucha experiencia práctica en el campo. Aunque puedo buscar en Google cualquier protocolo dado, quiero saber si hay alguna regla general. Todavía siento que pedir una "regla general" es estúpido, pero aún estoy buscando una.

Encontré esta lista en wikipedia que enumera los protocolos y si usan TCP o UDP en formato tabular. Sin embargo, no puedo entender lo que significa cuando la fila de un protocolo particular contiene TCP y UDP con un solo número de puerto. Por ejemplo, en la fila Telnet, tiene 23-TCP-UDP. ¿Qué significa esto? ¿Telnet puede funcionar tanto en el puerto TCP 23 como en el puerto UDP 23?

También descubrí que en mi libro de texto, dice que TFTP usa UDP, pero si miramos en la tabla anterior, la línea TFTP es 69-TCP-UDP. Tan solo adivinando qué está pasando en la tabla anterior.

Maha
fuente

Respuestas:

9

Hiciste una buena pregunta. No dejes que nadie te diga lo contrario.

Lamentablemente, no existe una regla general para los tipos de protocolos que usan TCP y los tipos de protocolos que usan UDP.

La decisión de si un protocolo usa uno u otro se reduce a quien escribió / creó el protocolo, para empezar.

Si no quisieron molestarse en escribir su propio sistema de "entrega confiable", entonces simplemente pueden usar TCP que proporciona toda la confiabilidad de forma innata.

Si pensaban (conociendo su propio protocolo de forma innata) que podían escribir un sistema de "entrega confiable" mejor o más apropiado, entonces podrían incorporarlo en el protocolo y simplemente usar UDP como su transporte.

Como ejemplo, eche un vistazo a una captura de muestra UDP TFTP , notará que hay sistemas de reconocimiento incorporados dentro de TFTP en sí mismo; tener esos y los sistemas de reconocimiento adicionales dentro de TCP simplemente serían redundantes.

Mientras que FTP, que se ejecuta sobre TCP, no tiene un sistema de reconocimiento incorporado. Un usuario simplemente solicita un archivo y el remitente lo envía. Hay una notificación de "transferencia de archivo completa", pero nada que garantice haber recibido cada bit del archivo. FTP depende de la confiabilidad de TCP para garantizar que el archivo se transmita completamente.

Dicho esto, miré a través de la lista de puertos en la página wiki que vinculaste y vi una sorprendente cantidad de protocolos que supuestamente usan TCP y UDP. Esto era extraño para mí, y solo sé de muy pocos que usan ambos (es decir, DNS). Pero puede ser que haya una implementación TFTP que use TCP, y si es así, me temo que no estoy expuesto a ella.

El Sistema de nombres de dominio (DNS) es tradicionalmente el protocolo al que se hace referencia cuando se discuten protocolos que usan TCP y UDP. No los usa al mismo tiempo, eso sí. Pero diferentes funciones dentro de DNS pueden requerir TCP vs UDP.

Por ejemplo, cuando se realiza una solicitud simple de resolución de registro A, la "solicitud" y la "respuesta" son muy ligeras, y ambas requieren un único paquete. Como tal, esto generalmente se hace a través de UDP.

Pero si una solicitud o respuesta requiere una transferencia mayor (por encima de una cierta cantidad de bytes), entonces DNS elige usar TCP para garantizar que "todos los bits" lleguen allí. Esto es común con las solicitudes completas de transferencia de zona.

Eddie
fuente
2
Sí, + 1, las consultas DNS consisten en una única solicitud UDP del cliente seguida de una única respuesta UDP del servidor. El Protocolo de control de transmisión (TCP) se utiliza cuando el tamaño de los datos de respuesta supera los 512 bytes o para tareas como las transferencias de zona.
Ijaz Ahmad Khan
@IjazKhan, ya no hay tal distinción. Consulte RFC 7766 : " Este documento especifica el requisito de soporte de TCP como protocolo de transporte para implementaciones de DNS y proporciona pautas para el rendimiento de DNS sobre TCP a la par que el de DNS sobre UDP. Este documento obsoleto RFC 5966 y por lo tanto se actualiza RFC 1035 y RFC 1123. "y" Este documento, por lo tanto, actualiza las especificaciones básicas del protocolo DNS de modo que el soporte para TCP es en adelante una parte REQUERIDA de una implementación completa del protocolo DNS " .
Ron Maupin
6

La página de Wikipedia no es la mejor. IANA mantiene el registro para los números de puerto (tenga cuidado, actualmente es de 138 páginas): Nombre del servicio y registro del número de puerto del protocolo de transporte

Un protocolo de capa de aplicación es libre de usar cualquier protocolo de capa de transporte y número de puerto. Por convención, la mayoría usa números de puerto específicos en el registro, pero eso no significa que tampoco puedan usar otros. Por ejemplo, un servidor web usará de manera predeterminada el puerto TCP 80, pero se puede configurar para usar cualquier otro número de puerto, y un navegador web aún puede usarlo si se le da el número de puerto en el URI.

Hay muchas aplicaciones que se pueden configurar para usar TCP o UDP, y los números de puerto se pueden cambiar. Esto ofrece cierta flexibilidad cuando se trata de conflictos e implementaciones extrañas.

Ron Maupin
fuente
5

En la vida real, encontrará que es muy fácil saber qué protocolo de transporte se utiliza. Además, si está buscando una "regla de oro", piense en esto:

UDP es un protocolo 'sin conexión' / poco confiable, no recupera paquetes perdidos como lo hace TCP, y tiene mucho menos sobrecarga que TCP, por lo que se usa como transporte para aplicaciones que son sensibles al retraso (como la transmisión de audio / video).

TCP es un protocolo 'orientado a la conexión' / confiable, recupera paquetes cuando se pierden y tiene una sobrecarga mayor, pero se usa donde la pérdida de paquetes podría causar problemas.

Aquí hay una serie de métodos que puede usar para determinar en la vida real qué protocolo de capa de transporte está usando una aplicación:

  • Ejecutar netstat -andesde un símbolo del sistema de Windows.
  • Descargue y ejecute TCPView (que también enumera UDP) para una vista GUI.
  • Run Wireshark
  • Ejecutar nmapen el servidor con el puerto en cuestión (de forma predeterminada solo escanea los puertos TCP)
carmesí
fuente
0

La fuente de la lista de Wikipedia parece ser principalmente https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt con la línea ocasional actualizada basada en referencias específicas del protocolo.

Parece que para las asignaciones anteriores, los números de puerto TCP y UDP se asignaron a un protocolo, incluso si el protocolo solo usaba uno u otro. Por ejemplo, FTP tiene entradas en la tabla IANA para TCP y UDP. Estas entradas hacen referencia a RFC 959 pero RFC 959 no menciona a UDP.

En general, el recurso de referencia para descubrir qué protocolos subyacentes utiliza realmente un protocolo de aplicación sería el estándar que define el protocolo.

Algunos protocolos pueden usar TCP o UDP a elección del usuario (por ejemplo, NFS) o según los detalles de la solicitud (por ejemplo, DNS)

Peter Green
fuente