Apa itu soket?

48

Bisakah seseorang menjelaskan kepada saya apa soket itu? Saya melihatnya dalam banyak akronim dalam konteks SSL, dll.

Juga, mengapa ini disebut soket? Apakah ini murni karena nama yang mereka ciptakan? Atau apakah itu nama pertama yang mereka buat?

chrisjlee
sumber
9
Dalam istilah awam: soket adalah telepon. Ini adalah hal yang Anda pegang di tangan yang memungkinkan Anda berkomunikasi dengan telepon lain. Analogi ini sedikit terurai: Sebagian besar percakapan telepon bersifat peer-to-peer. Koneksi soket adalah klien ke server. Klien (seperti, tetapi tidak terbatas pada, perangkat lunak workstation seperti browser) terhubung ke server (seperti server web, server file, server otentikasi, atau lainnya). Kelemahan lain dalam analogi: ketika Anda menutup koneksi soket, soket hancur, dan Anda harus membuat soket baru sebelum Anda dapat membuat koneksi baru.
G-Man Mengatakan 'Reinstate Monica'
Itu tidak terlalu buruk untuk analogi. Server hanyalah pusat panggilan dan dapat memiliki ratusan panggilan aktif sekaligus.
MSalters

Jawaban:

42

Soket hanyalah titik akhir logis untuk komunikasi. Mereka ada di lapisan transport. Anda dapat mengirim dan menerima barang di soket, Anda dapat mengikat dan mendengarkan soket. Soket khusus untuk protokol, mesin, dan port, dan ditujukan seperti itu di header paket.

Panduan Beej untuk Pemrograman Jaringan dan Komunikasi Antar Proses keduanya memiliki informasi yang baik tentang cara menggunakan soket, dan bahkan menjawab pertanyaan yang tepat ini .

Shawn J. Goff
sumber
65

Dalam istilah yang paling sederhana, socket adalah file pseudo yang mewakili koneksi jaringan. Setelah soket telah dibuat (menggunakan primitif yang tepat, dan parameter yang tepat untuk mengidentifikasi host lain), menulis ke soket diubah menjadi paket jaringan yang dikirim, dan data yang diterima dari jaringan dapat dibaca dari soket.

Dalam satu hal, soket sangat mirip dengan pipa: mereka terlihat seperti file ke program yang menggunakannya, tetapi tidak menghasilkan baca atau tulis ke disk; alih-alih, mereka memungkinkan berkomunikasi dengan program lain (lokal dalam kasus pipa, dan mungkin jauh dalam kasus soket). Mereka juga menawarkan, seperti yang Anda sebutkan, komunikasi dua arah (seperti halnya sepasang pipa yang terhubung dengan benar).

Akhirnya, adalah umum untuk program pada satu mesin untuk berkomunikasi menggunakan protokol jaringan standar, seperti TCP; akan sia-sia untuk pergi jauh ke perangkat keras jaringan (jika ada!), menghitung checksum, dll., hanya untuk kembali ke host yang sama: di situlah soket domain Unix masuk. Itu seperti soket biasa, kecuali mereka menghubungkan proses pada host yang sama daripada proses jarak jauh, dan tidak mencoba menggunakan sumber daya jaringan sama sekali. Dengan cara ini, mereka adalah media komunikasi antar proses.

Seperti yang disebutkan oleh tripleee, dalam perjalanan sejarah BSD, pipa diperkenalkan lebih awal dari soket, dan diimplementasikan kembali menggunakan soket begitu ada. Referensi yang sama, Desain dan Implementasi Sistem Operasi FreeBSD , menyebutkan bahwa pipa kemudian dikembalikan ke implementasi non-soket karena alasan kinerja: ini tentu saja menggarisbawahi fakta bahwa pipa memiliki kesamaan.

