65536 +1 Bir sistemde bağlantı


35

Ağdaki her sistem için 65536 bağlantı noktası vardır ve her bağlantı veya Gönder / Al, bunlardan birini kullanır.

Sorum şu: 65536 + 1 bağlantımız olursa ne olur ?!

Bunun normal şekilde olmadığını biliyorum, ancak İşletim Sistemlerinin nasıl idare ettiğini bilmek istiyorum.


12
Bağlantı reddedilir. Ancak, 65535 açık bağlantılardan çok önce, gerçekçi olarak uzun zamandır sorunlarınız olacak.
ChrisInEdmonton

1
@ChrisInEdmonton Hayır. Giden bir bağlantıysa, yerel bir bağlantı noktası tahsis edemediğinden bağlantı hatası alır. Gelen bir bağlantı ise, bağlantı noktası sınırı geçerli değildir.
user207421

Bağlantı kuruluysa, reddedilen bir bağlantı alırsınız, giden bağlantı varsa, soket çağrınız hata verir. Bunu bir cevap olarak koymayacağım, çünkü emin değilim.
Jorge Aldo

Yanıtlar:


61

Yaptıkları, çünkü bir sistem birden 65536 eşzamanlı bağlantı işleyebilir lütfen unutmayın değil mutlaka her ayrı port kullanın.

Bir TCP bağlantısı veya UDP akışı 4-tuple ile tanımlanır:

(source IP address, source port, destination IP address, destination port)

Bu nedenle, yalnızca tek bir IP adresine sahip bir web sunucusu makineniz ve yalnızca 80 numaralı bağlantı noktasını dinleyen tek bir HTTP sunucusu yazılım paketiniz olsa bile, teorik olarak kendisine bağlanan her istemci IP adresi için 65536 bağlantı kurabilir . İstemci IP adresi 1'den 64Ki bağlantılar, istemcinin IP adresi 2'den 64Ki bağlantılar vb.

Bu yüzden protokoller, ilk yaklaşıma kadar, tek bir IPv4 adresindeki tek bir TCP veya UDP portuna 2 48 bağlantı / akış sağlar. Hem TCP hem de UDP'yi ve hem IPv4'ün adres alanını hem de IPv6'nın kozmik olarak / komik olarak geniş bir adres alanını göz önünde bulundurun ve protokollerin kendilerinin bir ana bilgisayarın bağladığı eşzamanlı bağlantı sayısının sınırının kaynağı olma olasılığı olmadığını görebilirsiniz. başedebilir.

Benzer şekilde, TCP veya UDP protokollerinde, istemci makinenin çeşitli sunucu adreslerine ve bağlantı noktalarına birden fazla giden bağlantı yapmak için tek bir IP adresindeki tek bir kaynak bağlantı noktasını kullanmasını engelleyen hiçbir şey yoktur. Bazen belirli bir işletim sisteminin ağ oluşturma API'leri bunu kolaylaştıramayabilir, ancak saygın eski "[BSD] Sockets" API'nin TCP ve UDP için yalnızca bir API olduğunu hatırlamak önemlidir. TCP ve UDP, geleneksel Sockets API'sinin göstermediği yeteneklere sahip olabilir.

Dolayısıyla, belirli bir ana bilgisayarın işleyebileceği eşzamanlı TCP bağlantılarının veya UDP akışlarının sayısı, bağlantı noktalarının sayılarıyla değil, tüm bu bağlantıların izini sürmek ve hepsine hizmet etmek için gereken RAM alanı ve CPU zamanı gibi sistem kaynakları ile sınırlıdır. Ayrıca bir işletim sisteminin uygulamaya özel detayları yapay sınırlar getirebilir. Örneğin, Unix'te "her şey bir dosyadır" felsefesi, her TCP bağlantısı veya UDP akışı için bir dosya tanıtıcısı olabilir. Unix çekirdeğinizin izleyebileceği dosya tanımlayıcılarının sayısı için bir sınır varsa, o dosya tanımlayıcı sınırı, eşzamanlı TCP bağlantılarının sayısı üzerinde yapay bir sınırdır veya çekirdeğinizin işleyebileceği UDP akışıdır.


2
Bu mükemmel cevapta en.wikipedia.org/wiki/C10k_problem sayfasına bağlanmaya değer olabilir .
ChrisInEdmonton

1
Her olası IP adresinden aynı anda 65.534 bağlantıyı barındırabilecek bir TCP sunucusu kurdum. Çok fazla bir şey yapmaz - basitçe gelen metni birkaç karakter değiştirmeyle yankılar - ama çok küçük bir donanım platformunda çalışır. Oldukça RFC uyumlu olduğunu sanmıyorum, ancak bağlantı noktalarının çoğunda ne kadar TCP bağlantısının açık olduğunu bilmediği ya da umursamadığı halde gayet iyi çalışıyor gibi görünüyor.
supercat,

2
Eğer varsa gerçekten iki makine arasındaki aşkın 65536 bağlantılarını bağlamak gerekir, o zaman birden fazla IP adresi kullanmak için makineler ayarlayabilirsiniz. İki makineye eklediğiniz her IP adresi, dörtlü olarak maksimum bağlantı sayısını artırır (en azından teoride ilk önce diğer sorunları karşılayacaksınız).
Lie Ryan
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.