Bağlantı Noktalarını Anlama: Birden çok tarayıcı sekmesi aynı anda nasıl iletişim kurar? [kapalı]


18

Bugün, liman iletişiminin nasıl çalıştığını temelde anlamadığımı fark ettim.

80 numaralı bağlantı noktasında dinleme yapan bir web sunucusu örneğini başlatırsam, hepsi 80 numaralı bağlantı noktası üzerinden iletişim kuran birçok farklı tarayıcı sekmesinden gelen birçok isteğe yanıt verebilir.

Ancak, sunucunun iki örneğini başlatamıyorum, her ikisi de 80 numaralı bağlantı noktasını dinliyor, çünkü bir bağlantı noktası çakışmasıyla sonuçlanıyor.

Bunu her zaman belirli bir şekilde aldım, (sadece bir işlem belirli bir bağlantı noktasına herhangi bir zamanda bağlanabilir), gerçekten düşünmeden - 80 numaralı bağlantı noktasında iletişim kuran birden fazla işlem yok mu? (ör. tarayıcıda çalışan sekmelerin her biri?)

Yanıtlar:


24

Temel olarak, bir seferde bir bağlantı noktasında yalnızca bir işlem DİNLENEBİLİR (teknik olarak, bir soket dinlemeye adanmıştır). Ancak, bir bağlantı noktası veri aktarımı yapan birçok soketi işleyebilir, bir soket yerel IP / bağlantı noktası ve uzak IP adresi / uzak bağlantı noktasının birleşimidir. Bu şekilde, sunucu LISTENing sırasında gelen bağlantıyı kabul ettikten sonra, bu konuşmaya adanmış yeni bir soket açar ve işlemi başka bir şeye bırakır, sonra LISTENing'e geri döner.

Daha fazla ayrıntı burada .


Aslında aynı bağlantı noktasını dinleyen birden çok işlem yapabilirsiniz. Örneğin, birden çok udp okuyucu ile yaparsanız, çekirdek düzeyinde yük dengeleme elde edersiniz. Önce dinlemek için soketi açın, ardından çatallayın ve recv()her işlemde deneyin .
viraptor

5
@viraptor: Doğru, ancak UDP bağlantısız olduğundan, "dinleme" ve "alma" arasında gerçekten bir ayrım yoktur.
Adam Robinson

Aynı fikir TCP ile çalışır, dinleme soketi ile işlem çatallama ve her ikisinde de kabul etme ().
viraptor

Aslında, bir soket iletişim için sadece bir "uç nokta" dır. Söylemek istediğiniz şey, bağlı bir soketin yerel IP / bağlantı noktası ile uzak IP / adres / uzak bağlantı noktasının bir birleşimi olduğudur. Soket kelimesi o kadar sık ​​kullanılır ki, gerçek açıklamasının ne olduğunu bulmak benim için zor oldu
westoque

14

Tarayıcı bilgisayarınızdaki rastgele bir yüksek (yani> 1024) bağlantı noktasından uzak sunucunun bağlantı noktası 80'e bağlanır. Bu nedenle makinenizde bağlantı noktası çakışması yoktur.

Aynı uzak sunucuya bağlanmak için çok sayıda sekme kullanırsanız (veya sunucuya bağlanan çok sayıda kullanıcı varsa), bunların tümü aynı bağlantı noktasına gider ve aynı işlemle (yani sitenin web sunucusu) servis edilir.


2
Bu doğru cevap. TCP bağlantılarının her iki ucunda bir bağlantı noktası numarası bulunur. İlgili her iki bilgisayar da bağlantı web sitesi: 80 <-> tarayıcı: 12397 ve farklı bağlantı web sitesi: 80 <-> tarayıcı: 22958 arasında ayrım yapabilir.
pjc50

7

80 numaralı bağlantı noktasında dinleyen sunucunun birden çok işlemi gerçekleştirmesi GEREKMEZ. Yaşlıların basit TCP cinleri bir seferde sadece bir bağlantıyı idare edebilir. Bu davranışı, netcatbelirli bir bağlantı noktasında dinleme gibi bir programa sahip olarak taklit edebilir ve ona iki makine bağlamayı deneyebilirsiniz. Biri içeri girecek, diğeri bağlantı olmadan sıçrayacak. Bu cinler çoğunlukla işe yaramaz, bu yüzden onları bir daha göremezsiniz.

