Найкращий діапазон номерів портів TCP для внутрішніх додатків [закрито]


95

Я працюю там, де кожна з наших внутрішніх програм працює на окремому екземплярі Tomcat і використовує певний порт TCP. Який найкращий діапазон портів IANA використовувати для цих програм, щоб уникнути зіткнень номерів портів з будь-яким іншим процесом на сервері?

На основі http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , такі варіанти я бачу зараз:

  1. Системні порти (0-1023): я не хочу використовувати жоден з цих портів, оскільки сервер може запускати служби на стандартних портах цього діапазону
  2. Користувацькі порти (1024-49151): Враховуючи те, що програми є внутрішніми, я не збираюся просити IANA зарезервувати номер для будь-якої з наших програм. Однак я хотів би зменшити ймовірність використання того самого порту іншим процесом, наприклад, Oracle Net Listener 1521.
  3. Динамічні та / або приватні порти (49152-65535): цей діапазон ідеально підходить для власних номерів портів. Моє єдине занепокоєння - якби це сталося:

    a. Я налаштовую один із своїх додатків на використання порту X
    b. Додаток не працює на кілька хвилин або годин (залежно від характеру програми), залишаючи порт ненадовго невикористаним,
    c. Операційна система призначає номер порту X іншому процесу, наприклад, коли цей процес діє як клієнт, який вимагає TCP-з'єднання з іншим сервером. Це вдається з огляду на те, що воно потрапляє в динамічний діапазон, і X в даний час не використовується щодо операційної системи, і
    d. Не вдається запустити програму, оскільки порт X уже використовується


2
Я відповів на подібне запитання тут stackoverflow.com/a/38141340/3333759, яке вам може бути корисним.
adrianwadey

Відповіді:


34

Я не можу зрозуміти, чому б вам було все одно За винятком правила "не використовувати порти нижче 1024", ви повинні мати можливість використовувати будь-який порт, оскільки ваші клієнти повинні мати можливість налаштовувати розмову з будь-якою IP-адресою та портом!

Якщо це не так, то це не вдалося зробити дуже добре. Поверніться і зроби їх правильно :-)

Іншими словами, запустіть сервер за IP-адресою Xта портом, Yа потім налаштуйте клієнтів з цією інформацією. Потім, якщо ви виявите, що вам потрібно запустити інший сервер, Xякий конфліктує з вашим Y, просто переналаштуйте ваш сервер і клієнтів на використання нового порту. Це справедливо, незалежно від того, чи є ваші клієнти кодом, чи тими, хто вводить URL-адреси у браузер.

Я, як і ви, не намагався б отримувати номери, присвоєні IANA, оскільки це повинно бути для служб настільки поширених, що багато- багато середовищ використовуватимуть їх (думаю, SSH або FTP або TELNET).

Ваша мережа - це ваша мережа, і якщо ви хочете, щоб ваші сервери мали порт 1234 (або навіть порти TELNET або FTP), це ваша справа. Справа в тому, що в нашій зоні розробки мейнфреймів порт 23 використовується для термінального сервера 3270, що є набагато іншим звіром, ніж telnet. Якщо ви хочете підключити telnet до сторони мейнфрейма UNIX, ви використовуєте порт 1023. Це іноді дратує, якщо ви використовуєте клієнтів telnet, не вказуючи порт 1023, оскільки він підключає вас до сервера, який нічого не знає про протокол telnet - нам доведеться зламати вийти з клієнта telnet і зробити це належним чином:

telnet big_honking_mainframe_box.com 1023

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


Дякую. Прочитавши вашу відповідь і трохи подумавши, я вирішив обрати варіант використання порту в межах другого діапазону. Ми вибрали 46xxx, оскільки IANA наразі має дуже мало портів, призначених у цьому посиланні на піддіапазон . Ми не вибрали третій діапазон через теоретично можливий (хоча і малоймовірний) сценарій, який я описав.
Хуанал

119

Я вирішив завантажити призначені номери портів з IANA, відфільтрувати використані порти та відсортувати кожен діапазон "Непризначений" у порядку більшості доступних портів за спаданням. Це не спрацювало, оскільки файл CSV має діапазони, позначені як "Неприсвоєні", які перекривають інші резервування номерів портів. Я вручну розширив діапазони призначених номерів портів, залишивши мені список усіх призначених номерів портів. Потім я відсортував цей список і сформував власний список непризначених діапазонів.

Оскільки ця сторінка stackoverflow.com посіла дуже високе місце в моїх пошуках теми, я вирішив, що розміщу тут найбільші діапазони для всіх, хто зацікавлений. Вони призначені як для TCP, так і для UDP, коли кількість портів у діапазоні становить щонайменше 500.

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

Джерело (за допомогою кнопки завантаження CSV):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml


"Це і tcp, і udp", як у - я можу відкрити всі ці порти, скажімо, 44100-44199легко запам'ятовується, оскільки дискретизація аудіо 44100 як на udp, так і на tcp надійно? І udp 44100-44199, і tcp 44100-44199 безкоштовні?
Лапсіо,

1
На жаль, немає. З моменту мого розміщення були додаткові застереження. Зараз у вашому асортименті порт. "z-wave-tunnel 44123 tcp Z-Wave Secure Tunnel"
Девід Вереб,

на щастя, я не думаю, що збираюся встановлювати системи розумного домашнього захисту Z-Wave на сервері розробки, ха-ха. Раніше використовувані діапазони портів охоплювали багато важливого, включаючи деякі інструменти VMWare, тому було набагато гірше. Якщо це єдине зіткнення на даний момент, то я з цим дякую круто :)
Лапсіо,

3
Тому я вирішив запустити список ще раз, щоб запропонувати новий набір діапазонів на основі новіших даних. Виявляється, діапазони "Без призначення", здається, не нумеровані належним чином. Наприклад, 43124-44320 позначено як неприсвоєний, проте 44123, який знаходиться в цьому діапазоні, перерахований трохи вище, як призначений. Здається, мені доведеться вручну придумати неприсвоєні діапазони, оскільки вони, здається, неправильно розраховані.
Девід Вереб,

6

Коротка відповідь: використовуйте неназначений порт користувача

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

Ризик того, що сервер вийде з ладу, оскільки порт, який він хоче слухати, недоступний, є реальним; принаймні це сталося зі мною. Інша послуга або клієнт можуть туди потрапити першими.

Ви можете майже повністю зменшити ризик для клієнта, уникаючи приватних портів, які динамічно передаються клієнтам.

Ризик отримання іншої служби мінімальний, якщо ви використовуєте користувацький порт. Ризик неназначеного порту полягає лише в тому, що інша служба, яку було налаштовано (або діамічно), використовує цей порт. Але принаймні це, мабуть, під вашим контролем.

Величезний документ із усіма призначеннями портів, включаючи порти користувачів, знаходиться тут: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt шукати маркер Unassigned .


4
Чи не краще використовувати призначений порт для протоколу, який ніколи не буде використовуватися у вашій мережі? Непризначений порт може бути призначений у будь-який час і створити вам проблеми.
adrianwadey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.