Pracuję w miejscu, w którym każda z naszych aplikacji wewnętrznych działa na indywidualnej instancji Tomcat i korzysta z określonego portu TCP. Jaki byłby najlepszy zakres portów IANA do wykorzystania w tych aplikacjach, aby uniknąć kolizji numerów portów z jakimkolwiek innym procesem na serwerze?
Na podstawie http://www.iana.org/ assignments/service-names-port-numbers/service-names- port- numbers.xml są to opcje, które obecnie widzę:
- Porty systemowe (0-1023): nie chcę używać żadnego z tych portów, ponieważ na serwerze mogą być uruchomione usługi na standardowych portach z tego zakresu
- Porty użytkowników (1024-49151): Biorąc pod uwagę, że aplikacje są wewnętrzne, nie zamierzam prosić IANA o zarezerwowanie numeru dla żadnej z naszych aplikacji. Chciałbym jednak zmniejszyć prawdopodobieństwo użycia tego samego portu przez inny proces, np. Oracle Net Listener na 1521.
- Porty dynamiczne i / lub prywatne (49152-65535): ten zakres jest idealny dla niestandardowych numerów portów. Martwię się tylko, jeśli tak się stanie:
za. Skonfigurowałem jedną z moich aplikacji do korzystania z portu X
b. Aplikacja nie działa przez kilka minut lub godzin (w zależności od charakteru aplikacji), pozostawiając port nieużywany przez chwilę,
c. System operacyjny przydziela numer portu X do innego procesu, na przykład, gdy ten proces działa jako klient wymagający połączenia TCP z innym serwerem. To się udaje, biorąc pod uwagę, że mieści się w zakresie dynamicznym, a X jest obecnie nieużywany, jeśli chodzi o system operacyjny, oraz
d. Aplikacja nie uruchamia się, ponieważ port X jest już używany
źródło
Odpowiedzi:
Nie rozumiem, dlaczego miałbyś się przejmować. Poza regułą przywilejów „nie używaj portów poniżej 1024”, powinieneś móc używać dowolnego portu, ponieważ twoi klienci powinni mieć możliwość komunikacji z dowolnym adresem IP i portem!
Jeśli nie, to nie zostały zrobione zbyt dobrze. Wróć i zrób to poprawnie :-)
Innymi słowy, uruchom serwer pod adresem IP
X
i portem,Y
a następnie skonfiguruj klientów z tymi informacjami. Następnie, jeśli okaże się, że musisz uruchomić inny serwer, naX
którym występuje konflikt z TwoimY
, po prostu ponownie skonfiguruj serwer i klientów, aby używały nowego portu. Dzieje się tak niezależnie od tego, czy Twoi klienci są kodami, czy ludzie wpisują adresy URL w przeglądarce.Podobnie jak Ty, nie próbowałbym uzyskać numerów przypisanych przez IANA, ponieważ ma to dotyczyć usług tak powszechnych, że będzie ich używać wiele, wiele środowisk (pomyśl o SSH, FTP lub TELNET).
Twoja sieć to Twoja sieć i jeśli chcesz, aby serwery były na porcie 1234 (lub nawet na portach TELNET lub FTP), to Twoja sprawa. Przykładowo, w naszym obszarze rozwoju komputerów mainframe port 23 jest używany dla serwera terminali 3270, który jest zupełnie inną bestią niż telnet. Jeśli chcesz połączyć się telnetem po stronie systemu mainframe z systemem UNIX, używasz portu 1023. Jest to czasami denerwujące, jeśli używasz klientów telnet bez określania portu 1023, ponieważ łączy cię on z serwerem, który nic nie wie o protokole telnet - musimy przerwać z klienta telnet i zrób to poprawnie:
Jeśli naprawdę nie możesz skonfigurować po stronie klienta, wybierz jeden z drugiego zakresu, na przykład 48042, i po prostu go użyj, deklarując, że jakiekolwiek inne oprogramowanie na tych komputerach (w tym każde dodane w przyszłości) musi trzymać się z daleka .
źródło
Zdecydowałem się pobrać przypisane numery portów z IANA, odfiltrować używane porty i posortować każdy zakres „Nieprzypisanych” w kolejności malejącej większości dostępnych portów. To nie zadziałało, ponieważ plik csv zawiera zakresy oznaczone jako „Nieprzypisane”, które nakładają się na inne rezerwacje numerów portów. Ręcznie rozszerzyłem zakresy przypisanych numerów portów, pozostawiając listę wszystkich przypisanych numerów portów. Następnie posortowałem tę listę i wygenerowałem własną listę nieprzypisanych zakresów.
Ponieważ ta strona stackoverflow.com zajęła bardzo wysokie miejsce w moich poszukiwaniach na ten temat, pomyślałem, że opublikuję tutaj największe zakresy dla każdego, kto jest zainteresowany. Dotyczy to zarówno protokołu TCP, jak i UDP, gdzie liczba portów w zakresie wynosi co najmniej 500.
Źródło (za pomocą przycisku pobierania CSV):
http://www.iana.org/ assignments/service-names-port-numbers/service-names-port-numbers.xhtml
źródło
44100-44199
że wygląda to na łatwe do zapamiętania, ponieważ próbkowanie dźwięku 44100 zarówno na udp, jak i tcp jest bezpieczne? Zarówno udp 44100-44199, jak i tcp 44100-44199 są bezpłatne?Krótka odpowiedź: użyj nieprzypisanego portu użytkownika
Ponad odpowiedź zdobywcy - wybierz i wdróż rozwiązanie do wykrywania zasobów. Niech serwer dynamicznie wybiera port prywatny. Niech klienci skorzystają z wykrywania zasobów.
Ryzyko, że serwer zawiedzie, ponieważ port, na którym chce nasłuchiwać, jest niedostępny, jest realne; przynajmniej mi się to przytrafiło. Inna usługa lub klient może się tam dostać pierwszy.
Możesz prawie całkowicie zmniejszyć ryzyko ze strony klienta, unikając portów prywatnych, które są dynamicznie przekazywane klientom.
Ryzyko związane z inną usługą jest minimalne, jeśli używasz portu użytkownika. Ryzyko związane z nieprzypisanym portem polega tylko na tym, że inna usługa zostanie skonfigurowana (lub dynamicznie) korzysta z tego portu. Ale przynajmniej jest to prawdopodobnie pod twoją kontrolą.
Ogromny dokument zawierający wszystkie przypisania portów, w tym porty użytkowników, znajduje się tutaj: http://www.iana.org/ assignments/service-names-port-numbers/service-names-port-numbers.txt poszukaj tokena Unassigned .
źródło