Dlaczego popularne usługi wykorzystujące TCP mają UDP, a także wpisy TCP w / etc / services?


22

Czytam książkę o programowaniu sieciowym za pomocą Go. Jeden z rozdziałów dotyczy pliku / etc / services. Podczas eksploracji tego pliku zauważyłem, że niektóre popularne wpisy, takie jak HTTP i SSH, oba używające TCP w warstwie transportowej, mają drugi wpis dla UDP. Na przykład w 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

Czy ktoś wie, dlaczego mają dwa wpisy? Nie sądzę, aby SSH lub HTTP kiedykolwiek używały UDP (potwierdzone tym pytaniem dla SSH).


7
22/udpzostał usunięty w Debianie w 2016 r. IANA wciąż wyświetla listę 22 / udp i wyświetla listę zarówno udp, jak i tcp dla większości protokołów, które zwykle są implementowane tylko na jednym z nich. Czy to możliwe, że oznacza to, że 22 jest zarezerwowane dla ssh na wypadek, gdyby ktoś chciał kiedyś zaimplementować ssh over udp?
Stéphane Chazelas

2
Patrz także sekcja 7.1 rfc6335
Stéphane Chazelas,

Odpowiedzi:


29

Zasadniczo, to dlatego, że była tradycja z drodze powrotnej, gdy numery portów zaczęto przydzielony przez aż około 2011. Patrz, na przykład, §7.1 „Past” Zasad z RFC 6335 :

Porty TCP i UDP były jednocześnie przypisywane, gdy jedno z nich było wymagane

Możliwe, że kiedyś zostaną one nieprzydzielone, ponieważ porty 1023 i poniżej są „portami systemowymi”, traktowanymi specjalnie przez większość systemów operacyjnych, a większość z tego zakresu jest obecnie przypisana.

Nawiasem mówiąc, HTTP / 3 działa na UDP. Chociaż może korzystać z dowolnego portu UDP, nie tylko 80/443. Więc naprawdę te są nadal nieużywane.

Jeśli chodzi o Debian jest zaniepokojony, jego /etc/servicesjuż 22 / udp w 1,0 szumu (1996) .

Został jednak usunięty w tym zatwierdzeniu w 2016 r., Po raz pierwszy wydany w wersji 5.4 netbasepakietu.

W chwili pisania najnowsza stabilna wersja Debiana (buster) ma 5.6 . A najnowszy pakiet netbase Ubuntu LTS (18.04, bionic) jest oparty na netbase Debiana 5.4 i widać, że jego dziennik zmian wspomina również o usunięciu udp / 22 .


4
@SergiyKolodyazhnyy Nie sądzę, ponieważ ta praktyka poprzedza zapory ogniowe.
derobert

3
@TobySpeight To nie tylko Linux, to część odpowiednich standardów. Patrz np. §6 tego dokumentu RFC. Chociaż IANA rejestruje również wyższe porty, są one inną klasyfikacją (i to ma znaczenie w praktyce ze względu na to, jak traktują je systemy operacyjne, a nie tylko Linux). Wyjaśnię to trochę. Ponadto 0 nie jest prawidłowym portem. Jest używany przez API gniazd jako symbol wieloznaczny (aby poinformować jądro, aby wybrało dla ciebie port).
derobert

2
„0 nie jest prawidłowym portem” jest wątpliwe. Z pewnością nie jest użytecznym portem w naszym systemie operacyjnym (dlatego właśnie go wywołałem i dlaczego jest obecnie zarezerwowany i raczej nie zostanie przypisany do niczego), ale nie jest wyjątkowy na poziomie protokołu.
Toby Speight

1
@derobert: Argumentujesz, że portu 0 nie można używać na komputerach z systemem Unix, ponieważ port 0 oznacza „wybierz wolny port”. Mówię, że argument jest błędny. Wniosek nie wynika logicznie z założenia.
MSalters

3
Chociaż może korzystać z dowolnego portu UDP, a nie tylko 80/443 Jest to w zasadzie prawda z każdego protokołu TCP / UDP, są to tylko domyślne porty powiązane z każdym z nich. Większość aplikacji korzystających z TCP i UDP nie zapewnia sposobu określania portów innych niż domyślne, ale HTTP pozwala na określenie ich w adresach URL, więc bardziej prawdopodobne jest zróżnicowanie portu.
Barmar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.