it-swarm-id.com

Apa itu soket?

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

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

57
chrisjlee

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 jawab pertanyaan persis ini .

48
Shawn J. Goff

Dalam istilah yang paling sederhana, socket adalah file pseudo yang mewakili koneksi jaringan. Setelah soket dibuat (menggunakan primitif yang tepat, dan parameter yang tepat untuk mengidentifikasi Host lainnya), 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 setelah pipa itu 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.

74
dhag

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 berbagai "domain" (seperti mis. "Soket unix" atau "soket internet") dan berbagai jenis komunikasi (mis. Soket "datagram" atau soket "aliran") dan berbicara dengan penerima yang berbeda, dan semuanya bekerja persis sama (baik, 99%, jelas ada perbedaan kecil yang harus Anda perhitungkan).

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.

socket juga merupakan nama fungsi perpustakaan (atau syscall) yang menciptakan "soket", yang merupakan jenis file khusus (semuanya) 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 stream 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.

A bernama pipe, well, cukup pipa yang memiliki nama dalam sistem file. 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 yang sama soket, dan Anda tidak perlu dua soket terpisah untuk komunikasi dua arah.
Juga, soket dapat bertindak sebagai aliran (identik dengan pipa), atau dapat mengirim pesan terpisah, tidak dapat diandalkan, atau dapat mengirim pesan terpisah, dipesan (dua pekerjaan pertama di domain apa pun, hanya yang terakhir di "unix domain"). 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 mengingat hal itu, jelaslah bahwa soket melakukan sesuatu yang jauh lebih rumit dan umumnya memiliki lebih banyak overhead daripada pipa (yang pada dasarnya tidak lebih dari memcpy sederhana ke dan dari buffer!), tetapi jika Anda membuat soket lokal (yaitu pada komputer yang sama), 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.

8
Damon

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 tukang 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. Hal 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 :)

7
Andrew Lambert

Untuk udp atau tcp over IP,

Alamat soket adalah kombinasi dari alamat IP dan nomor port.

Alamat IP adalah alamat mesin di internet mis. 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:80 Pelabuhan 80 dari unix.stackexchange.com (soket) adalah titik akses situs web ini.

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

2
ctrl-alt-delor

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

0
Dragos Alexe