Web tarayıcıları farklı sekmeler için farklı giden bağlantı noktaları kullanıyor mu?


58

Firefox gibi birden fazla sekmeye sahip olmayı destekleyen bir web tarayıcısında, farklı web sitelerine giden farklı sekmeler her etki alanı için ayrı bir bağlantı noktası kullanıyor mu?

Veya tarayıcı tüm sekmeleri ve dolayısıyla tüm alanları yönetmek için tek bir bağlantı noktası mı kullanıyor?


Tarayıcılar web sitelerine bağlanırken 2 bağlantı noktası kullanır, 80’i http bağlantıları içindir, 443’ü https bağlantıları içindir. en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Moab

7
Sunucuya bağlanmak için kullanılan bağlantı noktalarını biliyorum, ancak istemciden (ana bilgisayar) bağlanmak için kullanılan bağlantı noktası numaralarını merak ediyordum.
yoyo_fun

2
"Giden limanlar" teriminin kesin olmadığını düşünüyorum. Limanlar çift yönlüdür. Belki söyleyebilirsin. "yerel bağlantı noktaları" yerine. Yerel portlar istekleri göndermek için kaynak (giden) portları ve cevapları almak için hedef (gelen) portları olarak kullanılır.
Ron Maupin

6
Bağlantı noktaları işletim sistemi tarafından atanır ve her yeni bağlantıya, diğer tüm açık bağlantılardan farklı olması için yeni bir yerel bağlantı noktası atanır.
Eski Umbris

1
@ExUmbris: Bu mantıklı ve basit bir strateji olabilir, ancak TCP bağlantıları dört {yerel IP, yerel bağlantı noktası, uzak IP, uzak bağlantı noktası} ile tanımlanır. Yerel port, benzersizlik için gerekli değildir, ki bu iyi bir şeydir: Web sunucusu, yerel portunu benzersizlik için kullanamaz. Web sunucusu açısından bakıldığında, uzak IP, tek bir ağ geçidi / proxy'nin arkasına birden fazla kullanıcı yerleştirilebileceğinden benzersiz değildir.
MSalters

Yanıtlar:


55

Tarayıcılar farklı web sitelerine bağlanmak için farklı bağlantı noktaları kullanıyor mu?

Evet onlar yapar.

Windows 7'de mevcut Firefox bağlantılarımı (9 açık sekmem var) gösteren bir örnek:

görüntü tanımını buraya girin

Notlar:

  • Yerel portların hepsinin farklı olduğunu görebilirsiniz.

  • Uzak portlar genellikle 80 (HTTP), 443 (HTTPS) veya 8080'dir (HTTP Alternate).

  • Bir web sayfasını oluşturma süreci aşağıda açıklanmaktadır. Özel olarak 5, 6, 13 ve 15 numaralı adımlara bakın (bunlar koyu renklidir):

    • Genel olarak, tek bir web sayfasını oluşturmak, hepsi aynı uzak adrese gelmeyecek şekilde birden fazla bağlantı kullanır.

    • Bunun nedeni, web sayfalarının başka yerde barındırılan kaynakları (javascript dosyaları vb.) İçermesidir.

  • Aynı web sitesine yapılan birden çok bağlantı (örneğin stackoverflow.com) aynı zamanda farklı yerel bağlantı noktalarına sahiptir (çünkü farklı sayfalarda farklı sekmelerdeki ayrı bağlantılardır).


Bir web sayfasını oluşturma - adım adım

Not:

  • Adımlar 5, 6, 13 ve 15 (kalın harflerle gösterilmiştir) doğrudan soru ile ilgilidir.

