Linux

為什麼流行的使用 TCP 的服務在 /etc/services 中有 UDP 和 TCP 條目?

  • September 26, 2019

我正在閱讀一本關於使用 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)。

基本上,這是因為這是從開始分配埠號直到大約 2011 年的傳統。例如,參見RFC 6335§7.1 “過去的原則”

請求時同時分配 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, bionic) netbase 包是基於 Debian netbase 5.4 的,你可以看到它的更新日誌還提到了刪除 udp/22

引用自:https://unix.stackexchange.com/questions/543724