Какое максимальное количество TCP-соединений я могу иметь в Windows Server 2008?

11

Мне бы хотелось иметь как можно больше соединений (отдельных соединений от множества разных клиентов) на сервере под управлением Windows Server 2008 для поддержки приложения в стиле Comet. Приложение написано на C #. Соединения не будут болтливыми, они просто должны быть открыты (и оставаться открытыми). Покупка загруженной памяти и быстрых процессоров не является проблемой.

Насколько я могу судить, я буду ограничен до 65 тыс. Одновременных открытых соединений на сетевую карту - максимальное количество портов. Это точно? Или я могу выйти за пределы 65k соединений / NIC как-то? Похоже, существуют серверные продукты для Linux, по крайней мере, которые поддерживают сотни тысяч соединений. Как они это делают?


источник

Ответы:

9

Вы можете выйти за пределы 65 тыс. Соединений; так как вы можете иметь несколько соединений на порт (после того, как принятый, слушатель может подключиться к другому клиенту). Один или другой конец должен иметь некоторую разницу, обычно клиент выбирает случайный порт. Windows по умолчанию ограничена несколькими более чем 3000 из этих случайных портов; так что ваш типичный клиент будет максимально обойти это. Однако можно настроить клиент по-разному, и многие * nix ограничены гораздо большим, чем Windows.

Существует параметр реестра, ограничивающий максимальное количество подключений до 16 миллионов. Но есть и другие, более практичные проблемы, которые обычно ограничивают вас (вы можете изменить значение реестра).

  • Windows занимает около 1 КБ ОЗУ на соединение (это ~ 16 ГБ для 16M подключений); и вашему приложению также придется каким-то образом отслеживать активные соединения (больше памяти).
  • Windows также проверит наличие неотвечающих соединений каждые 2 часа. При 16M соединениях это примерно каждые 0,5 мс; это заняло бы значительную полосу пропускания, просто делая эти проверки.
Крис С
источник
1
@evilfred: эфемерные порты предназначены для исходящих TCP-соединений. Это означает, что клиентский компьютер будет использовать эфемерный порт при подключении к вашему веб-серверу через порт 80. Как сказал Крис С., после того, как этот сеанс установлен, веб-сервер может установить другой подключение к порту 80 от другого клиента. Кроме того, я думаю, что он упомянул ограничение эфемерного порта клиента, пытаясь быть исчерпывающим в своем ответе, ограничение эфемерного порта клиента - это не ваша забота, а забота клиентов. @Chris S: Надеюсь, я не ошибаюсь, что вы имели в виду в своем ответе.
Joeqwerty
1
Таким образом, нет реального ограничения на количество входящих соединений, которые сервер может поддерживать на одном IP? Как сервер узнает, куда отправлять данные, которые он получает от клиента, если порт назначения используется совместно?
1
Я не забочусь о клиенте.
1
@evilfred: Каждый сеанс TCP «управляется» через так называемый 4-кортеж, который называется client ip | client port <> server ip | server port. Вот как сервер управляет трафиком между каждым сеансом на «общем» порте, таком как порт 80 на веб-сервере.
Joeqwerty
1
Я знаю это. Для каждого IP-адреса доступно только 65 тыс. Портов сервера. Таким образом, на каждый IP-адрес приходится до 65 тыс. Активных сокетов.