2010-08-16 2 views
0

Есть ли способ преодолеть предел порта в Linux-системе? У нас есть сервер, который принимает входящее соединение и использует очень мало памяти и процессора. Довольно глупо, что нам нужно собрать кластер небольших ящиков Linux, чтобы преодолеть предел программного обеспечения (количество точек около 60 тыс.). Есть идеи?Есть ли способ преодолеть ограничение порта на Linux-системе?

+1

Можете ли вы дать более подробную информацию о прецеденте здесь? – jcolebrand

+3

Вы пытались использовать вторичные IP-адреса на одном интерфейсе? –

+0

@ar: это жизнеспособное решение, поскольку OP уже использует несколько IP-адресов. Отправьте его как ответ, чтобы он мог правильно проголосовать и/или принять его. – slebetman

ответ

11

Нет ограничений на 60k tcp или udp розетки, вы просто думаете, что есть. Фактический предел намного выше. Есть 64-килобайтные порты, но один и тот же порт может использоваться для более чем одного соединения, так как только пара адресов/портов должна быть уникальной.

Сказав, что если у вас есть 60k отдельных клиентов одновременно, вы можете иметь высокую доступность, что означает, что вам нужно будет иметь несколько машин в любом случае.

5

Это не программный предел портов, это сетевой предел.

http://en.wikipedia.org/wiki/TCP_and_UDP_port

Есть только только определенное количество портов, доступных на IP-сети (65k). Ваша проблема не является пределом порта, но, возможно, как эти порты используются.

+0

У нас нет постоянных соединений, нам действительно нужно, чтобы многие порты. – erotsppa

+2

Нередко. Большинство веб-серверов делают то же самое, что и HTTP Keep Alive. Не зная приложения здесь, трудно дать вам какое-либо направление. Расскажите, как вы это используете. –

+1

Входящие соединения все подключаются к одному порту - и любой стек, который не может обрабатывать двух клиентов, подключающихся с одного и того же номера порта на разных IP-адресах, нарушен. – cHao

2

Это не Linux, это ограничение по протоколу TCP/IP - номер порта - это 16-разрядное целое без знака, что означает ограничение на 64 КБ. Назначьте несколько адресов - IP aliases - к интерфейсу (или используйте несколько аппаратных интерфейсов), чтобы разные серверы прослушивали разные IP-адреса. Каждый интерфейс даст вам отдельный диапазон портов.

+0

Входящие соединения все подключаются к одному порту - и любой стек, который не может обрабатывать двух клиентов, подключающихся с одного и того же номера порта на разных IP-адресах, сломан. – cHao

+0

Хм, я говорю о разных разъемах для линз на разных IP-адресах. –

+0

Я имею в виду, что любой уважающий себя TCP/IP-стек будет держать удаленные клиенты 10.0.0.1:1234 и 10.0.0.2:1234 раздельными и позволит подключать оба из них одновременно к одному и тому же порту сервер. Таким образом, предел порта 64k не применяется, даже если вы используете один IP-адрес: локальные и удаленные сокеты должны считаться 48-битными значениями (32-разрядный адрес + 16-разрядный порт). – cHao

Смежные вопросы