Goを使ったネットワークプログラミングに関する本を読んでいます。章の1つは/ etc/servicesファイルを扱います。このファイルを調べているときに気付いたのは、トランスポート層でTCPを使用するHTTPやSSHなどの特定の一般的なエントリに、UDPの2番目のエントリがあることです。たとえば、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
これらに2つのエントリがある理由を誰かが知っていますか? SSHまたはHTTPがUDPを使用することはないと思います(SSHの場合 この質問 で確認)。
基本的に、それはポート番号が割り当てられ始めたときから2011年頃までの伝統だったからです。たとえば、 §7.1「過去の原則」RFC 6335 を参照してください。 :
TCPおよびUDPポートは、どちらかが要求されたときに同時に割り当てられました
もちろん、ポート1023以下は「システムポート」であり、ほとんどのオペレーティングシステムで特別に扱われ、その範囲のほとんどが現在割り当てられているため、いつかは割り当てが解除される可能性があります。
ちなみに、HTTP/3はUDP上で実行されます。 80/443だけでなく、任意のUDPポートを使用できます。したがって、実際にはまだ使用されていません。
Debianに関する限り、 その/etc/services
1.0(buzz 1996)にはすでに22/udpがありました 。
ただし、2016年に this commit で削除され、netbase
パッケージのバージョン5.4で最初にリリースされました。
執筆時点では、Debianの最新の安定バージョン(buster) 5.6を持っています です。そして最新のUbuntu LTS(18.04、bionic) netbaseパッケージ はDebianネットベース5.4に基づいており、 その変更ログにはudp/22の削除も記載されています を確認できます。