Soket nedir?


49

Birisi bana soketin ne olduğunu açıklayabilir mi? SSL bağlamında birçok kısaltmada görüyorum.

Ayrıca, neden soket denir? Tamamen mi çünkü icat ettikleri bir isimdi? Yoksa ilk buldukları isim miydi?


9
Layman açısından: bir soket bir telefon. Elinizde tuttuğunuz şey, başka bir telefonla konuşmanıza olanak sağlayan şeydir. Bu benzetme biraz bozuluyor: Çoğu telefon görüşmesi eşler arası. Soket bağlantıları, sunucuya istemcidir. İstemci (tarayıcılar gibi iş istasyonu yazılımı gibi ancak bunlarla sınırlı olmamak üzere) bir sunucuya (web sunucusu, dosya sunucusu, kimlik doğrulama sunucusu veya diğer) bağlanır. Analojideki başka bir kusur: bir soket bağlantısını kapattığınızda soket yok edilir ve yeni bir bağlantı kurmadan önce yeni bir soket oluşturmanız gerekir.
G-Man

Bir benzetme için o kadar da kötü değil. Bir sunucu sadece bir çağrı merkezidir ve bir seferde yüzlerce aktif çağrı yapabilir.
MSalters

Yanıtlar:


42

Bir soket iletişim için sadece mantıklı bir son noktadır. Taşıma katında varlar. Bir soketteki şeyleri gönderip alabilir, bir soketi bağlayabilir ve dinleyebilirsiniz. Bir soket bir protokole, makineye ve porta özgüdür ve paketin başlığında olduğu gibi ele alınır.

Beej'in Ağ Programlama ve İşlemler Arası İletişim kılavuzları hem soketlerin nasıl kullanılacağı hakkında iyi bilgiye sahiptir, hatta bu soruyu tam olarak cevaplamaktadır .


64

En basit ifadeyle, bir soket ağ bağlantısını temsil eden sahte bir dosyadır. Bir soket oluşturulduktan sonra (uygun ilkellerin ve diğer ana bilgisayarı tanımlamak için uygun parametrelerin kullanılmasıyla) sokete yazar, gönderilen ağ paketlerine dönüştürülür ve ağdan alınan veriler soketten okunabilir.

Bir açıdan soketler borulara çok benziyor: tıpkı bunları kullanan programlardaki dosyalara benziyor, ancak okumaya ya da diske yazmaya neden olmuyor; bunun yerine, başka bir programla iletişim kurmaya izin veriyorlar (borular durumunda yerel ve soketler durumunda muhtemelen uzak). Ayrıca, bahsettiğiniz gibi, iki yönlü iletişim de sunar (bir çift doğru şekilde bağlanmış boru gibi).

Son olarak, tek bir makinedeki programların TCP gibi standart ağ protokollerini kullanarak iletişim kurması yaygındır; Ağ donanımına (eğer varsa!), bilgisayar sağlama toplamı vb. yollara gitmek, sadece aynı ana bilgisayara geri dönmek için zararsız olacaktır: işte Unix alan ad soketlerinin girdiği yer. Bunlar normal soketler gibi. Uzaktaki işlemler yerine aynı ana bilgisayardaki işlemleri bağlarlar ve hiçbir ağ kaynağını kullanmaya çalışmazlar. Bu şekilde, süreçler arası bir iletişim aracıdırlar.

Üçlüden bahsedildiği gibi, BSD'nin tarihi boyunca borular soketlerden daha önce tanıtılmış ve bir kez vardıklarında soketler kullanılarak yeniden uygulanmıştır. Aynı referans, FreeBSD İşletim Sisteminin Tasarımı ve Uygulaması, boruların daha sonra performans nedenleriyle soketsiz bir uygulamaya döndürüldüğünden bahseder: bu kesinlikle boruların benzerlikleri paylaştığı gerçeğinin altını çizer.


3
Belki ayrıca boruların yuvaları önceden çektiğinden de bahsediyoruz, ancak yuva arayüzü Unix'e eklendiğinde, yerel soketleri kullanarak boruları yeniden yerleştirmek çok mantıklı geliyordu.
üçlü

