Лучший диапазон номеров портов 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.