İnternette gezinirken neler olacağını hiç düşündünüz mü? Göründüğü kadar basit değil:

  1. Tercih ettiğiniz tarayıcıda adres çubuğuna bir URL yazın.
  2. Tarayıcı protokolü, ana bilgisayarı, portu ve yolu bulmak için URL'yi ayrıştırır.
  3. Bir HTTP isteği oluşturur (bu büyük olasılıkla protokoldü)
  4. Ana bilgisayara ulaşmak için önce insan tarafından okunabilen ana bilgisayarı bir IP numarasına çevirmesi gerekir ve bunu ana bilgisayarda DNS araması yaparak yapar
  5. Daha sonra, belirtilen portta kullanıcının bilgisayarından bu IP numarasına bir soket açılmalıdır (en sık port 80)
  6. Bir bağlantı açık olduğunda, HTTP isteği ana bilgisayara gönderilir.
  7. Ana bilgisayar, isteği belirtilen bağlantı noktasını dinleyecek şekilde yapılandırılmış sunucu yazılımına (genellikle Apache) iletir
  8. Sunucu isteği denetler (genellikle yalnızca yol) ve isteği işlemek için gereken sunucu eklentisini başlatır (kullandığınız sunucu diline karşılık gelen, PHP, Java, .NET, Python?)
  9. Eklenti, tam talebe erişir ve bir HTTP yanıtı hazırlamaya başlar.
  10. Yanıtı oluşturmak için bir veritabanına (büyük olasılıkla) erişilir. İsteğin yolundaki (veya verilerindeki) parametrelere dayanarak bir veritabanı araması yapılır.
  11. Veritabanındaki veriler, eklentinin eklemeye karar verdiği diğer bilgilerle birlikte uzun bir metin dizisi (muhtemelen HTML) halinde birleştirilir.
  12. Eklenti, bu verileri bazı meta verilerle (HTTP başlıkları biçiminde) birleştirir ve HTTP yanıtını tarayıcıya geri gönderir.
  13. Tarayıcı yanıtı alır ve yanıtı HTML’yi (% 95 olasılıkla kırılır) ayrıştırır.
  14. Bir DOM ağacı, bozuk HTML'den oluşturulmuştur
  15. HTML kaynağında bulunan her kaynak için sunucuya yeni istekler yapılır (genellikle görüntüler, stil sayfaları ve JavaScript dosyaları). 3. adıma geri dönün ve her kaynak için tekrarlayın.
  16. Stil sayfaları ayrıştırılır ve her birideki oluşturma bilgileri DOM ağacındaki eşleşen düğüme eklenir
  17. Javascript ayrıştırılır ve yürütülür ve DOM düğümleri taşınır ve stil bilgileri buna göre güncellenir
  18. Tarayıcı, ekrandaki sayfayı DOM ağacına ve her düğüm için stil bilgisine göre işler
  19. Sayfayı ekranda görüyorsunuz
  20. Sinirleniyorsun tüm süreç çok yavaştı.

Kaynak Bir web sayfasını oluşturma - adım adım


63

Bir web sitesine yapılan her bağlantı, düz HTTP için varsayılan hedef TCP bağlantı noktası 80 ve HTTPS için 443 olan farklı bir soket kullanır. Soketin benzersiz olması için, kaynak IP adresi, kaynak TCP bağlantı noktası, hedef IP adresi ve hedef TCP bağlantı noktasının birleşimi farklı olmalıdır.

Aynı web sitesine birden çok bağlantınız varsa (web sitesinin yalnızca 1 IP adresini kullandığı varsayılarak) aynı bilgisayardan farklı bir TCP bağlantı noktası kullanılmalıdır. Bu şekilde, her bağlantı benzersizdir.

Bununla birlikte, HTTP 1.1'den itibaren, tüm bağlantıların belirli bir süre kalıcı olduğu belirtilmelidir (aksi belirtilmediği sürece). Bu, aynı web sitesinden birden fazla kaynak istenmesi durumunda tarayıcınız tarafından aynı bağlantının yeniden kullanılabileceği anlamına gelir (örn. Css / js dosyaları). Bu aynı zamanda tarayıcınızda aynı web sitesinin birden fazla örneğinin bulunması durumunda da geçerlidir.