@tripleee: Harika bir tarihi nokta. Referans vermek ister misiniz?
dhag

Hızlı googling , FreeBSD İşletim Sisteminin Tasarım ve Uygulamasında 40. sayfada ; Metin, 4.2BSD’de bu değişikliğe değinmekte ancak performansın nedenleri yüzünden artık böyle yapılmayacağını da açıklığa kavuşturmaktadır.
üçlü

Mükemmel, cevabımı buna ekleyeceğim.
15'te dhag

En iyi tekno cevap
kaosguru

7

Bir soket soyutlama. Uygulamaların, bir sistem kaynağını (bu durumda ağ bağlantısı), işletim sisteminin herhangi bir sayıda uygulama tarafından sınırlı bir kaynağın kullanımına aracılık etmesini ve düzenlemesini sağlayacak şekilde kullanmalarını sağlayan bir arayüz sağlar.

Soket üzerinden gönderilen veriler posta zarfları olarak düşünülebilirse, soket posta kutunuz olur. Evinize (program) bir posta kutusu (soket) ekleyin ve giden postanızı (verilerinizi) içine yerleştirin. Belirli bir zamanda postacı (işletim sistemi) gelir ve giden postanızı alır ve gelen postaları aynı posta kutusuna bırakır. Giden postanız, sizin tarafınızdan postanenin kamyonu (ağ bağlantısı) aracılığıyla tüm komşularınızın postasıyla birlikte alıcıya iletilir. Bu, mektubu kendiniz teslim etme masrafına, zamana, zorluğa, vs. ihtiyaç duymadan uzaktaki insanlarla iletişim kurmanıza olanak sağlar.

Neden 'soket' olarak adlandırıldıklarına gelince, mucitlerin istediklerini istedikleri gibi çağırmaları fikri büyük olasılıkla orada büyük bir rol oynar. Yine de bence kötü bir isim değil :)


7

Şimdi, bu ne?

Bir soket veya "soket" birkaç şey olabilir:

Her şeyden önce, bir düşünce modeli ve bir uygulama programlama arayüzüdür (API) . Bu, tam olarak belirlenmiş bir sözleşmeye göre izlemeniz gereken bir dizi kural ve bir şeyler yapan programlar yazmak için kullanabileceğiniz bir dizi fonksiyona sahip olduğunuz anlamına gelir. Bu özel durumda, bir şey başka bir programla veri alışverişi demektir.

Prizler API genel olarak "iletişim" in detaylarını geniş ölçüde özetler. Kiminle konuştuğunu ve nasıl, hepsi bir (neredeyse) tutarlı ve aynı çerez kesici formunu içine alır.
Farklı "etki alanlarında" (örneğin "unix soketi" veya "internet soketi" gibi) ve farklı iletişim türlerinde (örneğin "datagram" soketi veya "akış" soketi) soketler oluşturabilir ve farklı alıcılarla konuşabilirsiniz. ve her şey tam olarak aynı şekilde çalışıyor (% 99, açık bir şekilde hesaba katmanız gereken küçük farklar var).

Aynı bilgisayardaki veya farklı bir bilgisayardaki başka bir programla konuşup konuşmadığınızı veya bu bilgisayarlar arasında IPv4 veya IPv6 ağı olup olmadığını veya belki başkalarını bilmeniz gerekmez (ve bilmek bile istemezsiniz!). Hiç duymadığınız protokol.

