Unix soketlerinin basit açıklaması


20

Arama yapabilir ve wikipedia girişine ve diğer bazı yerlere zaten baktım , ancak bazı programlama deneyimim olmasına rağmen, konsepti gerçekten anlamıyorum. Bana 10 yaşında gibi davranabilir ve soket iletişimi hakkında net bir açıklama yapabilir misiniz?


Bunları kullanarak birkaç küçük test uygulaması yazın. İki makineye bile ihtiyacınız yok, başlamak için sadece iki küçük uygulamaya ihtiyacınız var. Bingo.
Patrick Hughes

Beej'in Ağ Programlama Kılavuzu Unix soketlerine çok popüler bir giriş metni gibi görünüyor, ancak hoşuma gittiğini söyleyemem.
Nemanja Trifunovic

Zaten @DanielPittman cevabını iptal ettim, eğer yazmak zorunda kalırsam aynı cevabı yazardım; Yine de, daha fazla yardım istiyorsanız, uzatırdım. Lütfen sorunuzu düzenleyin, bildiklerinize ve bilmediklerinize biraz arka plan ekleyin ve ayrıca nasıl kullanılacağına, içeride nasıl çalıştıklarına veya teorik (protokol tasarımı) ya da denediğinize bakın. bir amaçla değerlendirmek için?
Dipan Mehta

İşte bir kitap: Unix Network Programming . Bu soruyu cevaplayacak yeryüzündeki herkes bu anneden öğrenecekti. Bu kitabı okuyun, sorunuzun kendisi daha iyi olacak.
Dipan Mehta

Şunu mu demek istediniz: BSD sockets Unix soketleri yalnızca yerel olarak çalışır.
imel96

Yanıtlar:


15

Size bir örnek vereyim: Adresinizde olmayan arkadaşınızla iletişim kurmak / sohbet etmek istediğinizi varsayalım. Bunun gerçekleşmesi için bir "iletişim kanalı" kurmalısınız. Diyelim ki bu iletişimi telefonları kullanarak yapmak istiyorsunuz. Şehirde her eve yayılan bir telefon hattı ağı olduğunu biliyorsunuz.

Şimdi, evinizde bir telefon soketi ve arkadaş evinizde bir telefon soketi var. İletişimin gerçekleşmesi için, siz ve arkadaşınız, iletişimin her iki ucundaki telefonunuzu sokete takarak ağa bağlanmanız gerekir. Programlamadaki soketler kavramsal olarak telefon soketleriyle aynıdır.

Programlamada, birbirleriyle iletişim kurmak isteyen iki işleminiz (çalışan programlar) vardır. Bunun için kendi aralarında bir iletişim bağlantısı kurmaları gerekiyor. Yine, kullanılabilir bir ağ var, sadece bir tür soket kullanarak bu ağa bağlanmaları gerekiyor. Unix soketleri, ağa bu bağlantı / takılabilirliği sağlayan böyle bir sokettir. Bu nedenle, iki programın her birinde, ağa soketler aracılığıyla bağlanma işini yapan bir kod parçasına sahip olacaksınız.

Gerisi detaylar.


2
Yeteri kadar itibara sahip olsaydım bunu küçümserdim. Metniniz soketin nasıl çalıştığını açıklamıyor. Wikipedia'dakiyle aynı genel metin. Soket nasıl dinliyor ? Telefon soketiniz nasıl bağlantı dinleyebilir ?
Yeşil

21

Unix soketleri, tıpkı muhtemelen tanıdığınız bir IP tabanlı soket gibi ve muhtemelen aşina olduğunuz bir boruya benzeyen çift yönlü bir sokettir.

Küçük bir dizi ilginç özellik var:

  • Yalnızca "yerel ana bilgisayar" etki alanındadırlar - ağ üzerinden erişemezsiniz, yalnızca yerel makinede.
  • Bunları "akış" modunda oluşturabilirsiniz, burada sadece boru gibi verileri bayt akışı olarak iletirler.
  • Bunları, gönderme işlemleri arasındaki sınırları korudukları "datagram" modunda oluşturabilirsiniz. Bu, bayt akışının üstünde kendi çerçeveleme protokolünüzü oluşturmadan çerçeveyi korumanıza olanak tanır.
  • Dosya sistemini veya Linux'ta "adres" olarak bir "soyut ad alanı" kullanırlar
  • İşletim sisteminize bağlı olarak, diğer ucu taklit edebilir, bağlantı yazılımını güvenli bir şekilde tanımlayabilir veya dosya tanıtıcılarını soketten geçirebilirsiniz.

Esasen, diğer herhangi bir soketin eşdeğeridir - borulardan biraz daha ilginç özelliklere sahiptirler, ancak aksi takdirde radikal olarak farklı değildirler. Tipik olarak bir borudan daha yüksek IPC gecikmesine ve genellikle daha büyük arabelleklere sahiptirler - ancak bunu ayarlayabiliyor olabilirsiniz ve platforma bağlıdır.

Hatırlanması gereken son ilginç özellik, dosya sistemini ad alanları olarak kullanmalarıdır - bu nedenle, daha önce bir ilişkisi olmayan bu yazılımda anonim bir boru yerine adlandırılmış bir boru gibidir. (Soyut ad alanı yuvaları aynıdır, ancak "dosya" yolunun bulunması gerekmez.)

Bundan daha derin bir şey yoktur - onları tipik bir borudan veya localhost'a bir TCP bağlantısından radikal olarak farklı kılan herhangi bir süper gizli gizli mülkleri yoktur.


3
Teşekkürler ama hala karmaşık ve argot dolu buluyorum.
Elzo Valugi

2
Lütfen bundan daha iyi yardım edip etmediğini görmek için tek satırlık bir yanıttan rahatsız olmayın: "TCP / IP ve UDP / IP yuvalarının nasıl çalıştığını biliyor musunuz? Bunlar aynı, sadece IP kısmı olmadan."
Daniel Pittman

Kırgın değilim, sadece anlamak istiyorum. Teşekkürler. Bunları daha ayrıntılı olarak inceleyeceğim.
Elzo Valugi

4
Bir terimi bu terimi kullanarak tanımlamak (yani: "Unix yuvaları çift yönlü bir sokettir") soketin ne ile başlayacağını bilmeyen birine hiçbir şey açıklamaz.
Bryan Oakley

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.