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, accept
bir 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:80
S bağlantısının sonunu temsil eder ve döndürülen soket ile ilişkilendirilir.accept
10.0.0.5:55715
bağ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ç