socketaynı zamanda özel bir dosya türüdür (Unix'deki her şey bir dosyadır) "soket " i oluşturan kütüphane işlevinin (veya sistem çağrısı) adıdır .

Nasıl karşılaştırır ...

soketler borular ve isim boruları ile aynı kategoriye girer

Bir boru, aynı bilgisayardaki bir okuyucu ve bir yazar (her ikisi de program olan) arasında tek yönlü iletişim aracıdır . Bir veri akışını simüle eder (tıpkı TCP gibi).
Başka bir deyişle, boru açısından bireysel "mesajlar" veya "veri blokları" mevcut değildir. Herhangi bir miktarda veriyi "bir uca" kopyalayabilirsiniz ve bir başkası, "diğer ucunda" istediğiniz bayt sırasındaki herhangi bir miktarda veriyi (mutlaka aynı ve mutlaka bir seferde değil) okuyabilir onu itti.

Bir adlandırılmış boru, iyi, sadece bir boru olan dosya sisteminde bir isim sahibi olan . Yani, bir dosya gibi görünen ve davranan bir şey, dizin listesinde görünür ve açabilir, yazabilir, vb. Yapabilirsiniz. Ayrıca, özel dosyalar da oluşturabileceğinizi unutmayın (bu, adlandırılmış bir soket olur) .

Bir soket, diğer taraftan, aynı yoldan yazabileceğiniz ve okuyabileceğiniz ve iki yönlü bir iletişim için iki ayrı sokete ihtiyaç duymayacağınız anlamına gelen, iki yönlü ("çift yönlü") bir iletişim aracıdır.
Ayrıca, bir soket bir akış gibi davranabilir (bir boruya özdeş) veya ayrık, güvenilmez mesajlar gönderebilir veya ayrık, sıralı mesajlar gönderebilir (herhangi bir etki alanında ilk iki çalışma, yalnızca "unix etki alanında" ). Tamamen farklı bir bilgisayardaki birine mesaj gönderebilir (veya bir akışı simüle edebilir). Bir soket, bazı koşullar altında bire çok iletişim (çok noktaya yayın) bile yapabilir.

Bunu akılda tutarak, soketlerin çok daha karmaşık bir şey yaptıkları ve genellikle borulardan daha fazla ek yüke sahip oldukları (temelde memcpybir tampondan basit ve bir tampondan daha fazla değildir !) Olduğu, ancak yerel prizler oluşturduğunuzda (yani aynı şekilde) olduğu açıktır. bilgisayar), işletim sistemi genellikle yoğun olarak optimize edilmiş hızlı bir yol uygular, bu yüzden gerçekten bir fark yoktur.

Ağlar açısından bazen belirtilen süreçler arası iletişim

Evet, soketler süreçler arası iletişimin olası bir yoludur (paylaşılan bellek ve borular alternatiflerin örnekleridir). Hepsi aynı anda yukarıda açıklandığı gibi "ağ oluşturma" için kullanılıyorlar.


1

IP üzerinden udp veya tcp için,

Bir soket adresi, bir IP adresinin ve bir port numarasının birleşimidir.

Bir IP adresi internetteki bir makinenin adresidir, örn. unix.stackexchange.com has address 198.252.206.140

Bununla birlikte, her makine birden fazla hizmet sunabilmelidir, bu nedenle çoğu makine 80 numaralı bağlantı noktasında http, 22 numaralı bağlantı noktasında ssh vb. Sağlar.

Yani unix.stackexchange.com:80liman 80arasında unix.stackexchange.com(bir soket) Bu web sitesinin erişim noktasıdır.

Ancak başka tip soketler de vardır, aşağıdaki yorumlara bakınız.


5
tcp / ip sadece bir soket türüdür. Tcp / ip ile ilgisi olmayan başkaları da var.
psusi

kaç çeşit priz var?
Abdul Al Hazred,

1
@AbdulAlHazred, ip networking ile kullanılan dört ortak tip, ip6 ile aynı, unix ile iki ve IPX ile iki tane biliyorum. Ax25, ATM veya Appletalk'a bakmadım. Linux üzerinde desteklenen başka protokoller var ve linux'un desteklemediği protokoller var. Çoğu durumda, her protokol akış (tcp) ve datagram (udp) soketlerine sahiptir. Ham soketler de yaygındır ve imcp de bir soket arayüzüne sahip olabilir.
hildred

Mesele şu ki, bu cevap sadece bir soket tipini kapsaması bakımından eksik ve genel olarak soketleri her zaman ağ soketleriymiş gibi, özellikle de IP ( AF_INET) soketleri temsil ettiği için yanıltıcı .
üçlü

0

Ağ kurma hakkında sorduğunuza inanıyorum. Bu nedenle, TCP hizmetleri iletişim noktası olarak soketleri kullanır ve bir IP adresi, protokol ve port numarasından oluşur.

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.