Linux'ta 65536'dan fazla TCP bağlantısı


11

Bir Linux (RedHat5) kutusundan 65536'dan fazla giden TCP bağlantısı kurmaya çalışırken takıldım.

Zaten hem giden hem de kabul eden kutuları yeterli dosya tanımlayıcılarına izin verecek şekilde yapılandırdım.

Kabul eden tarafta bir sorun olduğuna inanmıyorum - her biri birden fazla IP adresine sahip birden fazla hedef kutum var ve birden fazla bağlantı noktası kullanıyorum.

Giden tarafta IP adresi başına bir sınıra çarptığımı sanmıyorum - Birden fazla IP adresi ve bağlantı noktası kullanıyorum (çeşitli IP adreslerinin her biri için 30.000 - 60.000 bağlantı noktalarından bağlantıları açıyorum).

Eksik olan bazı Linux çekirdeği ayarlanabilir parametresi var mı? Yoksa TCP'de bazı temel sınırlar var mı?

Başarısızlık bağlantıları açmak için benim app connect () çağrısında asılı olmasıdır.

Herhangi bir yardım için teşekkürler NickB


Hangi sınıra girdiniz? Bu sınıra ulaştığınızda hata neydi?
nos

connect () kilitleniyor.
NickB

1
Kaynak ve hedef IP'leriniz arasında ne var? Muhtemelen bazı cihazların NAT tablosunu dolduruyor musunuz?

Yanıtlar:


10

İşte birisinin bir kutudan 1.000.000'dan fazla giden aldığı bir blog.

  • Richard Jones, MetaBrew.com, 2008-11-04, Mochiweb ile Milyon Kullanıcılık Bir Kuyruklu Yıldız Uygulaması, Bölüm 3 , bölüm 1 Milyona Kadar Dönme ( Burada Arşiv .)

Bölüm 1'de, aralığı "1024 65535" olarak ayarladık - yani 65535-1024 = 64511 ayrıcalıksız bağlantı noktası var. Bazıları diğer işlemler tarafından kullanılacak, ancak hiçbir zaman 64511'den fazla istemci bağlantısı alamayacağız, çünkü bağlantı noktalarımız tükenecek.

...

Öyleyse, her biri 62.000 bağlantı yapmak amacıyla 17 yeni IP adresi getirelim - bize toplam 1.054.000 bağlantı veriyor


Teşekkürler! Bu benim için işe yarıyor. Özellikle, metabrew.com/article/… 'den sysctl aramaları 65.536'dan fazla TCP bağlantısı kurmama izin verdi.
NickB

1

TCP protokolü hem hedef hem de kaynak bağlantı noktası için yalnızca 16 bit kullanır. Bir kerede 65536'dan fazla portun açık olmasının bir yolu olmayacak - Linux ile bile.


3
Bu yalnızca tek bir IP adresi için geçerlidir. Birden fazla kullanıyorsanız, her IP adresinde 65536 açık bağlantı noktası bulunmalıdır.
Meslek

1
doğru, her giden bağlantı için yerel bir bağlantı noktası gerekir. IIRC, halihazırda kullanımda olan portlar bu bağlantılar için kullanılamaz. örneğin, telnet / ftp / http kullanıyorsanız, 21/23/80 numaralı bağlantı noktaları yerel bağlantı noktası olarak kullanılamaz.
KevinDTimm

1
Aynı bağlantı noktasına birden fazla bağlantınız da olabilir.
gtrak

@Job - Evet, TCP IP'nin üstüne istiflendiğinden - Ben sadece bir IP adresinden bahsediyorum.

4
Her bağlantı, uzak adres ve bağlantı noktası ile yerel adres ve bağlantı noktasından oluşan bir demet ile tanımlanır. Bu nedenle, farklı uzak ana bilgisayarlardan 65536 gelen bağlantı mümkündür. > Bir ana bilgisayardaki tek bir arabirimden 65536 giden bağlantı mümkün değildir ve her zaman kullanımda olan bazı bağlantı noktaları olacağından, yine de bundan biraz daha azıyla sınırlı kalacaksınız.
Len Holgate

0

Bu bağlamda, "tek bir arabirim", kendisine atanmış tek bir IP adresi olan tek bir ağ bakımı anlamına gelir. Giden her TCP bağlantısı ayrı bir bağlantı noktasına bağlıdır, bu nedenle örneğiniz mümkün değildir.

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.