Por que os serviços populares que usam TCP têm UDP e entradas TCP em / etc / services?

22

Estou lendo um livro sobre programação de rede com o Go. Um dos capítulos trata do arquivo / etc / services. Algo que notei ao explorar esse arquivo é que determinadas entradas populares como HTTP e SSH, que usam TCP na camada de transporte, têm uma segunda entrada para UDP. Por exemplo, no 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

Alguém sabe por que estes têm duas entradas? Não acredito que o SSH ou o HTTP use o UDP (confirmado por esta pergunta para o SSH).

sixty4bit
fonte
7
22/udpfoi removido no Debian em 2016. A IANA ainda lista 22 / udp e lista o udp e o tcp para a maioria dos protocolos que geralmente são implementados apenas em um deles. Pode ser que isso signifique 22 para o ssh, caso alguém queira implementar o ssh sobre o udp algum dia?
Stéphane Chazelas 25/09
2
Consulte também a seção 7.1 de rfc6335
Stéphane Chazelas

Respostas:

29

Basicamente, é porque essa era a tradição desde quando os números de porta começaram a ser atribuídos até aproximadamente 2011. Veja, por exemplo, §7.1 “Princípios Passados” da RFC 6335 :

As portas TCP e UDP foram atribuídas simultaneamente quando uma delas foi solicitada

É possível que eles sejam desalocados algum dia, é claro, já que as portas 1023 e abaixo são as "portas do sistema", tratadas especialmente pela maioria dos sistemas operacionais, e a maior parte desse intervalo está atualmente atribuída.

E, a propósito, o HTTP / 3 funciona com UDP. Embora possa usar qualquer porta UDP, não apenas 80/443. Então, esses ainda não foram utilizados.

No que diz respeito ao Debian, ele /etc/servicesjá tinha 22 / udp em 1.0 (buzz 1996) .

No entanto, foi removido neste commit em 2016, lançado pela primeira vez na versão 5.4 do netbasepacote.

Até o momento, a versão estável mais recente do Debian (buster) possui a versão 5.6 . E o último pacote netbase do Ubuntu LTS (18.04, biônico) é baseado no Debian netbase 5.4 e você pode ver que o seu log de alterações também menciona a remoção do udp / 22 .

derobert
fonte
4
@SergiyKolodyazhnyy Eu acho que não, pois essa prática é anterior aos firewalls.
derobert 25/09
3
@TobySpeight Isso não é apenas Linux, faz parte dos padrões relevantes. Veja, por exemplo, o §6 dessa RFC. Embora a IANA também registre portas mais altas, elas são uma classificação diferente (e isso importa na prática por causa de como os sistemas operacionais, e não apenas o Linux, as tratam). Vou esclarecer um pouco. Além disso, 0 não é uma porta válida. É usado pela API sockets como um curinga (para dizer ao kernel para escolher uma porta para você).
derobert 26/09
2
"0 não é uma porta válida" é questionável. Certamente não é uma porta utilizável em nosso sistema operacional (e foi por isso que eu a chamei especificamente, e por que ela está atualmente reservada e é improvável que seja atribuída a qualquer coisa), mas não é especial no nível do protocolo.
Toby Speight
1
@derobert: Seu argumento é que a porta 0 não pode ser usada em máquinas Unix porque a porta 0 significa "escolha uma porta livre". Estou dizendo que o argumento está errado. A conclusão não segue logicamente da premissa.
MSalters 26/09
3
Embora possa usar qualquer porta UDP, não apenas 80/443 Isso é essencialmente verdadeiro para qualquer protocolo TCP / UDP, mas essas são apenas as portas padrão associadas a cada uma. A maioria dos aplicativos que usam TCP e UDP não fornece uma maneira de especificar portas não padrão, mas o HTTP permite que sejam especificadas em URLs, por isso é mais viável variar a porta.
Barmar 26/09