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

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

我正在读一本关于使用 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)。

答案1

基本上,这是因为从很久以前开始分配端口号一直到 2011 年左右,这都是传统。请参见,例如,§7.1“过去的原则”RFC 6335:

当请求任一端口时,同时分配 TCP 和 UDP 端口

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

顺便说一句,HTTP/3 运行在 UDP 之上。尽管它可以使用任何 UDP 端口,而不仅仅是 80/443。所以实际上这些仍然没有被使用。

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

然而它被删除了这次提交2016年,首次发布5.4版本的netbase软件包。

截至撰写本文时,Debian 的最新稳定版本(buster)有5.6。以及最新的 Ubuntu LTS(18.04,仿生)网络基础包基于Debian netbase 5.4,你可以看到它的变更日志还提到删除了 udp/22

相关内容