Mengapa layanan populer yang menggunakan TCP memiliki UDP dan juga entri TCP di / etc / services?

22

Saya membaca buku tentang pemrograman jaringan dengan Go. Salah satu bab berkaitan dengan file / etc / services. Sesuatu yang saya perhatikan ketika menjelajahi file ini adalah entri populer tertentu seperti HTTP dan SSH, keduanya menggunakan TCP pada layer transport, memiliki entri kedua untuk UDP. Misalnya pada 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

Adakah yang tahu mengapa ini memiliki dua entri? Saya tidak percaya SSH atau HTTP pernah menggunakan UDP (dikonfirmasi oleh pertanyaan ini untuk SSH).

sixty4bit
sumber
7
22/udpdihapus di Debian pada 2016. IANA masih mencantumkan 22 / udp dan mencantumkan udp dan tcp untuk sebagian besar protokol yang biasanya hanya diterapkan pada salah satu dari mereka. Mungkin saja itu berarti 22 dicadangkan untuk ssh jika seseorang ingin menerapkan ssh over udp suatu hari?
Stéphane Chazelas
2
Lihat juga bagian 7.1 dari rfc6335
Stéphane Chazelas

Jawaban:

29

Pada dasarnya, itu karena itu adalah tradisi dari jalan kembali ketika nomor port mulai ditugaskan melalui sampai sekitar 2011. Lihat, misalnya, §7.1 “Past Prinsip” dari RFC 6335 :

Port TCP dan UDP secara bersamaan ditugaskan ketika salah satu diminta

Mungkin saja mereka tidak akan dialokasikan suatu hari nanti, tentu saja, karena port 1023 dan di bawahnya adalah "port sistem", yang diperlakukan secara khusus oleh sebagian besar sistem operasi, dan sebagian besar dari jangkauan itu saat ini ditetapkan.

Dan, omong-omong, HTTP / 3 berjalan di atas UDP. Meskipun dapat menggunakan port UDP, tidak hanya 80/443. Jadi sebenarnya itu masih belum digunakan.

Sejauh Debian yang bersangkutan, yang /etc/servicessudah memiliki 22 / udp di 1.0 (dengungan 1996) .

Namun itu dihapus dalam komit ini pada tahun 2016, pertama kali dirilis dalam versi 5.4 netbasepaket.

Pada saat penulisan, versi stabil terbaru dari Debian (buster) memiliki 5.6 . Dan paket netbase Ubuntu LTS (18.04, bionic) terbaru didasarkan pada Debian netbase 5.4 dan Anda dapat melihat changelognya juga menyebutkan penghapusan udp / 22 .

derobert
sumber
4
@SergiyKolodyazhnyy saya pikir tidak, karena praktik ini sebelum firewall.
derobert
3
@TobySpeight Itu bukan hanya Linux, itu bagian dari standar yang relevan. Lihat, misalnya, §6 dari RFC itu. Meskipun IANA juga mendaftarkan port yang lebih tinggi, mereka adalah klasifikasi yang berbeda (dan yang penting dalam praktik karena bagaimana OS, bukan hanya Linux, memperlakukan mereka). Saya akan menjelaskan sedikit. Juga, 0 bukan port yang valid. Ini digunakan oleh sockets API sebagai wildcard (untuk memberitahu kernel untuk memilih port untuk Anda).
derobert
2
"0 bukan port yang valid" dipertanyakan. Ini tentu saja bukan port yang dapat digunakan pada OS kami (itulah sebabnya saya menyebutnya secara khusus, dan mengapa saat ini dicadangkan, dan tidak mungkin ditugaskan untuk apa pun), tetapi itu tidak khusus di tingkat protokol.
Toby Speight
1
@derobert: Argumen Anda adalah bahwa port 0 tidak dapat digunakan pada mesin Unix karena port 0 berarti "pilih porta bebas". Saya mengatakan bahwa argumennya salah. Kesimpulannya tidak mengikuti secara logis dari premis.
MSalters
3
Meskipun dapat menggunakan port UDP apa pun, tidak hanya 80/443 Itu pada dasarnya berlaku untuk semua protokol TCP / UDP, ini hanya port default yang terkait dengan masing-masing. Sebagian besar aplikasi yang menggunakan TCP dan UDP tidak menyediakan cara untuk menentukan port non-default, tetapi HTTP memungkinkannya untuk ditentukan dalam URL sehingga lebih layak untuk memvariasikan port.
Barmar