Чому популярні служби, що використовують TCP, мають UDP, а також записи TCP в / etc / services?


22

Я читаю книгу про мережеве програмування з 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).


7
22/udpбуло видалено в Debian в 2016 році. IANA все ще перераховує 22 / udp та перераховує як udp, так і tcp для більшості протоколів, які зазвичай реалізуються лише на одному з них. Чи може бути так, що це означає, що 22 зарезервовано для ssh на випадок, якщо хтось хоче впровадити ssh над udp якийсь день?
Стефан Шазелас

2
Дивіться також розділ 7.1 of rfc6335
Stéphane Chazelas

Відповіді:


29

В основному, це тому , що була традиція від шляху назад , коли номери портів почали бути призначені через приблизно до 2011. Див, наприклад, §7.1 «Past принципів» в RFC 6335 :

Порти TCP та UDP одночасно були призначені, коли запитували будь-який

Можливо, колись вони не будуть виділені, оскільки порти 1023 і нижче - це "порти системи", які спеціально обробляються більшістю операційних систем, і більша частина цього діапазону наразі призначається.

І, до речі, HTTP / 3 працює над UDP. Хоча він може використовувати будь-який порт UDP, а не лише 80/443. Тож справді вони все ще не використовуються.

Що стосується Debian, то його /etc/servicesвже було 22 / udp в 1.0 (buzz 1996) .

Однак він був знятий з цього зобов'язання в 2016 році, вперше випущений у версії 5.4 netbaseпакета.

На написання, остання стабільна версія Debian (buster) має 5,6 . І останній пакет Ubuntu LTS (18.04, біонічний) мережевий пакет базується на Debian netbase 5.4, і ви можете побачити, що його список змін також згадує про видалення udp / 22 .


4
@SergiyKolodyazhnyy Думаю, що ні, оскільки ця практика передує брандмауерам.
дероберт

3
@TobySpeight Це не лише Linux, це частина відповідних стандартів. Див., Наприклад, §6 цього RFC. Хоча IANA також реєструє більш високі порти, вони є різною класифікацією (і це має значення на практиці через те, як ОС, а не лише Linux ставляться до них). Я трохи уточню. Також 0 не є дійсним портом. API сокетів використовується як підстановочна карта (щоб сказати ядру вибрати порт для вас).
дероберт

2
"0 недійсний порт" сумнівний. Це, звичайно, не корисний порт нашої ОС (саме тому я його спеціально зателефонував, і чому він наразі зарезервований, і навряд чи призначений для чого-небудь), але це не є особливим на рівні протоколів.
Toby Speight

1
@derobert: Ваш аргумент полягає в тому, що порт 0 не застосовується на машинах Unix, оскільки порт 0 означає "вибрати вільний порт". Я кажу, що аргумент неправильний. Висновок логічно не випливає з передумови.
MSalters

3
Хоча він може використовувати будь-який порт UDP, а не лише 80/443 Це, по суті, стосується будь-якого протоколу TCP / UDP протоколу, це лише порти за замовчуванням, пов'язані з кожним. Більшість додатків, які використовують TCP та UDP, не надають способу вказувати порти, що не використовуються за замовчуванням, але HTTP дозволяє визначати їх у URL-адресах, тому можливіше змінювати порт.
Бармар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.