it-swarm-tr.com

Soket nedir?

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

Ayrıca, neden soket olarak adlandırılır? Sadece icat ettikleri bir isim olduğu için mi? Yoksa ortaya çıktıkları ilk isim miydi?

57
chrisjlee

Bir soket, iletişim için sadece mantıklı bir son noktadır. Taşıma katmanında bulunurlar. Bir sokete bir şeyler gönderip alabilir, bir soketi bağlayabilir ve dinleyebilirsiniz. Bir soket bir protokole, makineye ve bağlantı noktasına özgüdür ve bir paketin başlığında olduğu gibi adreslenir.

Beej'in Ağ Programlama ve İşlemler Arası İletişim kılavuzlarının her ikisinin de soketlerin nasıl kullanılacağı hakkında iyi bilgileri vardır ve hatta bu tam soruyu cevaplayın .

48
Shawn J. Goff

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

Bir açıdan, soketler borulara çok benzer: sadece bunları kullanan programlara dosyalar gibi görünürler, ancak bir diske okuma veya yazma ile sonuçlanmazlar; bunun yerine, başka bir programla iletişim kurmaya izin verirler (borular durumunda yerel ve muhtemelen soketler durumunda uzaktan). Ayrıca, belirttiğiniz gibi, çift yönlü iletişim (düzgün bağlanmış bir çift boru gibi) sunarlar.

Son olarak, tek bir makinedeki programların TCP gibi standart ağ protokollerini kullanarak iletişim kurması yaygındır; yalnızca aynı Ana Bilgisayara geri dönmek için ağ donanımına (varsa!), bilgisayar sağlama toplamlarına vb. gitmek için boşa harcayacaktır: Unix etki alanı soketlerinin geldiği yer budur. işlemleri uzak işlemler yerine aynı Ana Bilgisayara bağlarlar ve hiçbir ağ kaynağı kullanmaya çalışmazlar. Bu şekilde, süreçler arası iletişim aracıdırlar.

Üçlüden de bahsedildiği gibi, BSD tarihi boyunca borular soketlerden daha erken sokulmuş ve var olduklarında soketler kullanılarak yeniden uygulanmıştır. Aynı referans, FreeBSD İşletim Sisteminin Tasarımı ve Uygulaması, boruların daha sonra performans nedeniyle soketsiz bir uygulamaya geri döndüğünden bahseder: bu kesinlikle boruların benzerlikleri paylaştığı gerçeğinin altını çizer.

74
dhag

Şimdi, nedir bu?

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

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

Yuva API'sı genel olarak "iletişim" in ayrıntılarını büyük ölçüde özetler. Kiminle ve nasıl konuştuğunuzu tek bir (neredeyse) tutarlı ve özdeş çerez kesici formuyla kapsar.
Farklı "alan adlarında" (örneğin "unix soketi" veya "internet soketi") ve farklı iletişim türlerinde (örn. "Datagram" soketi veya "akış" soketi) soketler oluşturabilirsiniz ve farklı alıcılarla konuşun ve her şey tamamen aynı şekilde çalışır (% 99, açıklamanız gereken küçük farklılıklar 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 de başka bir bilgisayar olup olmadığını bilmenize (hatta bilmek bile istemiyorsunuz!) daha önce hiç duymadığınız bir protokol.

socket ayrıca özel bir tür dosya olan her şeyi "soket" oluşturan kütüphane işlevinin (veya sistem çağrısının) adıdır. içinde Unix bir dosyadır).

Karşılaştırması ...

soketler borular ve isim boruları ile aynı kategoriye girer

Yöneltme, aynı bilgisayardaki bir okuyucu ile bir yazar (her ikisi de program) arasındaki iletişimin tek yön iletişimidir. Bir stream veri benzetir (tıpkı TCP gibi).
Yani, borunun bakış açısından tek tek "mesajlar" veya "veri blokları" mevcut değildir. İstediğiniz miktarda veriyi "bir uç" a kopyalayabilirsiniz ve bir başkası "diğer uçta" aynı bayt sırasına göre istediğiniz miktarda veriyi (mutlaka aynı değil ve bir seferde değil) okuyabilir. içeri itti.

A adlı pipo, basitçe basitçe bir pipo dosya sisteminde bir isme sahiptir. Yani, bir dosya gibi görünen ve davranan bir şeydir, dizin listesinde görünür ve açabilirsiniz, yazabilirsiniz, vb. Soket özel dosyaları da oluşturabileceğinizi unutmayın (bu adlandırılmış bir soket olacaktır) .

Öte yandan, bir soket iki yönlü ("dubleks") iletişimin bir yoludur, yani aynı sokete yazıp okuyabileceğiniz anlamına gelir ve iki ayrı sokete ihtiyacınız yoktur. iki yönlü iletişim.
Ayrıca, bir soket bir akış görevi görebilir (bir boruya özdeştir) veya ayrık, güvenilir olmayan mesajlar gönderebilir veya ayrık, sıralı mesajlar gönderebilir (herhangi bir alanda ilk iki çalışma, yalnızca son "unix alan adı" nda). Tamamen farklı bir bilgisayardan 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 göz önünde bulundurarak, soketlerin çok daha karmaşık bir şey yaptığı ve genellikle borulardan daha fazla yüke sahip olduğu açıktır (temel olarak basit bir memcpy ve arabellek!), ancak yerel soketler (yani aynı bilgisayarda) oluşturursanız, işletim sistemi genellikle çok optimize edilmiş hızlı bir yol uygular, bu yüzden gerçekten çok fazla fark yoktur.

ağlarla ilgili olarak bazen bahsedilen süreçler arası iletişim

Evet, soketler süreçler arası iletişimin olası bir yoludur (paylaşılan bellek ve borular alternatiflere örnektir). Aynı zamanda, yukarıda açıklandığı gibi "ağ oluşturma" için kullanılmaktadırlar.

8
Damon

Bir soket soyutlama. Uygulamaların, bir sistem kaynağını (bu durumda ağ bağlantısı), işletim sisteminin sınırlı sayıda kaynağın kullanımına çok sayıda uygulama tarafından aracılık yapmasını ve düzenlemesini sağlayacak şekilde kullanması için bir arabirim sağlar.

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

Neden 'soket' olarak adlandırıldıklarına gelince, mucitlerin istedikleri her şeyi aramaları fikri muhtemelen orada büyük bir rol oynamaktadır. Yine de, bence kötü bir isim değil :)

7
Andrew Lambert

IP üzerinden udp veya tcp için,

Soket adresi, bir IP adresi ile bir port numarasının birleşimidir.

IP adresi, İnternet'teki bir makinenin adresidir; unix.stackexchange.com has address 198.252.206.140

Ancak her makine birden fazla hizmet verebilmelidir, bu nedenle çoğu makine 80 numaralı bağlantı noktasında http (web sayfaları) ve 22 numaralı bağlantı noktasında ssh vb. Sağlar.

Yani unix.stackexchange.com:80 Liman 80 nın-nin unix.stackexchange.com (bir soket) bu web sitesinin erişim noktasıdır.

Ancak başka soket türleri de vardır, aşağıdaki yorumlara bakın.

2
ctrl-alt-delor

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

0
Dragos Alexe