Dhag
sumber
3
Mungkin juga menyebutkan bahwa pipa mendahului soket, tetapi begitu antarmuka soket ditambahkan ke Unix, masuk akal untuk mengimplementasikan kembali pipa menggunakan soket lokal.
tripleee
@tripleee: Itu poin sejarah yang bagus. Mau memberikan referensi?
Dhag
Googling cepat muncul halaman 40 dalam Desain dan Implementasi Sistem Operasi FreeBSD ; teks menyebutkan perubahan ini dalam 4.2BSD tetapi juga mengklarifikasi bahwa ini bukan lagi cara dilakukannya, karena alasan kinerja.
tripleee
Luar biasa, saya akan menambahkan ini ke jawaban saya.
Dhag
Jawaban techno terbaik dalam semua
chaosguru
7

Soket abstraksi. Ini menyediakan antarmuka untuk aplikasi untuk memanfaatkan sumber daya sistem (dalam hal ini koneksi jaringan) dengan cara yang memungkinkan sistem operasi untuk menengahi dan mengatur penggunaan sumber daya terbatas oleh sejumlah aplikasi.

Jika data yang dikirim melalui soket dapat dianggap sebagai amplop surat, maka soket itu akan menjadi kotak surat Anda. Anda melampirkan kotak surat (soket) ke rumah Anda (program) dan memasukkan surat keluar Anda (data) ke dalamnya. Pada waktu yang dijadwalkan, petugas pos (sistem operasi) datang dan mengambil surat keluar Anda dan menurunkan semua surat masuk di kotak surat yang sama. Surat keluar Anda dikirimkan atas nama Anda kepada penerima melalui truk tukang pos (koneksi jaringan) bersama dengan semua surat tetangga Anda. Ini memungkinkan Anda untuk berkorespondensi dengan orang-orang yang jauh tanpa perlu biaya, waktu, kesulitan, dll. Mengantar surat itu sendiri.

Adapun mengapa mereka disebut 'soket' dengan baik, gagasan bahwa penemu bisa menyebutnya apa pun yang mereka inginkan mungkin memainkan peran besar di sana. Padahal, itu bukan nama yang buruk menurut saya :)

Andrew Lambert
sumber
7

Sekarang apa itu?

Soket, atau "soket" dapat terdiri dari beberapa hal:

Pertama-tama, ini adalah model pemikiran dan antarmuka pemrograman aplikasi (API) . Itu berarti Anda memiliki seperangkat aturan yang perlu Anda ikuti dan serangkaian fungsi yang dapat Anda gunakan untuk menulis program yang melakukan sesuatu, sesuai dengan kontrak yang ditentukan secara tepat. Dalam kasus khusus ini, sesuatu berarti bertukar data dengan program lain.

API soket secara luas mengabstraksi rincian "komunikasi" secara umum. Ini merangkum dengan siapa Anda berbicara dan bagaimana, semua melalui satu (hampir) bentuk cookie-cutter yang konsisten.
Anda dapat membuat soket di "domain" yang berbeda (seperti mis. "Soket unix" atau "soket internet") dan dari berbagai jenis komunikasi (mis. Soket "datagram" atau soket "aliran") dan berbicara dengan penerima yang berbeda , dan semuanya bekerja persis sama (well, 99%, jelas ada perbedaan kecil yang harus Anda pertanggungjawabkan).

Anda tidak perlu tahu (dan Anda bahkan tidak ingin tahu!) Apakah Anda berbicara dengan program lain di komputer yang sama atau di komputer yang berbeda, atau apakah ada jaringan IPv4 atau IPv6 di antara komputer-komputer itu, atau mungkin beberapa lainnya protokol yang belum pernah Anda dengar.

socketjuga nama fungsi perpustakaan (atau syscall) yang menciptakan "soket ", yang merupakan jenis file khusus (semua yang ada di Unix adalah file).

Bagaimana cara membandingkannya dengan ...

soket jatuh ke dalam kategori yang sama dengan pipa dan pipa nama

Pipa adalah sarana komunikasi satu arah antara pembaca dan penulis (keduanya merupakan program) pada komputer yang sama. Ini mensimulasikan aliran data (seperti misalnya TCP).
Artinya, tidak ada "pesan" atau "blok data" individual yang ada dari sudut pandang pipa. Anda dapat menyalin jumlah data apa pun ke "satu ujung", dan orang lain dapat membaca jumlah data apa pun (tidak harus sama, dan tidak harus sekaligus) di "ujung lainnya" dalam urutan byte yang sama seperti yang telah Anda lakukan mendorongnya.

