Я работаю в месте, где каждое из наших внутренних приложений работает на отдельном экземпляре 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
b. Приложение не работает в течение нескольких минут или часов (в зависимости от характера приложения), оставляя порт неиспользованным на некоторое время,
c. Операционная система выделяет порт номер X другому процессу, например, когда этот процесс действует как клиент, которому требуется TCP-соединение с другим сервером. Это удается, учитывая, что он попадает в динамический диапазон и X в настоящее время не используется операционной системой, и
d. Приложение не запускается, потому что порт X уже используется
источник
Ответы:
Я не понимаю, почему тебя это волнует. За исключением правила привилегии «не использовать порты ниже 1024», вы должны иметь возможность использовать любой порт, потому что ваши клиенты должны иметь возможность настраиваться для разговора с любым IP-адресом и портом!
Если нет, значит, они не очень хорошо сделаны. Вернитесь и сделайте их правильно :-)
Другими словами, запустите сервер с IP-адресом
X
и портом, аY
затем настройте клиентов с использованием этой информации. Затем, если вы обнаружите, что вам необходимо запустить другой сервер,X
который конфликтует с вашимY
, просто переконфигурируйте свой сервер и клиентов для использования нового порта. Это верно независимо от того, являются ли ваши клиенты кодом или людьми, вводящими URL-адреса в браузере.Я, как и вы, не стал бы пытаться получить номера, присвоенные IANA, поскольку это должно быть для служб, настолько распространенных, что многие, многие среды будут их использовать (например, SSH, FTP или TELNET).
Ваша сеть - это ваша сеть, и, если вы хотите, чтобы ваши серверы были на порте 1234 (или даже на портах TELNET или FTP, если на то пошло), это ваше дело. Например, в нашей области разработки мэйнфреймов порт 23 используется для терминального сервера 3270, который сильно отличается от telnet. Если вы хотите подключиться к UNIX-стороне мэйнфрейма по telnet, вы используете порт 1023. Иногда это раздражает, если вы используете telnet-клиентов без указания порта 1023, поскольку он подключает вас к серверу, который ничего не знает о протоколе telnet - мы должны сломать из клиента telnet и сделайте это правильно:
Если вы действительно не можете настроить клиентскую сторону, выберите одно из второго диапазона, например 48042, и просто используйте его, заявив, что любое другое программное обеспечение на этих полях (включая любое добавленное в будущем) не должно мешать вам. .
источник
Я решил загрузить назначенные номера портов из IANA, отфильтровать используемые порты и отсортировать каждый «неназначенный» диапазон в порядке убывания большинства доступных портов. Это не сработало, поскольку в файле csv есть диапазоны, помеченные как «Неназначенные», которые перекрывают другие резервирования номеров портов. Я вручную расширил диапазоны назначенных номеров портов, оставив мне список всех назначенных номеров портов. Затем я отсортировал этот список и создал свой собственный список неназначенных диапазонов.
Поскольку эта страница stackoverflow.com заняла очень высокое место в моем поиске по этой теме, я решил разместить здесь самые большие диапазоны для всех, кому это интересно. Они предназначены как для TCP, так и для UDP, где количество портов в диапазоне не менее 500.
Источник (через кнопку загрузки CSV):
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
источник
44100-44199
так, они легко запоминаются, потому что сэмплирование аудио 44100 и на udp, и на tcp безопасно? И udp 44100-44199, и tcp 44100-44199 бесплатны?Краткий ответ: используйте неназначенный пользовательский порт
Превосходный ответ - выберите и разверните решение для обнаружения ресурсов. Попросите сервер динамически выбирать частный порт. Попросите клиентов использовать обнаружение ресурсов.
Риск того, что сервер выйдет из строя из-за того, что порт, который он хочет прослушивать, недоступен, реален; по крайней мере, это случилось со мной. Сначала туда может попасть другая служба или клиент.
Вы можете почти полностью снизить риск со стороны клиента, избегая частных портов, которые динамически передаются клиентам.
Риск того, что от другой службы, минимален, если вы используете пользовательский порт. Риск неназначенного порта заключается только в том, что другая служба будет настроена (или динамически) использует этот порт. Но, по крайней мере, это, вероятно, под вашим контролем.
Огромный документ со всеми назначениями портов, включая пользовательские порты, находится здесь: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt найдите токен Unassigned .
источник