Apa perbedaan antara soket Unix dan soket TCP / IP?

Jawaban:

191

Sebuah socket UNIX merupakan mekanisme komunikasi antar proses yang memungkinkan pertukaran data dua arah antara proses yang berjalan pada mesin yang sama.

Soket IP (terutama soket TCP / IP) adalah mekanisme yang memungkinkan komunikasi antar proses melalui jaringan. Dalam beberapa kasus, Anda dapat menggunakan soket TCP / IP untuk berbicara dengan proses yang berjalan di komputer yang sama (dengan menggunakan antarmuka loopback).

Soket domain UNIX tahu bahwa mereka mengeksekusi pada sistem yang sama, sehingga mereka dapat menghindari beberapa pemeriksaan dan operasi (seperti perutean); yang membuatnya lebih cepat dan lebih ringan dari soket IP. Jadi, jika Anda berencana untuk berkomunikasi dengan proses pada host yang sama, ini adalah pilihan yang lebih baik daripada soket IP.

Sunting: Sesuai Nils Komentar Toedtmann : Soket domain UNIX tunduk pada izin sistem file, sementara soket TCP dapat dikontrol hanya pada tingkat filter paket.

pQd
sumber
12
Mungkin menambahkan bahwa soket domain UNIX tunduk pada izin sistem file, sedangkan soket TCP tidak. Akibatnya, jauh lebih mudah untuk mengatur pengguna mana yang memiliki akses ke soket domain UNIX daripada untuk soket TCP.
Nils Toedtmann
@ pQd, Bung bisakah Anda menyebutnya Unix IPC daripada Unix Sockets?
Pacerier
4
@Pacerier Unix sockets hanyalah salah satu cara untuk mencapai unix IPC (memori Interprocess bersama antara yang lain), jadi tidak benar untuk memanggil unix sockets unix IPC.
fyquah95
Soket TCP juga ditangani oleh Unix? Soket TCP adalah bagian dari spesifikasi protokol TCP atau protokol apa pun dapat menggunakan Soket IP?
Federico
@Federico Saya memposting jawaban yang mencoba menjawab pertanyaan Anda, jika Anda membutuhkan lebih dalam, silakan kirim pertanyaan baru.
Peter Green
28

Anda dapat membuat daftar soket unix lokal mesin Anda sendiri dengan perintah berikut:

netstat -a -p --unix

Selamat bersenang-senang!

Unix Janitor
sumber
9
Soket Unix tidak ada di Windows. netstatNamun tidak berfungsi pada Windows.
Mark Tomlin
4
@apache, hal serupa di Windows disebut "Named pipes".
ahli
5
Pipa bernama juga ada di Linux.
Sahil Singh
9
@expert, pipa bernama di Windows sama dengan pipa bernama di Unix. Soket IPC di Unix tidak memiliki padanan di Windows
Pacerier
2
Windows 10 memiliki dukungan untuk soket Unix. Ada beberapa batasan, tetapi tersedia: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

Apa perbedaan antara soket Unix dan soket TCP / IP?

Soket TCP / IP digunakan untuk komunikasi lintas jaringan TCP / IP. Soket TCP yang terhubung diidentifikasi oleh kombinasi IP lokal, port lokal, IP jarak jauh dan port jarak jauh. Soket TCP yang mendengarkan diidentifikasi oleh port lokal dan mungkin IP lokal. AIUI setidaknya di soket linux TCP / IP selalu menghasilkan generasi dan decoding paket TCP / IP, bahkan jika klien dan server berada di mesin yang sama.

Socket unix domain (terkadang disingkat menjadi unix socket) di sisi lain beroperasi pada satu mesin. Soket yang mendengarkan langsung dalam hierarki sistem file dan aksesnya dapat dikontrol oleh izin sistem file.

Lebih jauh, proses menerima koneksi pada soket Unix dapat menentukan ID pengguna dari proses yang menghubungkan. Ini dapat menghindari perlunya langkah otentikasi. Daripada membuat kata sandi untuk server basis data Anda dan memasukkan salinannya dalam kode aplikasi web Anda, Anda bisa memberi tahu server basis data bahwa pengguna yang menjalankan aplikasi web memiliki akses ke akun pengguna yang sesuai di dalam basis data.


Soket TCP juga ditangani oleh Unix?

Tentu saja

Soket TCP adalah bagian dari spesifikasi protokol TCP

Spesifikasi protokol internet hanya cenderung memperhatikan apa yang terjadi pada kawat, spesifikasi TCP berisi definisi Socket tetapi definisi itu tidak sama dengan bagaimana istilah tersebut digunakan oleh "sockets API".

"Soket API" seperti yang kita kenal diperkenalkan oleh BSD tetapi kemudian disalin di semua tempat dan dimasukkan sebagai bagian dari standar posix. Hal-hal dasar untuk soket TCP dan UDP cenderung hampir sama di berbagai platform tetapi hal-hal yang lebih maju dan hal-hal yang berinteraksi dengan bagian-bagian lain dari OS bervariasi, misalnya pada sistem mirip-unix, soket diidentifikasi oleh suatu pegangan file dan dapat dibaca / ditulis oleh file API, ini bukan kasus di windows.

Beberapa ekstensi ke soket API telah didokumentasikan dalam rfcs tetapi RFC tersebut hanya bersifat "informatif".

atau protokol apa pun dapat menggunakan Soket IP?

Ketika suatu aplikasi secara eksplisit membuat socket menggunakan fungsi "socket" (soket juga dibuat oleh fungsi accept) itu melewati tiga parameter, "domain", "type" dan "protokol". Di antara mereka, ketiga parameter ini dapat digunakan untuk memilih berbagai jenis soket.

  • domain memilih keluarga protokol / alamat yang digunakan, misalnya AF_INET untuk ipv4, AF_INET6 untuk ipv6, AF_Unix untuk jalur sistem file unix dll.
  • type memilih semantik komunikasi, yang utama adalah datagram dan stream tetapi ada juga tipe yang lebih khusus.
  • protokol memilih protokol yang akan digunakan, jika diatur ke 0 protokol default untuk kombinasi Domain dan tipe akan digunakan.
Peter Green
sumber
"Soket pendengaran hidup dalam hierarki sistem file dan aksesnya dapat dikontrol oleh izin sistem file." Apakah ini berarti bahwa dua server yang memiliki akses ke sistem file yang sama mungkin dapat berkomunikasi melalui soket?
user5359531
Sayangnya AIUI tidak. superuser.com/questions/352263/…
Peter Green