Penjelasan sederhana tentang soket Unix

20

Saya dapat mencari dan saya sudah melihat entri wikipedia dan di beberapa tempat lain, tetapi meskipun saya memiliki pengalaman pemrograman, saya tidak begitu memahami konsepnya. Bisakah Anda memperlakukan saya seperti anak berumur 10 tahun dan memberi saya penjelasan yang jelas tentang komunikasi soket?

Elzo Valugi
sumber
Tulis beberapa aplikasi pengujian kecil dengan menggunakannya. Anda bahkan tidak perlu dua mesin, hanya dua aplikasi kecil untuk memulai. Bingo.
Patrick Hughes
Panduan Beej untuk Pemrograman Jaringan tampaknya menjadi teks pengantar yang sangat populer untuk soket Unix, meskipun saya tidak bisa mengatakan saya menyukainya.
Nemanja Trifunovic
Saya sudah memutakhirkan jawaban @DanielPittman, jika saya harus menulis saya akan menulis jawaban yang sama; Namun, jika Anda ingin lebih banyak bantuan, saya akan memperpanjang. Harap edit pertanyaan Anda, letakkan latar belakang tentang apa yang Anda ketahui dan apa yang tidak Anda ketahui dan juga, beri tahu saya apakah Anda mencari bantuan tentang cara menggunakan, cara kerjanya, atau teoretis (desain protokol) atau Anda mencoba untuk mengevaluasi untuk beberapa tujuan?
Dipan Mehta
Ini adalah buku: Pemrograman Jaringan Unix . Siapa pun di bumi yang akan menjawab pertanyaan ini, akan belajar dari ibu ini. Baca buku ini, pertanyaan Anda sendiri akan menjadi lebih baik.
Dipan Mehta
Apakah maksud Anda soket BSD? Soket Unix hanya berfungsi secara lokal.
imel96

Jawaban:

15

Biarkan saya memberi Anda sebuah contoh: Katakan Anda ingin berkomunikasi / mengobrol dengan teman Anda, yang tinggal tidak di alamat Anda. Agar itu terjadi, Anda harus membuat "saluran komunikasi". Katakanlah, Anda ingin melakukan komunikasi ini menggunakan telepon. Anda tahu bahwa ada jaringan saluran telepon di kota yang diperluas ke setiap rumah.

Sekarang, ada soket telepon di rumah Anda, dan satu di rumah teman Anda. Agar komunikasi dapat berlangsung, Anda dan teman Anda harus terhubung ke jaringan dengan menghubungkan telepon Anda ke soket, di kedua ujung komunikasi. Soket dalam pemrograman sama, secara konseptual, seperti soket telepon.

Dalam pemrograman, Anda memiliki dua proses (menjalankan program) yang ingin berkomunikasi satu sama lain. Untuk itu, mereka harus menjalin hubungan komunikasi di antara mereka sendiri. Sekali lagi, ada jaringan yang tersedia, mereka hanya perlu terhubung ke jaringan ini menggunakan semacam soket. Soket Unix adalah salah satu soket yang menyediakan konektivitas / daya sambung ke jaringan. Jadi, di masing-masing dua program, Anda akan memiliki beberapa kode yang melakukan pekerjaan menghubungkan ke jaringan melalui soket.

Sisanya adalah detail.

Nazar Merza
sumber
2
Saya akan menurunkan suara ini jika saya memiliki reputasi yang cukup. Teks Anda tidak menjelaskan cara kerja soket. Teks umum yang sama seperti di Wikipedia. Bagaimana cara soket mendengarkan ? Bagaimana soket telepon Anda dapat mendengarkan koneksi?
Hijau
21

Soket Unix adalah soket dua arah - seperti soket berbasis IP, yang mungkin Anda kenal, dan sejenisnya dengan pipa, yang mungkin Anda kenal.

Mereka memiliki seperangkat properti yang menarik:

  • Mereka berada dalam domain "host lokal" saja - Anda tidak dapat mengaksesnya melalui jaringan, hanya pada mesin lokal.
  • Anda dapat membuatnya dalam mode "streaming", di mana mereka hanya melewatkan data seperti pipa sebagai aliran byte.
  • Anda dapat membuatnya dalam mode "datagram", di mana mereka mempertahankan batas antara operasi pengiriman. Ini memungkinkan Anda untuk mempertahankan pembingkaian tanpa membangun protokol pembingkaian Anda sendiri di atas aliran byte.
  • Mereka menggunakan sistem file, atau di Linux, "namespace abstrak", sebagai "alamat" mereka
  • Anda mungkin dapat menyamar sebagai ujung lainnya, mengidentifikasi perangkat lunak penghubung dengan aman, atau mengoper file melalui soket, tergantung pada OS Anda.

Pada dasarnya, mereka setara dengan soket lainnya - mereka memiliki sifat yang sedikit lebih menarik daripada pipa, tetapi sebaliknya tidak berbeda secara radikal. Mereka memang memiliki latensi IPC lebih tinggi daripada pipa, dan seringkali buffer lebih besar - meskipun Anda mungkin dapat menyetelnya, dan itu tergantung pada platform.

Properti terakhir yang menarik untuk diingat adalah bahwa mereka menggunakan sistem file sebagai namespace mereka - jadi seperti pipa bernama, bukan pipa anonim, dalam perangkat lunak tanpa hubungan sebelumnya yang dapat berkomunikasi. (Soket namespace abstrak sama, tetapi jalur "file" tidak harus ada.)

Tidak ada yang lebih dalam dari itu - mereka tidak memiliki properti tersembunyi super-rahasia yang membuat mereka sangat berbeda dari pipa biasa, atau koneksi TCP ke localhost.

Daniel Pittman
sumber
3
Terima kasih, tetapi saya masih merasa rumit dan penuh pertengkaran.
Elzo Valugi
2
Tolong jangan tersinggung oleh percobaan ini pada jawaban satu baris, untuk melihat apakah itu lebih baik membantu: "Anda tahu bagaimana soket TCP / IP dan UDP / IP bekerja? Ini sama, hanya tanpa bagian IP."
Daniel Pittman
Saya tidak tersinggung, saya hanya ingin mengerti. Terima kasih. Saya akan mempelajarinya lebih detail.
Elzo Valugi
4
Menentukan suatu istilah dengan menggunakan istilah itu (yaitu: "soket Unix adalah soket dua arah") tidak menjelaskan apa pun kepada seseorang yang tidak tahu apa yang dimaksud dengan soket.
Bryan Oakley