six*_*bit 22 linux networking services protocols
我正在阅读一本关于使用 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
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这些有两个条目?我不相信 SSH 或 HTTP 曾经使用过 UDP(这个问题证实了 SSH)。
der*_*ert 29
基本上,这是因为这是从归途的传统时,端口号开始被通过,直到2011年左右见,例如,分配§7.1“过去原理”的RFC 6335:
TCP 和 UDP 端口在被请求时同时分配
当然,它们可能有一天会被取消分配,因为端口 1023 及以下是“系统端口”,被大多数操作系统特别对待,并且当前分配了该范围的大部分。
而且,顺便说一下,HTTP/3 在 UDP 上运行。虽然它可以使用任何 UDP 端口,而不仅仅是 80/443。所以实际上那些仍然未使用。
就 Debian 而言,它/etc/services在 1.0 (buzz 1996) 中已经有了 22/udp。
然而,它在 2016年的这次提交中被删除,首先在netbase包的5.4 版中发布。
在撰写本文时,Debian (buster) 的最新稳定版本有 5.6 . 最新的 Ubuntu LTS(18.04,仿生)netbase 包基于 Debian netbase 5.4,你可以看到它的更新日志也提到了 udp/22 的删除。