Яка максимальна кількість підключень TCP, які я можу мати в Windows Server 2008?


11

Я хотів би мати якомога більше підключень (одиночних підключень від багатьох різних клієнтів) на сервері, що працює на Windows Server 2008, щоб підтримувати додаток у стилі Comet. Заявка написана на C #. З’єднання не будуть балаканими, вони просто повинні бути відкритими (і залишатися відкритими). Купівля завантаженої пам’яті пам’яті та швидких процесорів не є проблемою.

Наскільки я можу сказати, я обмежуся 65 к одночасним відкритим з'єднанням на NIC - максимальну кількість портів. Це точно? Або я можу якось вийти за межі 65k з'єднань / NIC? Схоже, є серверні продукти для Linux, принаймні, які підтримують сотні тисяч підключень. Як вони це роблять?

Відповіді:


9

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

Налаштування реєстру обмежує максимальну кількість підключень до 16 мільйонів. Але є й інші більш практичні проблеми, які зазвичай обмежують вас меншими (ви можете змінити значення реєстру).

  • Windows займає близько 1 Кбайт оперативної пам’яті за з'єднання (це ~ 16 Гб для 16М з'єднань); і ваш додаток також повинен буде якось відслідковувати його активні з'єднання (більше пам’яті).
  • Windows також перевірятиме наявність невідповідних з'єднань будь-коли 2 години. При 16M з'єднаннях це приблизно кожні 0,5 мс; це займе значну пропускну здатність, роблячи ці перевірки.

1
@evilfred: ефемерні порти призначені для вихідних TCP-з'єднань, це означає, що клієнтська машина використовуватиме ефемерний порт під час підключення до вашого веб-сервера на порт 80. Як заявив Кріс S, після встановлення цього сеансу веб-сервер зможе встановити інший підключення до порту 80 від іншого клієнта. Крім того, я думаю, що він згадав ліміт клієнтських ефемерних портів, намагаючись бути вичерпним у своїй відповіді, цей ліміт клієнтських ефемерних портів не є вашим клопотом, це турбота клієнтів. @Chris S: Я сподіваюся, що я не помиляюся з тим, що ви мали на увазі у своїй відповіді.
joeqwerty

1
Отже, немає реального обмеження кількості вхідних з'єднань, які сервер може підтримувати в одному IP? Як сервер знає, куди надсилати дані, які він отримує від клієнта, якщо спільний порт призначення?

1
Мене не хвилює клієнт.

1
@evilfred: Кожним сеансом TCP "керується" через те, що називається 4-кортеж, що є клієнт ip | клієнтський порт <> сервер ip | порт сервера. Ось як сервер управляє трафіком між кожним сеансом на "спільному" порту, наприклад, порт 80 на веб-сервері.
joeqwerty

1
Я знаю це. Існує лише 65 000 можливих портів сервера на IP. Тому існує максимум 65 к активних розеток на IP.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.