Лучший диапазон номеров портов TCP для внутренних приложений

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

Основываясь на http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml, это параметры, которые я вижу в данный момент:

  • Порты системы (0-1023): я не хочу использовать какой-либо из этих портов потому что сервер может запускать службы на стандартных портах в этом Диапазон
  • Пользовательские порты (1024-49151): Учитывая, что приложения являются внутренними, я не собираюсь запрашивать IANA для резервирования номера для любого из наших приложений. Тем не менее, я хотел бы уменьшить вероятность того, что один и тот же порт используется другим процессом, например, Oracle Net Listener на 1521.
  • Динамические и/или частные порты (49152-65535): этот диапазон идеально подходит для пользовательских номеров портов. Моя единственная забота - это если это произойдет:

    а. Я настраиваю одно из своих приложений на использование порта X
    б. Приложение работает в течение нескольких минут или часов (в зависимости от характера приложения), оставляя порт неиспользованным на некоторое время,
    с. Операционная система выделяет номер порта X другому процессу, например, когда этот процесс действует как клиент, требующий подключения TCP к другому серверу. Это удается, учитывая, что он попадает в динамический диапазон, и X в настоящее время не используется в отношении операционной системы и
    д. Приложение не запускается, поскольку порт X уже используется

Ответ 1

Я не понимаю, почему тебе все равно. Помимо правила привилегий "не использовать порты ниже 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, и просто используйте его, заявив, что любое другое программное обеспечение на этих блоках (включая любые добавленные в будущем) должно вашего пути.

Ответ 2

Я решил загрузить назначенные номера портов из IANA, отфильтровать используемые порты и отсортировать каждый диапазон "Unassigned" в порядке доступа большинства доступных портов. Это не сработало, так как у 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

Ответ 3

Краткий ответ: используйте неназначенный порт пользователя

Завершение ответа - выберите и разверните решение для обнаружения ресурсов. Попросите сервер выбрать частный порт динамически. Попросите клиентов использовать обнаружение ресурсов.

Риск того, что сервер потерпит неудачу, потому что порт, который он хочет прослушать, недоступен, является реальным; по крайней мере, это случилось со мной. Другой сервис или клиент могут попасть туда первым.

Вы почти полностью можете снизить риск от клиента, избегая частных портов, которые динамически передаются клиентам.

Риск того, что с другой службы минимален, если вы используете пользовательский порт. Непризнанный риск порта - это только то, что другой сервис, который будет настроен (или dyamically), использует этот порт. Но, по крайней мере, это возможно под вашим контролем.

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