Windows Server 2008'de alabileceğim maksimum TCP bağlantısı sayısı nedir?


11

Kuyruklu yıldız tarzı bir uygulamayı desteklemek için Windows Server 2008 üzerinde çalışan bir sunucuda mümkün olduğunca çok sayıda bağlantıya (birçok farklı istemciden tek bağlantı) sahip olmak istiyorum. Uygulama C # ile yazılmıştır. Bağlantılar konuşkan olmayacak, sadece açık olmalı (ve açık kalmalı). Tekne yükleri ve hızlı CPU satın almak sorun değil.

Anlayabildiğim kadarıyla, NIC başına 65k eşzamanlı açık bağlantıyla sınırlı olacağım - maksimum bağlantı noktası sayısı. Bu doğru mu? Veya bir şekilde 65k bağlantıların / NIC'in ötesine geçebilir miyim? Linux için en azından yüz binlerce bağlantıyı destekleyen sunucu ürünleri var gibi görünüyor. Bunu nasıl yapıyorlar?

Yanıtlar:


9

65k bağlantıların çok ötesine geçebilirsiniz; bağlantı noktası başına birden çok bağlantınız olabileceğinden (kabul edildikten sonra dinleyici başka bir istemciye bağlanabilir). Bir ucun veya diğerinin bir farkı olması gerekir, genellikle istemci rastgele bir bağlantı noktası seçer. Windows varsayılan olarak bu rastgele bağlantı noktalarının 3000'den azıyla sınırlıdır; böylece tipik müşteriniz bu konuda en yüksek seviyeye çıkacaktır. Ancak istemciyi farklı şekilde yapılandırmak mümkündür ve birçok * nix, Windows'dan çok daha fazlası ile sınırlıdır.

Maksimum bağlantı sayısını 16 milyonla sınırlayan bir kayıt defteri ayarı var. Ancak genellikle sizi daha azla sınırlayacak başka daha pratik sorunlar da vardır (kayıt defteri değerini değiştirebilirsiniz).

  • Windows bağlantı başına yaklaşık 1 KB RAM alır (16M bağlantılar için ~ 16GB); uygulamanızın da bir şekilde etkin bağlantılarını (daha fazla bellek) takip etmesi gerekir.
  • Windows ayrıca 2 saatte bir yanıt vermeyen bağlantı olup olmadığını kontrol eder. 16M bağlantılarında bu yaklaşık her 0.5 ms'de bir; sadece bu kontrolleri yapmak önemli bir bant genişliği gerektiriyordu.

1
@evilfred: geçici bağlantı noktaları giden TCP bağlantıları içindir, yani bir istemci makine 80 numaralı bağlantı noktasındaki web sunucunuza bağlandığında geçici bir bağlantı noktası kullanacaktır. Chris S'nin belirttiği gibi, bu oturum kurulduktan sonra web sunucusu başka bir 80 numaralı bağlantı noktasında farklı bir istemciden bağlantı. Ayrıca, cevabında kapsamlı olmaya çalışırken müşterinin geçici bağlantı noktası sınırından bahsettiğini düşünüyorum, bu müşteri geçici bağlantı noktası sınırı sizin endişeniz değil, müşterilerin endişesidir. @Chris S: Umarım cevabında ne demek istediğini yanlış ifade etmiyorum.
joeqwerty

1
Yani bir sunucunun tek bir IP'de destekleyebileceği gelen bağlantı sayısında gerçek bir sınır yoktur? Hedef bağlantı noktası paylaşılırsa, sunucu istemciden aldığı verileri nereye göndereceğini nasıl bilir?

1
Müşteri umrumda değil.

1
@evilfred: Her TCP oturumu, istemci ip | istemci bağlantı noktası <> sunucu ip | sunucu bağlantı noktası olan 4-demet adı verilen "yönetilir". Sunucu, bir web sunucusundaki bağlantı noktası 80 gibi "paylaşılan" bir bağlantı noktasındaki her oturum arasındaki trafiği bu şekilde yönetir.
joeqwerty

1
Bunu biliyorum. IP başına yalnızca 65 bin olası sunucu bağlantı noktası vardır. Bu nedenle IP başına maksimum 65k aktif soket vardır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.