¿Por qué los servicios populares que usan TCP tienen entradas UDP y TCP en / etc / services?


22

Estoy leyendo un libro sobre programación de redes con Go. Uno de los capítulos trata del archivo / etc / services. Algo que noté al explorar este archivo es que ciertas entradas populares como HTTP y SSH, que usan TCP en la capa de transporte, tienen una segunda entrada para UDP. Por ejemplo en Ubuntu 14.04:

ubuntu@vm1:~$ grep ssh /etc/services  
ssh             22/tcp         # SSH Remote Login Protocol 
ssh             22/udp

ubuntu@vm1:~$ grep http /etc/services  
http            80/tcp          www             # WorldWideWeb HTTP            
http            80/udp                          # HyperText Transfer Protocol

Alguien sabe por qué estos tienen dos entradas? No creo que SSH o HTTP usen UDP (confirmado por esta pregunta para SSH).


77
22/udpse eliminó en Debian en 2016. IANA todavía enumera 22 / udp y enumera udp y tcp para la mayoría de los protocolos que generalmente solo se implementan en cualquiera de ellos. ¿Podría ser que significa que 22 está reservado para ssh en caso de que alguien quiera implementar ssh sobre udp algún día?
Stéphane Chazelas

2
Ver también la sección 7.1 de rfc6335
Stéphane Chazelas

Respuestas:


29

Básicamente, se debe a que esa era la tradición desde cuando los números de puerto comenzaron a asignarse hasta aproximadamente el año 2011. Vea, por ejemplo, §7.1 "Principios anteriores" de RFC 6335 :

Los puertos TCP y UDP se asignaron simultáneamente cuando se solicitó

Es posible que algún día sean desasignados, ya que los puertos 1023 y siguientes son los "puertos del sistema", tratados especialmente por la mayoría de los sistemas operativos, y la mayoría de ese rango está asignado actualmente.

Y, por cierto, HTTP / 3 se ejecuta sobre UDP. Aunque puede usar cualquier puerto UDP, no solo 80/443. Así que realmente todavía no se usan.

En lo que se refiere a Debian, su /etc/servicesya tenían 22 / udp en 1,0 (zumbido 1996) .

Sin embargo, se eliminó en este commit en 2016, lanzado por primera vez en la versión 5.4 del netbasepaquete.

Al momento de escribir, la última versión estable de Debian (buster) tiene 5.6 . Y el último paquete de netbase Ubuntu LTS (18.04, bionic) está basado en Debian netbase 5.4 y puede ver que su registro de cambios también menciona la eliminación de udp / 22 .


44
@SergiyKolodyazhnyy Creo que no, ya que esta práctica es anterior a los firewalls.
derobert

3
@TobySpeight Eso no es solo Linux, es parte de los estándares relevantes. Ver, por ejemplo, §6 de ese RFC. Aunque la IANA también registra puertos más altos, son una clasificación diferente (y eso es importante en la práctica debido a cómo los sistemas operativos, no solo Linux, los tratan). Lo aclararé un poco. Además, 0 no es un puerto válido. La API de sockets lo utiliza como comodín (para indicarle al núcleo que elija un puerto para usted).
derobert

2
"0 no es un puerto válido" es cuestionable. Ciertamente no es un puerto utilizable en nuestro sistema operativo (es por eso que lo llamé específicamente, y por qué está actualmente reservado, y es poco probable que se le asigne nada), pero no es especial a nivel de protocolo.
Toby Speight

1
@derobert: Su argumento es que el puerto 0 no se puede usar en máquinas Unix porque el puerto 0 significa "elegir un puerto libre". Estoy diciendo que el argumento está mal. La conclusión no se sigue lógicamente de la premisa.
MSalters

3
Aunque puede usar cualquier puerto UDP, no solo 80/443 Eso es esencialmente cierto para cualquier protocolo TCP / UDP, estos son solo los puertos predeterminados asociados con cada uno. La mayoría de las aplicaciones que usan TCP y UDP no proporcionan una forma de especificar puertos no predeterminados, pero HTTP permite que se especifiquen en las URL, por lo que es más factible variar el puerto.
Barmar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.