Windows'daysanız, netstat -no -p TCPkomut size tüm etkin TCP soketlerini ve tarayıcınızdakiler de dahil olmak üzere ilgili işlem kimliğini gösterir:

görüntü tanımını buraya girin

Unix / Linux kullanıyorsanız (bu durumda Debian), netstat -ntpveya ss -tkomutunu kullanabilirsiniz :

görüntü tanımını buraya girin


4
Netstat’ın tarayıcı olmayan bağlantılar de göstereceğini unutmayın; örneğin bir e-posta istemcisi için e-posta bağlantıları, bir haber okuyucusu için haber bağlantıları. Bu bağlantılar farklı uzak portlarda olacaktır.
DavidPostill

Bir şeyi kaçırmıyorsam, bir işletim sisteminden bahsetmemiş olmasına rağmen, sorunuzun Windows kullandığı varsayımını yapıyor gibi görünüyorsunuz. Konsol komutları verirken hangi işletim sisteminden bahsettiğinizi listelemek de iyidir.
kullanıcı45623,

9
@ user45623: Ekran görüntüsü bir Windows ekran görüntüsü olsa da netstat -n, Linux ve Mac OS dahil olmak üzere çoğu işletim sisteminde çalışmalıdır.
Heinzi

1
Windows'ta (belki de diğer işletim sistemlerinde) netstat -n -ohangi işlemin hangi bağlantıyı oluşturduğunu görmek için kullanabilirsiniz . Veya , bir GUI'deki listeyi görmek için işlem isimleri ve ikonları ve hepsini içeren SysInternal'ın tcpview komutunu çalıştırabilirsiniz .
Jonathan,

Şimdi soru şu ki, web tarayıcıları aynı sunucuya yönlendiriliyorsa farklı sekmelerdeki bağlantıları yeniden kullanıyor mu?
John Dvorak

11

Farklı web sitelerine yönelik sekmelere gelince, TCP'de yerel bağlantı noktasının farklı olmasını gerektiren hiçbir şey yoktur, {yerel IP, yerel bağlantı noktası, hedef IP, hedef bağlantı noktası} benzersiz olduğu sürece . Aynı web sitesindeki sekmeler için durum çok daha karmaşık.

Tarayıcı, diğer tüm istemci yazılımları gibi, aynı hedefe giden bağlantı için farklı bir yerel bağlantı noktası kullanır. Genel olarak, herhangi bir web sitesine görüntüler, CSS, JavaScript vb. Gömülü kaynakları getirmek için birden çok bağlantı oluşturacaktır. Ayrıca bu bağlantıları olası yeniden kullanım için bir araya getirecektir.

Aynı web sitesindeki farklı sekmelerin farklı bağlantılar kullanıp kullanmayacağını söylemek mümkün değildir , çünkü (a) genellikle her sekme için tek bir bağlantı yoktur ve (b) zamanlamaya ve doğrulamaya bağlı olarak bağlantılar olabilir. sekmeler arasında yeniden kullanıldı; ve bağlantıları tanımlamak mümkün olmadığından yerel limanları tanımlamak da mümkün değildir.


Teşekkürler. Bir bağlantının "havuzlanması" ne anlama gelir?
yoyo_fun

Kapatmak yerine, havuza geri döndürün ve yalnızca bazı zaman aşımı aralıkları için boşta kalırsa kapatarak; ve bu hedefle yeni bir bağlantı kurmadan önce havuza bakmak. HTTP canlı tutma yöntemi budur.
user207421

Yani bir havuz hafızada açılmış ve henüz kapalı olmayan bağlantıları depolayan bir veri yapısıdır.
yoyo_fun

Bu doğru, genellikle hedef IP tarafından girilen bir harita: port.
user207421

2
@EJP: HTTPS için haritayı hedef IP ve port ile anahtarlamanın güvenli olmadığını unutmayın; aynı IP ve portu çözseler bile , farklı ana bilgisayar adlarıyla olan bağlantıları birbirinden ayırmanız gerekir . Muhtemelen aynı zamanda bir tarayıcı gerekir en az bir sekme gizli modda ise farklı sekmeler ayrı bağlantılarını tutun.
Henning Makholm

