Bir soket ve bir port arasındaki fark


121

Birisi bir port ve bir soket arasındaki farkı çok net bir şekilde açıklayabilir mi? Bir bağlantı noktasının bir uygulama işlemi için ağa bir kapı olarak hizmet ettiğini ve uygulama işleminin ağ iletişimini işlemek için verilen bağlantı noktası numarasına bir soket bağlantısı kullandığını biliyorum, ancak tek bir bağlantı noktası numarasını dinleyen birden çok işleminiz olduğunda, buluyorum soket ve port arasındaki farkı ve hepsinin nasıl bir araya geldiğini anlamak zor.


9
Bağlantı noktası fiziksel bir adres, soket bir nesne ise.
süpermen

14
Bir paket bir limandaki sokette bir cebe çarparsa ...
user16764

Yanıtlar:


116

S bir sunucu programıdır: Diyelim ki bu bir HTTP sunucusu, bu yüzden 80 olan HTTP için iyi bilinen bağlantı noktası numarasını kullanacak. IP adresi olan bir ana bilgisayarda çalıştırıyorum 10.0.0.4, böylece bağlantıları dinleyecektir 10.0.0.4:80(çünkü herkesin onu bulmayı umduğu yer burasıdır).

S'nin içinde bir soket oluşturacağım ve onu bu adrese bağlayacağım : şimdi, işletim sistemi gelen bağlantıların S10.0.0.4:80 işlemime belirli bir soket üzerinden yönlendirilmesi gerektiğini biliyor .

  • Soket bağlandığında netstat çıkışı:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB. yerel adres sıfırdır, çünkü S müşterilerinin ona nasıl ulaştığını önemsemez.

Bir kez S Bu soket bağlı olan, bu edecektir kabul bağlantıları - Yeni bir istemci her bağlandığında, acceptbir döndüren yeni o müşterinin özel olan soket,

  • Bağlantı kabul edildikten sonra netstat çıkışı:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80S bağlantısının sonunu temsil eder ve döndürülen soket ile ilişkilendirilir.accept
    • 10.0.0.5:55715bağlantının müşterinin sonudur ve soket geçirilen istemci ile ilişkilidir bağlamak . İstemcinin portu, bu TCP bağlantısındaki paketleri doğru prosese yönlendirme paketleri dışında hiçbir şey için kullanılmaz: istemcinin çekirdeği tarafından geçici port aralığından rastgele atanır.

Şimdi, S mutlu bir şekilde daha fazla müşteri bağlantısı kabul etmeye devam edebilir ... her biri kendi soketine sahip olacak, her soket benzersiz bir TCP bağlantısıyla ilişkilendirilecek ve her bağlantının benzersiz bir uzak adresi olacak. S (varsa) istemci durumunu soketle ilişkilendirerek izler.

Yani, kabaca:

  • IP adresi, ağdaki ana bilgisayarlar arasında yönlendirme içindir.
  • port, ana bilgisayardaki doğru sokete yönlendirmek içindir
    • Neredeyse doğru işlem dedim , ancak aynı sokette kabul eden birden fazla (genellikle çocuk) işlem olması gerçekten mümkün ...
    • ancak, eşzamanlı acceptçağrılardan biri geri döndüğünde, bunu yalnızca bir işlemde yapar, her gelen bağlantının soketi sunucunun bir örneğine özgüdür
  • soket, bir işlemin işletim sistemi ile bir dosya tanıtıcısı gibi belirli bir bağlantı hakkında konuşmak için kullandığı nesnedir
    • yorumlarda belirtildiği gibi, hiç bağlantı noktası kullanmayan soketler için pek çok başka kullanım alanı vardır: örneğin socketpair , birbirine bağlanmış bir adresleme düzeni olmayan bir çift soket oluşturur - bu boruyu kullanmanın tek yolu bu sürecin socketpairçocuğu olan ve birini miras alan ya da açıkça bu işlemden yuvalardan birini geçen süreç olan süreç

1
Bu değer @Useless söz yuva yapmak değil cevap gösterir gibi IP tabanlı gerekmektedir. OP ile tam olarak alakalı değil, ancak soket ailelerinin bir açıklaması bu cevabı bulmaya yardımcı olacaktır.
hafichuk

İyi nokta - Çok işlemli sunucular hakkında yazmaya başladığımda, kapsamın sürünmesi konusunda zaten endişeleniyordum. Düzenlemek için çekinmeyin ve eğer yapmazsanız, bir noktada buna
yaklaşacağım

11
bu hiç işe yaramaz değil
l

