为什么流行的使用TCP的服务在/ etc / services中具有UDP以及TCP条目?


22

我正在读一本关于使用Go进行网络编程的书。其中一章介绍/ etc / services文件。我在浏览此文件时注意到的是,某些流行的条目(例如HTTP和SSH)在传输层都使用TCP,而第二个条目则是UDP。例如在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

谁知道为什么有两个条目?我不认为SSH或HTTP曾经使用过UDP(对于SSH ,此问题已得到确认)。


7
22/udp于2016年在Debian中被删除。IANA仍列出22 / udp,并列出大多数通常仅在其中任一协议上实现的大多数协议的udp和tcp。难道就意味着如果某天想通过udp实现ssh,它就为ssh保留了22个?
斯特凡·查泽拉斯

2
另请参见7.1节rfc6335
斯特凡Chazelas

Answers:


29

基本上,这是因为这是从归途的传统时,端口号开始被通过,直到2011年左右见,例如,分配§7.1“过去原理”RFC 6335

当请求TCP和UDP端口同时被分配时

当然,有一天它们可能会被取消分配,因为端口1023及以下是“系统端口”,大多数操作系统已对其进行特殊处理,并且当前已分配了该范围中的大多数。

而且,顺便说一下,HTTP / 3在UDP上运行。尽管它可以使用任何UDP端口,但不仅可以使用80/443。因此,实际上那些仍未使用。

就Debian而言,/etc/services在1.0中已经具有22 / udp(buzz 1996)

但是,在2016年的提交中已被删除,netbase软件包的版本5.4首次发布。

在撰写本文时,最新的Debian稳定版(buster)具有5.6。而最新的Ubuntu LTS(18.04,仿生)netbase软件包是基于Debian netbase 5.4的,您可以看到它的changelog还提到了udp / 22的删除


4
@SergiyKolodyazhnyy我认为不是,因为这种做法早于防火墙。
derobert

3
@TobySpeight不只是Linux,它还是相关标准的一部分。参见,例如,该RFC的§6。尽管IANA还注册了更高的端口,但它们是不同的分类(在实践中,这很重要,因为OS不仅限于Linux如何对待它们)。我会澄清一下。另外,0不是有效端口。套接字API将其用作通配符(告诉内核为您选择端口)。
derobert

2
“ 0不是有效的端口”是有问题的。它在我们的操作系统上肯定不是可用的端口(这就是为什么我专门对其进行了命名,以及为什么当前对其进行了保留,并且不太可能分配给任何东西)的原因,但是在协议级别上并不是特殊的。
Toby Speight

1
@derobert:您的论点是端口0在Unix机器上不可用,因为端口0表示“选择一个空闲端口”。我是说论点是错误的。该结论并非从逻辑上得出前提。
MSalters

3
尽管它可以使用任何UDP端口,而不仅仅是80/443端口,但实际上它可以使用任何UDP / UDP协议端口。大多数使用TCP和UDP的应用程序都不提供指定非默认端口的方法,但是HTTP允许在URL中指定它们,因此更改端口更为可行。
巴尔马尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.