6

Evet. Hayır belki. Değişir.

İlk olarak, bir tarayıcı bağlantı için bu stratejilerden herhangi birini kullanabilir:

  1. Tek bağlantı (1995’ten daha yeni bir tarayıcı için mümkün değildir)
  2. Sekme başına bir bağlantı (temel olarak # 1 ile aynı, sadece biraz daha iyi)
  3. Kaynak başına bir bağlantı (saf, ancak çok kötü çalışmıyor)
  4. Canlı tutma ile bağlantı havuzu, bağlantıları tekrar kullanma
  5. Farklı bir şey (okuma: tuhaf şeyler)

Bir tarayıcının hangi stratejiyi kullanacağını bilmenin bir yolu yoktur, ancak bir bağlantı havuzu kullanmak (ve bağlantıları yeniden kullanmak) makul bir varsayımdır.

İkincisi, TCP'nin çalışma şekli, bir kaynak bağlantı noktanız ve her bağlantı için bir hedef bağlantı noktanız vardır. Kaynak ve hedef adres / port çifti bağlantıyı tanımlar.
Her zaman [1] bir kullanımı iyi bilinen (bu kendi Advertized adresine dinlediği için) sunucuya bağlanmak için bağlantı noktası (örneğin, 80 ya da 443), diğer bağlantı noktası rasgele seçilir. Bu nedenle, bir bağlantıya hangi taraftan baktığınıza bağlı olarak, bir veya daha fazla olası bağlantı noktasına sahiptir.

Böylece, aynı sekme (ve genellikle olacaktır) kendi ucunda birkaç farklı bağlantı noktalarını kullanabilirsiniz, ancak prensip farklı sekmelerde olabilir (bağlantıları toplanır ve farklı sekmelerde farklı kaynakları aynı sunucudan yüklenen varsa) aynı bağlantı noktasını kullanır.

Sorusu açıkça bahseder yana giden , "normal" durumda bağlantı noktası numaraları, içinde bulundukları hangi sekme bakılmaksızın aynı olacaktır, ya da iki olası bağlantı noktalarından (80 ve 443) biri. Tabii ki bir URL'de açıkça farklı bir port (8080 gibi) istemek mümkündür. Yine de, bu nadir görülür.


[1] Eh, her zaman değil ... ama çok fazla karmaşık hale getirmeyelim.


Bir diğer faktör ... istemci tarafı bağlantı noktası, tarayıcı tarafından değil, işletim sistemi tarafından seçilir; ve sunucunun gördüğü istemci tarafı bağlantı noktası, bağlantı bir NAT aygıtından geçiyorsa, tarayıcının gördüklerinden farklı olabilir. En çok işletim sistemleri, bir (ayarlanabilir) geçici bağlantı noktası aralığı içinde ya da doğrusal ya da rasgele tahsis ancak bir tarayıcı olabilir farklı sunuculara birden fazla bağlantı için aynı kaynak noktası istemek. (Ve OP, sunucu portları hakkında değil, müşteri portları hakkında sorular soruyor.)
david

@david: Hangisinin doğru olduğunu (ya da neyin cevaplanacağını) söylemek zor, çünkü Q belirsiz bir haberleşme noktası, bu nedenle biraz uzun süren kapak bütün gezi. OP, istemcideki giden bağlantı noktasını soruyor. "Müşteri" , serbestçe veya rastgele seçilen (uygulama tarafından) kaynak bağlantı noktasından (TCP terimlerinden) bahsettiğimizi , ancak "giden" gerçekten bahsettiğimiz hedef bağlantı noktasını önerir . Hangi layman kelimeleri "sunucudaki port" olarak tanımlanmıştır. NAT hakkındaki yorumunuz sunucudan görüldüğü gibi doğrudur, ancak istemciyi etkilemez.
Damon,
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.