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

97

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

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

Хуанал
источник
2
Я ответил на аналогичный вопрос здесь stackoverflow.com/a/38141340/3333759, который может оказаться полезным.
Adrianwadey

Ответы:

35

Я не понимаю, почему тебя это волнует. За исключением правила привилегии «не использовать порты ниже 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 и сделайте это правильно:

telnet big_honking_mainframe_box.com 1023

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

Paxdiablo
источник
Спасибо. Прочитав ваш ответ и немного подумав, я решил использовать порт во втором диапазоне. Мы выбрали 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 бесплатны?
Lapsio 04
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 01