Web sunucusu gibi bir şey için, doğrudan bağlantı noktasını dinliyor. Unutulmaması gereken şey, işletim sisteminin soket kütüphanesinin üstünde yer almasıdır. Yeni bir bağlantı kurulduğunda, soket kitaplığı yeni soketi web sunucusu yazılımına geçirir. Bu noktada, web sunucusu yazılımının bazı seçenekleri vardır.

Bir olasılık, soket nesnesini aynı işlemde yeni bir iş parçacığına geçirmesidir. Bu soket üzerinden her iletişim gerçekleştiğinde, bu iplik takılacaktır. Üst süreç, belirli bir zamanda hangi iş parçacıklarının aktif olduğunu belirler, bu da çok fazla olabilir.

Başka bir olasılık, yeni bir işlem döndürmesi ve soket nesnesini işleme geçirmesidir. Anladığım kadarıyla, bu alt süreçler ve hedefleri arasındaki iletişime aracılık etmek artık işletim sisteminin soket sistemine bağlı. Ana süreç, asılı olanları öldürmek ve diğer süreçler arası iletişimler gibi süreçler üzerinde hala bazı kontrollere sahiptir.

Bu yaklaşımlardan hangisinin daha verimli olduğu işletim sistemine bağlıdır. IIRC, Apache her iki modda da çalışabilir.

Temel olarak, soket kütüphanesi web sunucusuna bir miktar paralel işleme sağlar. Yeni bağlantıları kabul ederken aynı anda aktif olarak veri aktarımı yapan birden fazla eşzamanlı bağlantıyı işleyebilir.

Yükleme sürelerini iyileştirmek için bir web sunucusuna birden fazla bağlantı denemesi yapabilen bir tarayıcı için, tarayıcı ucunda da paralellik uygulanır, bu iyi ve harika bir şeydir. Tarayıcı, sayfanın yüklenirken durumunu izler ve döndürdüğü çoklu bağlantı girişimlerinin tümü sürecin bir parçasıdır.


Pek çok açıdan haklı olduğu için +1 :)
Michael Lowman

2

Etkili olarak, iki "tip" akım soketi vardır. Birinin joker karakteri "diğer ucu", diğerinin belirli bir ana bilgisayarı vardır: diğer ucu için bağlantı noktası.

Hiçbir iki soket aynı "bu uç" ve "diğer uç" tanımlayıcılarına sahip olamaz (ya da daha doğrusu olmamalıdır). "Dinlenen" soket (gelen bağlantıları kabul eden), joker "öteki uç" olan sokettir, bu nedenle her seferinde yalnızca bir tane olabilir. Bağlantılar geldikçe, acceptdiğer uç için bir host: port tuple ile bir soket döndürerek bir yapılır.


1

Sorunuz bana Cisco CCNA'nın aynı şüphelere sahip olmasından birkaç yıl önce kendimi hatırlatıyor :)

Öncelikle, birden çok HTTP bağlantısı kurmak, tarayıcınızda açık olan sekmelerin miktarına bağlı olmak zorunda değildir. Örneğin, reklamları veya google analitik kodu olan bir siteyi ziyaret ederken, yalnızca bir sekmede olmasına rağmen birden fazla siteye bağlanacaksınız.

Her neyse, tarayıcınız web sunucusuyla iletişim kurduğunda, web sunucusuna gönderilen trafiğin hedef portu 80, port ise kaynak portu rastgele bir sayıdır. Kaynak bağlantı noktası, web sunucusuna size hangi bağlantı noktasını tekrar iletmesi gerektiğini bildirmektir. Her http bağlantısında bilgisayarınızda kendi bağlantı noktası açık olacaktır. Netstat'ı birkaç web sitesi açık olarak çalıştırmayı deneyin ve ne demek istediğimi hemen göreceksiniz.

Gülebilirsiniz ama bu kitap, TCP / IP ile ilgili temel bilgileri almanın harika ve hızlı bir yoludur. Bana çok yardımcı oldu.

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.