Jaka jest maksymalna liczba połączeń TCP, które mogę mieć w systemie Windows Server 2008?

11

Chciałbym mieć tyle połączeń (pojedyncze połączenia od wielu różnych klientów), jak to tylko możliwe, na serwerze działającym w systemie Windows Server 2008, aby obsługiwać aplikację w stylu Comet. Aplikacja jest napisana w języku C #. Połączenia nie będą rozmowne, muszą być tylko otwarte (i pozostać otwarte). Kupowanie mnóstwa pamięci i szybkich procesorów nie stanowi problemu.

O ile mi wiadomo, będę ograniczony do 65 000 jednoczesnych otwartych połączeń na kartę sieciową - maksymalna liczba portów. Czy to jest dokładne? Czy mogę w jakiś sposób wyjść poza 65 000 połączeń / NIC? Wygląda na to, że istnieją produkty serwerowe dla Linuksa, które obsługują setki tysięcy połączeń. Jak oni to robią?


źródło

Odpowiedzi:

9

Możesz wyjść znacznie dalej niż 65 000 połączeń; ponieważ możesz mieć wiele połączeń na port (po zaakceptowaniu nasłuchiwanie może połączyć się z innym klientem). Jeden koniec lub drugi musi mieć pewną różnicę, zwykle klient wybiera losowy port. Windows jest domyślnie ograniczony do kilku więcej niż 3000 takich losowych portów; więc Twój typowy klient maksymalnie to wykorzysta. Możliwe jest jednak skonfigurowanie klienta w inny sposób, a wiele * nix jest ograniczona do wielu więcej niż Windows.

Istnieje ustawienie rejestru ograniczające maksymalną liczbę połączeń do 16 milionów. Ale są też inne bardziej praktyczne problemy, które zwykle ograniczają cię do mniejszej liczby (możesz zmienić wartość rejestru).

  • Windows zajmuje około 1 KB pamięci RAM na połączenie (to ~ 16 GB dla połączeń 16M); a Twoja aplikacja będzie musiała jakoś śledzić aktywne połączenia (więcej pamięci).
  • System Windows będzie również sprawdzać połączenia niereagujące co 2 godziny. Przy połączeniach 16 M jest to około co 0,5 ms; wykonanie tych kontroli zajęłoby znaczną przepustowość.
Chris S.
źródło
1
@evilfred: efemeryczne porty służą do wychodzących połączeń TCP, co oznacza, że ​​komputer kliencki użyje efemerycznego portu, gdy łączy się z serwerem WWW na porcie 80. Jak stwierdził Chris S, po ustanowieniu tej sesji serwer sieciowy może ustanowić inny połączenie na porcie 80 z innego klienta. Myślę też, że wspominał o limicie portów efemerycznych klienta, starając się być wyczerpującym w swojej odpowiedzi, ten efemeryczny limit portów klienckich nie jest twoją troską, to troską klientów. @Chris S: Mam nadzieję, że nie mylę się co miałeś na myśli w swojej odpowiedzi.
joeqwerty
1
Więc nie ma realnego ograniczenia liczby połączeń przychodzących, które serwer może obsłużyć na jednym adresie IP? Skąd serwer wie, gdzie wysłać dane otrzymane od klienta, jeśli port docelowy jest współużytkowany?
1
Nie dbam o klienta.
1
@evilfred: Każda sesja TCP jest „zarządzana” przez tak zwaną 4-krotkę, czyli klient ip | klient port <> serwer ip | port serwera. W ten sposób serwer zarządza ruchem między każdą sesją na „współużytkowanym” porcie, takim jak port 80 na serwerze WWW.
joeqwerty
1
Wiem to. Istnieje tylko 65 000 możliwych portów serwera na adres IP. Dlatego na IP przypada maksymalnie 65 000 aktywnych gniazd.