Sebuah bernama pipa, baik, cukup pipa yang memiliki nama di filesystem . Artinya, itu adalah sesuatu yang terlihat dan berperilaku seperti file, muncul di daftar direktori dan Anda dapat membukanya, menulis padanya, dll. Perhatikan bahwa Anda juga dapat membuat file khusus soket (yang akan menjadi soket bernama) .

Soket, di sisi lain, adalah sarana komunikasi dua arah ("duplex"), yang berarti Anda dapat menulis dan membaca dari soket yang sama, dan Anda tidak perlu dua soket terpisah untuk komunikasi dua arah.
Selain itu, soket dapat bertindak sebagai aliran (identik dengan pipa), atau dapat mengirim pesan terpisah, tidak dapat diandalkan, atau dapat mengirim pesan terpisah, dipesan (dua yang pertama berfungsi pada domain apa pun, yang terakhir hanya pada "domain unix" ). Itu dapat mengirim pesan (atau mensimulasikan streaming) ke seseorang di komputer yang sama sekali berbeda. Soket bahkan dapat melakukan bentuk komunikasi satu-ke-banyak (multicast) dalam beberapa kondisi.

Dengan pemikiran itu, jelaslah bahwa soket melakukan sesuatu yang jauh lebih rumit dan umumnya memiliki lebih banyak overhead daripada pipa (yang pada dasarnya tidak lebih dari yang sederhana memcpyke dan dari penyangga!), Tetapi jika Anda membuat soket lokal (yaitu pada saat yang sama komputer), sistem operasi biasanya menerapkan jalur cepat yang sangat dioptimalkan, sehingga sebenarnya tidak ada banyak perbedaan.

komunikasi antar-proses kadang-kadang disebutkan berkaitan dengan jaringan

Ya, soket adalah salah satu cara komunikasi inter-proses yang memungkinkan (memori bersama dan pipa menjadi contoh alternatif). Semua pada saat yang sama, mereka digunakan untuk "jaringan", seperti yang dijelaskan di atas.

Damon
sumber
1

Untuk udp atau tcp melalui IP,

Alamat soket adalah kombinasi dari alamat IP dan nomor port.

Alamat IP adalah alamat mesin di internet misalnya unix.stackexchange.com has address 198.252.206.140

Namun setiap mesin harus dapat menyediakan lebih dari satu layanan, sehingga sebagian besar mesin akan menyediakan http (halaman web) pada port 80, dan ssh pada port 22, dan lain-lain.

Jadi unix.stackexchange.com:80pelabuhan 80dari unix.stackexchange.com(soket) adalah titik akses situs web ini.

Namun ada jenis soket lainnya, lihat komentar di bawah ini.

ctrl-alt-delor
sumber
5
tcp / ip hanya satu jenis soket. Ada orang lain yang tidak ada hubungannya dengan tcp / ip.
psusi
berapa banyak jenis soket yang berbeda?
Abdul Al Hazred
1
@AbdulAlHazred, saya tahu empat jenis umum yang digunakan dengan ip networking, sama dengan ip6, dua dengan unix, dan dua dengan IPX. Saya belum melihat ax25, atm, atau appletalk. Ada protokol lain yang didukung di linux, dan ada protokol yang tidak didukung linux. Dalam kebanyakan kasus, setiap protokol memiliki soket stream (tcp) dan datagram (udp). Soket mentah juga umum, dan imcp mungkin juga memiliki antarmuka soket.
Hildred
Intinya, jawaban ini tidak lengkap karena hanya mencakup satu jenis soket, dan menyesatkan karena mewakili soket secara umum seolah-olah mereka selalu soket jaringan, dan khususnya AF_INETsoket IP ( ).
tripleee
0

Saya yakin Anda bertanya tentang jaringan. Jadi layanan TCP menggunakan soket sebagai titik untuk komunikasi dan terdiri dari alamat IP, protokol, dan nomor port.

Dragos Alexe
sumber