Elektronikteki soketi anlamaya çalışıyorum, bir sunucu bağlantı noktası numarasına bir soketi bağlar, bazı elektronik cihazların aküyü şarj etmek için bir eklenti beklemesini duvardaki sokete koymak gibidir. Ancak kabul edildiğinde, yeni bir soket döndürülür? Neden? Duvardaki yeni bir soket var mı? Lütfen biraz analoji ile anlamlandırmama yardım et.
Aaron Shen

3
Buradaki sorun analojinizin yanlış olması. Fiziksel dünyada bir soketin ne anlama geldiğini unutun - bu başka bir şeyin metaforu değil, sadece belirli bir teknik yazılım konsepti için teknik bir terimdir. Fiziksel ağ bağlantı noktaları veya soketleri ile bile güçlü bir şekilde ilişkili değildir - yalnızca bu alanda kendi terimleriyle ilgili bir kavram olarak anlamanız gerekir.
İşe yaramaz

49

Makinenizi bir apartman binası olarak düşünün:

  • Bir liman daire numarasıdır.

  • Bir soket bir dairenin kapısıdır.

  • IP adresi, binanın cadde adresidir.


3
Bu benzetmeyi sevdim, ancak şu anda o dairenin içinde olmayı ve çok sayıda kapısı olan sonsuz bir koridora bakmayı düşünüyorum. Çıkamam. Çıkamıyorum! :)
Daniel Hollinrake

1
@Caleb A socket is the door of an apartment.Fakat bir limanda çok sayıda soket açılmış olamaz mıydı?
Suhail Gupta

3
@suhail Bazen bir dairede birden fazla kapı vardır. Hepsinde aynı daire numarası var, ama onlar farklı kapılar.
Caleb

45

Bağlantı noktası, TCP ve UDP protokollerinde adresin bir parçasıdır. İşletim sisteminin, hangi uygulamanın alınan verileri alması gerektiğini belirlemesine yardımcı olmak için kullanılır. Bir işletim sistemi TCP ve UDP'yi desteklemek için bağlantı noktalarını desteklemelidir, çünkü bağlantı noktaları TCP ve UDP'nin ayrılmaz bir parçasıdır.

Soket, işletim sisteminin ağ verilerini gönderip almalarını sağlamak için uygulamalara sunduğu arabirimin bir parçasıdır. Soket uygulamalarının çoğu, bazıları port kavramına sahip olmayan, TCP ve UDP dışındaki birçok protokolü desteklemektedir. Bir işletim sisteminin TCP veya UDP'yi desteklemek için yuvaları desteklemesi gerekmez; uygulamaların kullanımı için farklı bir arayüz sağlayabilir. Bir soket, belirli bir porttan veri gönderip almanın sadece bir yoludur.


Bir soket temel olarak aşağıdakilerden oluşan 4'lü bir demetdir: Kaynak IP: Port-Dest IP: Port.
Tony Aslan

portun sadece TCP ve UDP protokollerinde mevcut olduğunu mu kastediyorsunuz? Peki ya http ve diğer protokoller?
H. Aqjn

HTTP, TCP veya UDP gibi taşıma katmanı protokollerinin üzerinde çalışan bir uygulama katmanı protokolüdür. Kendi bağlantı noktası konseptine sahip değil, altta yatan taşıma katmanı protokolünden miras alıyor.
Dirk Holsopple

8

Bilgisayarın, onu ağda ayrı bir varlık olarak tanımlayan bir IP adresi vardır. Bu bilgisayarla bağlantılar arasında ayrım yapmamıza izin vermek için buna ek bir sayı ekledik. Bu port numarası. Bağlantının işletim sistemi tarafında arabelleklere, bağlantı durumuna vs. ihtiyacınız var. Bu mantıksal nesne soket.


0

Bir soket, bir bağlantı noktasına giden iletişim yoludur. Programınızın ağ üzerinden iletişim kurmasını istediğinizde, ona bağlantı noktasını işaretlemenin bir yolunu verdiniz ve bu bir soket oluşturarak ve bağlantı noktasına bağlayarak yapılır. Temel olarak soket = IP + portları Soketler port + ip'e erişim sağlar


-1

Bir IP adresi cihazı tanımlar, yani belirli bir cihazın adresini, şimdi IP portunu kullanarak makineye ulaştığınızda, o makinede hangi işlemin iletişim kuracağını tanımlar.

Gerçek iletişimin gerçekleşmesi için soket adı verilen her iki port + IP'ye ihtiyacınız var.

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.