Ini adalah pertanyaan yang diajukan oleh salah satu insinyur perangkat lunak di organisasi saya. Saya tertarik dengan definisi terluas.
Ini adalah pertanyaan yang diajukan oleh salah satu insinyur perangkat lunak di organisasi saya. Saya tertarik dengan definisi terluas.
Jawaban:
Soket TCP adalah contoh titik akhir yang ditentukan oleh alamat IP dan port dalam konteks koneksi TCP tertentu atau keadaan mendengarkan.
Port adalah pengidentifikasi virtualisasi yang mendefinisikan titik akhir layanan (berbeda dari titik akhir instance layanan alias pengidentifikasi sesi).
Soket TCP bukan koneksi , itu adalah titik akhir dari koneksi tertentu.
Mungkin ada koneksi bersamaan ke titik akhir layanan , karena koneksi diidentifikasi oleh titik akhir lokal dan jarak jauh , yang memungkinkan lalu lintas untuk dialihkan ke mesin virtual layanan tertentu.
Hanya ada satu soket pendengar untuk kombinasi alamat / port yang diberikan .
Ini adalah pertanyaan menarik yang memaksa saya untuk memeriksa kembali sejumlah hal yang saya pikir saya ketahui dari dalam. Anda akan berpikir nama seperti "socket" akan jelas: itu jelas dipilih untuk membangkitkan citra titik akhir di mana Anda pasang kabel jaringan, ada paralel fungsional yang kuat. Namun demikian, dalam bahasa jaringan, kata "socket" membawa begitu banyak bagasi sehingga pemeriksaan ulang yang cermat diperlukan.
Dalam arti seluas mungkin, port adalah titik masuknya atau keluar. Meskipun tidak digunakan dalam konteks jaringan, kata porte Perancis secara harfiah berarti pintu atau gerbang , lebih jauh menekankan fakta bahwa pelabuhan adalah titik akhir transportasi apakah Anda mengirimkan data atau wadah baja besar.
Untuk tujuan diskusi ini saya akan membatasi pertimbangan pada konteks jaringan TCP-IP. Model OSI semuanya sangat baik tetapi belum pernah sepenuhnya diimplementasikan, apalagi digunakan secara luas dalam kondisi lalu lintas tinggi dengan tekanan tinggi.
Kombinasi alamat IP dan port secara ketat dikenal sebagai titik akhir dan kadang-kadang disebut soket. Penggunaan ini berasal dari RFC793, spesifikasi TCP asli.
Koneksi TCP ditentukan oleh dua titik akhir alias soket .
Titik akhir (soket) ditentukan oleh kombinasi alamat jaringan dan pengidentifikasi port . Perhatikan bahwa alamat / port tidak sepenuhnya mengidentifikasi soket (lebih lanjut tentang ini nanti).
Tujuan port adalah untuk membedakan beberapa titik akhir pada alamat jaringan yang diberikan. Anda dapat mengatakan bahwa port adalah titik akhir tervirtualisasi. Virtualisasi ini memungkinkan beberapa koneksi bersamaan pada satu antarmuka jaringan.
Pasangan soket (tupel 4 yang terdiri dari alamat IP klien, nomor port klien, alamat IP server, dan nomor port server) yang menentukan dua titik akhir yang secara unik mengidentifikasi setiap koneksi TCP di internet. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)
Dalam sebagian besar bahasa yang diturunkan C, koneksi TCP dibuat dan dimanipulasi menggunakan metode pada instance kelas Socket. Meskipun umum untuk beroperasi pada tingkat abstraksi yang lebih tinggi, biasanya turunan dari kelas NetworkStream, ini umumnya memaparkan referensi ke objek soket. Untuk pembuat kode objek soket ini tampaknya mewakili koneksi karena koneksi dibuat dan dimanipulasi menggunakan metode objek soket.
Di C #, untuk membuat koneksi TCP (ke pendengar yang ada) pertama-tama Anda membuat TcpClient . Jika Anda tidak menentukan titik akhir ke konstruktor TcpClient, ia menggunakan default - dengan satu atau lain cara titik akhir lokal ditentukan. Kemudian Anda memanggil metode Connect pada instance yang Anda buat. Metode ini membutuhkan parameter yang menggambarkan titik akhir lainnya.
Semua ini agak membingungkan dan membuat Anda percaya bahwa soket adalah koneksi, yang bollocks. Saya bekerja di bawah kesalahpahaman ini sampai Richard Dorman mengajukan pertanyaan.
Setelah banyak membaca dan berpikir, saya sekarang yakin bahwa akan jauh lebih masuk akal untuk memiliki kelas TcpConnection dengan konstruktor yang membutuhkan dua argumen, LocalEndpoint dan RemoteEndpoint . Anda mungkin dapat mendukung argumen RemoteEndpoint tunggal ketika default dapat diterima untuk titik akhir lokal. Ini ambigu pada komputer multihomed, tetapi ambiguitas dapat diatasi dengan menggunakan tabel routing dengan memilih antarmuka dengan rute terpendek ke remote endpoint.
Kejelasan juga akan ditingkatkan dalam hal lain. Soket tidak diidentifikasi oleh kombinasi alamat IP dan port:
[...] TCP mendemultipleks segmen yang masuk menggunakan keempat nilai yang terdiri dari alamat lokal dan asing: alamat IP tujuan, nomor port tujuan, alamat IP sumber, dan nomor port sumber. TCP tidak dapat menentukan proses mana yang mendapatkan segmen yang masuk dengan hanya melihat port tujuan. Selain itu, satu-satunya dari [berbagai] titik akhir di [nomor port yang diberikan] yang akan menerima permintaan koneksi masuk adalah yang ada dalam status mendengarkan. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)
Seperti yang Anda lihat, bukan hanya mungkin tetapi sangat mungkin untuk layanan jaringan memiliki banyak soket dengan alamat / port yang sama, tetapi hanya satu soket pendengar pada kombinasi alamat / port tertentu. Implementasi pustaka yang umum menyajikan kelas soket, sebuah instance yang digunakan untuk membuat dan mengelola koneksi. Ini sangat disayangkan, karena menyebabkan kebingungan dan telah menyebabkan persebaran yang luas dari kedua konsep tersebut.
Hagrawal tidak percaya padaku (lihat komentar) jadi inilah contoh nyata. Saya menghubungkan browser web ke http://dilbert.com dan kemudian berlari netstat -an -p tcp
. Enam baris terakhir dari output berisi dua contoh fakta bahwa alamat dan port tidak cukup untuk mengidentifikasi soket secara unik. Ada dua koneksi berbeda antara 192.168.1.3 (workstation saya) dan 54.252.94.236:80 (server HTTP jauh)
TCP 192.168.1.3:63240 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63241 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63242 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:63243 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:64161 65.54.225.168:443 ESTABLISHED
Karena soket adalah titik akhir koneksi, ada dua soket dengan kombinasi alamat / port 207.38.110.62:80
dan dua soket lainnya dengan kombinasi alamat / port 54.252.94.236:80
.
Saya pikir kesalahpahaman Hagrawal muncul dari saya sangat berhati-hati menggunakan kata "mengidentifikasi". Maksud saya "mengidentifikasi sepenuhnya, tidak ambigu dan unik". Dalam sampel di atas ada dua titik akhir dengan kombinasi alamat / port 54.252.94.236:80
. Jika yang Anda miliki hanyalah alamat dan porta, Anda tidak memiliki cukup informasi untuk membedakan soket ini. Tidak cukup informasi untuk mengidentifikasi soket.
Paragraf dua bagian 2.7 dari RFC793 mengatakan
Koneksi sepenuhnya ditentukan oleh sepasang soket di ujungnya. Soket lokal dapat berpartisipasi dalam banyak koneksi ke soket asing yang berbeda.
Definisi soket ini tidak membantu dari perspektif pemrograman karena tidak sama dengan objek soket , yang merupakan titik akhir dari koneksi tertentu. Bagi seorang programmer, dan sebagian besar pemirsa pertanyaan ini adalah programmer, ini adalah perbedaan fungsional yang vital.
Soket terdiri dari tiga hal:
Port adalah angka antara 1 dan 65535 inklusif yang menandakan gerbang logis dalam perangkat. Setiap koneksi antara klien dan server memerlukan soket yang unik.
Sebagai contoh:
Soket mewakili koneksi tunggal antara dua aplikasi jaringan. Kedua aplikasi ini secara nominal berjalan pada komputer yang berbeda, tetapi soket juga dapat digunakan untuk komunikasi antarproses pada satu komputer. Aplikasi dapat membuat beberapa soket untuk berkomunikasi satu sama lain. Soket adalah dua arah, artinya kedua sisi koneksi mampu mengirim dan menerima data. Oleh karena itu soket dapat dibuat secara teoritis di setiap tingkat model OSI dari 2 ke atas. Pemrogram sering menggunakan soket dalam pemrograman jaringan, meskipun secara tidak langsung. Pemrograman perpustakaan seperti Winsock menyembunyikan banyak detail tingkat rendah dari pemrograman soket. Soket telah digunakan secara luas sejak awal 1980-an.
Port mewakili titik akhir atau "saluran" untuk komunikasi jaringan. Nomor port memungkinkan aplikasi yang berbeda pada komputer yang sama untuk memanfaatkan sumber daya jaringan tanpa saling mengganggu. Nomor port paling sering muncul dalam pemrograman jaringan, khususnya pemrograman socket. Namun, kadang-kadang, nomor port dibuat terlihat oleh pengguna biasa. Misalnya, beberapa situs Web yang dikunjungi seseorang di Internet menggunakan URL seperti berikut:
http://www.mairie-metz.fr:8080/ Dalam contoh ini, angka 8080 mengacu pada nomor port yang digunakan oleh browser Web untuk terhubung ke server Web. Biasanya, situs Web menggunakan nomor port 80 dan nomor ini tidak perlu disertakan dengan URL (meskipun bisa jadi).
Dalam jaringan IP, nomor port secara teoritis dapat berkisar dari 0 hingga 65535. Namun, sebagian besar aplikasi jaringan yang populer, menggunakan nomor port pada kisaran rendah (seperti 80 untuk HTTP).
Catatan: Istilah port juga mengacu pada beberapa aspek lain dari teknologi jaringan. Port dapat merujuk ke titik koneksi fisik untuk perangkat periferal seperti port serial, paralel, dan USB. Istilah port juga merujuk ke titik-titik koneksi Ethernet tertentu, seperti yang ada di hub, switch, atau router.
ref http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
Dengan analogi
Meskipun banyak hal teknis sudah diberikan di atas untuk soket ... Saya ingin menambahkan jawaban saya, untuk berjaga-jaga, jika seseorang masih tidak bisa merasakan perbedaan antara ip, port dan soket
Pertimbangkan server S ,
dan katakan orang X, Y, Z membutuhkan layanan (katakanlah layanan obrolan) dari server S
kemudian
Alamat IP memberi tahu -> siapa? apakah server obrolan 'S' yang ingin dihubungi X, Y, Z
oke, kamu dapat "siapa servernya"
tetapi misalkan server 'S' menyediakan beberapa layanan lain kepada orang lain juga, katakanlah 'S' menyediakan layanan penyimpanan kepada orang A, B, C
kemudian
port memberitahu ---> yang mana? layanan yang Anda (X, Y, Z) butuhkan yaitu layanan obrolan dan bukan layanan penyimpanan itu
oke .., Anda membuat server mengetahui bahwa 'layanan obrolan' adalah yang Anda inginkan dan bukan penyimpanannya
tapi
Anda bertiga dan server mungkin ingin mengidentifikasi ketiganya secara berbeda
ada soket
sekarang socket memberitahu -> yang mana? koneksi tertentu
yaitu, katakanlah,
soket 1 untuk orang X
soket 2 untuk orang Y
dan soket 3 untuk orang Z
Saya harap ini membantu seseorang yang masih bingung :)
Pertama, saya pikir kita harus mulai dengan sedikit pemahaman tentang apa yang dimaksud dengan mendapatkan paket dari A ke B.
Definisi umum untuk jaringan adalah penggunaan Model OSI yang memisahkan jaringan menjadi beberapa lapisan sesuai tujuan. Ada beberapa yang penting, yang akan kita bahas di sini:
TCP berisi, antara lain, konsep port . Ini adalah titik akhir data yang berbeda secara efektif pada alamat IP yang sama yang AF_INET
dapat diikat oleh Internet Socket ( ).
Seperti yang terjadi, begitu juga UDP , dan protokol layer transport lainnya. Secara teknis mereka tidak perlu fitur port, tetapi port ini memang menyediakan cara untuk beberapa aplikasi di lapisan di atas untuk menggunakan komputer yang sama untuk menerima (dan memang membuat) koneksi keluar.
Yang membawa kita ke anatomi koneksi TCP atau UDP. Masing-masing fitur port sumber dan alamat, dan target port dan alamat. Ini agar dalam setiap sesi yang diberikan, aplikasi target dapat merespons, serta menerima, dari sumbernya.
Jadi port pada dasarnya adalah cara yang diamanatkan oleh spesifikasi untuk memungkinkan beberapa koneksi konkuren berbagi alamat yang sama.
Sekarang, kita perlu melihat bagaimana Anda berkomunikasi dari sudut pandang aplikasi ke dunia luar. Untuk melakukan ini, Anda perlu menanyakan sistem operasi Anda dan karena sebagian besar OS mendukung cara Berkeley Sockets dalam melakukan sesuatu, kami melihat kami dapat membuat soket yang melibatkan port dari aplikasi seperti ini:
int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...
Bagus! Jadi dalam sockaddr
struktur, kami akan menentukan port dan bam kami! Pekerjaan selesai! Yah, hampir, kecuali:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
itu juga mungkin. Urgh, itu melemparkan kunci pas dalam karya!
Ok, sebenarnya tidak. Yang perlu kita lakukan hanyalah menghasilkan beberapa definisi yang sesuai:
/var/run/database.sock
.Voila! Itu merapikan segalanya. Jadi dalam skema kami,
Jadi sebenarnya port adalah bagian dari persyaratan untuk membentuk soket internet. Sayangnya, kebetulan bahwa arti kata socket telah diterapkan pada beberapa ide berbeda. Jadi saya sungguh-sungguh menyarankan Anda memberi nama soket proyek berikutnya, hanya untuk menambah kebingungan;)
Soket = Alamat IP + port (alamat numerik)
Bersama-sama mereka mengidentifikasi titik akhir untuk koneksi jaringan pada mesin. (Apakah saya baru saja gagal jaringan 101?)
Secara umum, Anda akan mendapatkan banyak teori tetapi salah satu cara termudah untuk membedakan kedua konsep ini adalah sebagai berikut:
Untuk mendapatkan layanan, Anda memerlukan nomor layanan. Nomor layanan ini disebut port. Sederhana seperti itu.
Misalnya, HTTP sebagai layanan berjalan di port 80.
Sekarang, banyak orang dapat meminta layanan dan koneksi dari client-server telah terbentuk. Akan ada banyak koneksi. Setiap koneksi mewakili klien. Untuk menjaga setiap koneksi, server membuat soket per koneksi untuk mempertahankan kliennya.
Tampaknya ada banyak jawaban yang menyamakan socket dengan koneksi antara 2 PC..yang menurut saya sama sekali tidak benar. Soket selalu menjadi titik akhir pada 1 PC, yang mungkin atau mungkin tidak terhubung - pasti kita semua pernah menggunakan soket pendengar atau UDP * di beberapa titik. Bagian yang penting adalah itu bisa dialamatkan dan aktif. Mengirim pesan ke 1.1.1.1:1234 tidak mungkin berfungsi, karena tidak ada soket yang ditentukan untuk titik akhir itu.
Soket adalah protokol khusus - sehingga penerapan keunikan yang digunakan oleh TCP / IP dan UDP / IP * (ipaddress: port), berbeda dari mis., IPX (Jaringan, Node, dan ... ahem, soket - tetapi berbeda soket daripada yang dimaksud dengan istilah "soket" umum. Nomor soket IPX setara dengan port IP). Namun, mereka semua menawarkan titik akhir yang unik dan dapat dialamatkan.
Karena IP telah menjadi protokol dominan, sebuah port (dalam istilah jaringan) telah menjadi sinonomis dengan nomor port UDP atau TCP - yang merupakan bagian dari alamat soket.
UDP adalah koneksi-kurang - berarti tidak ada sirkuit virtual antara 2 titik akhir yang pernah dibuat. Namun, kami masih menyebut soket UDP sebagai titik akhir. Fungsi API memperjelas bahwa keduanya hanyalah jenis soket yang berbeda - SOCK_DGRAM
yaitu UDP (hanya mengirim pesan) dan SOCK_STREAM
TCP (membuat sirkuit virtual).
Secara teknis, header IP memegang Alamat IP, dan protokol di atas IP (UDP atau TCP) memegang nomor port. Ini memungkinkan untuk memiliki protokol lain (mis. ICMP yang tidak memiliki nomor port, tetapi memiliki informasi pengalamatan IP).
Jawaban singkat singkat.
Sebuah port yang dapat digambarkan sebagai alamat internal dalam sebuah host yang mengidentifikasi program atau proses.
Sebuah soket dapat digambarkan sebagai pemrograman antarmuka yang memungkinkan program untuk berkomunikasi dengan program atau proses lainnya, di internet, atau lokal.
Mereka adalah istilah dari dua domain yang berbeda: 'port' adalah konsep dari jaringan TCP / IP, 'socket' adalah hal API (pemrograman). 'Soket' dibuat (dalam kode) dengan mengambil port dan nama host atau adaptor jaringan dan menggabungkannya ke dalam struktur data yang dapat Anda gunakan untuk mengirim atau menerima data.
Ini adalah konsep jaringan dasar jadi saya akan menjelaskannya dengan mudah namun komprehensif untuk memahami secara detail.
Jadi soket dalam jaringan adalah perangkat komunikasi virtual yang terikat pada sepasang (ip, port) = (alamat, layanan).
catatan:
Semoga itu menghilangkan keraguan Anda
Setelah membaca jawaban yang dipilih dengan sangat baik, saya menemukan bahwa titik berikut ini perlu penekanan bagi saya, seorang pendatang baru untuk pemrograman jaringan:
Koneksi TCP-IP adalah jalur dua arah yang menghubungkan satu alamat: kombinasi port dengan alamat lainnya: kombinasi port. Karenanya, setiap kali Anda membuka koneksi dari mesin lokal Anda ke port pada server jarak jauh (katakanlah www.google.com:80), Anda juga mengaitkan nomor port baru pada mesin Anda dengan koneksi, untuk memungkinkan server mengirim hal-hal kembali kepada Anda, (mis. 127.0.0.1:65234). Akan bermanfaat jika menggunakan netstat untuk melihat koneksi mesin Anda:
> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.49871 17.172.232.57.5223 ESTABLISHED
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
Koneksi terjadi ketika 2 soket terikat bersama.
Soket adalah jenis khusus dari pegangan file yang digunakan oleh suatu proses untuk meminta layanan jaringan dari sistem operasi. Alamat soket adalah triple: {protokol, alamat lokal, proses lokal} di mana proses lokal diidentifikasi oleh nomor port.
Dalam TCP / IP suite, misalnya:
{tcp, 193.44.234.3, 12345}
Percakapan adalah hubungan komunikasi antara dua proses sehingga menggambarkan hubungan antara dua proses. Sebuah asosiasi adalah tuple 5 yang sepenuhnya menentukan dua proses yang terdiri dari koneksi: {protokol, alamat lokal, proses lokal, alamat asing, proses asing}
Dalam TCP / IP suite, misalnya:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
bisa jadi asosiasi yang valid.
Setengah-asosiasi adalah: {protokol, alamat lokal, proses lokal}
atau
{protokol, alamat asing, proses asing}
yang menentukan setiap bagian dari koneksi.
Setengah asosiasi juga disebut soket atau alamat transportasi. Artinya, soket adalah titik akhir untuk komunikasi yang dapat dinamai dan diatasi dalam jaringan. Antarmuka soket adalah salah satu dari beberapa antarmuka pemrograman aplikasi (API) ke protokol komunikasi. Dirancang untuk menjadi antarmuka pemrograman komunikasi generik, pertama kali diperkenalkan oleh sistem UNIX 4.2BSD. Meskipun belum distandarisasi, ini telah menjadi standar industri de facto.
Soket adalah titik akhir komunikasi. Soket tidak secara langsung terkait dengan keluarga protokol TCP / IP, dapat digunakan dengan protokol apa pun yang didukung sistem Anda. API C socket mengharapkan Anda untuk terlebih dahulu mendapatkan objek soket kosong dari sistem yang kemudian dapat Anda ikat ke alamat soket lokal (untuk secara langsung mengambil lalu lintas masuk untuk protokol tanpa koneksi atau menerima permintaan koneksi masuk untuk protokol berorientasi koneksi) atau bahwa Anda dapat terhubung ke alamat soket jarak jauh (untuk kedua jenis protokol). Anda bahkan dapat melakukan keduanya jika Anda ingin mengontrol keduanya, alamat soket lokal yang terikat dengan soket dan alamat soket jarak jauh yang tersambung ke soket. Untuk protokol tanpa koneksi yang menghubungkan soket bahkan opsional tetapi jika Anda tidak melakukan itu, Anda Saya juga harus meneruskan alamat tujuan dengan setiap paket yang ingin Anda kirim melalui soket karena bagaimana lagi soket tahu ke mana harus mengirim data ini? Keuntungannya adalah Anda dapat menggunakan soket tunggal untuk mengirim paket ke alamat soket yang berbeda. Setelah soket Anda dikonfigurasikan dan mungkin bahkan terhubung, anggaplah itu sebagai pipa komunikasi dua arah. Anda dapat menggunakannya untuk meneruskan data ke beberapa tujuan dan beberapa tujuan dapat menggunakannya untuk meneruskan data kepada Anda. Apa yang Anda tulis ke soket dikirimkan dan apa yang telah diterima tersedia untuk dibaca. Anda dapat menggunakannya untuk meneruskan data ke beberapa tujuan dan beberapa tujuan dapat menggunakannya untuk meneruskan data kepada Anda. Apa yang Anda tulis ke soket dikirimkan dan apa yang telah diterima tersedia untuk dibaca. Anda dapat menggunakannya untuk meneruskan data ke beberapa tujuan dan beberapa tujuan dapat menggunakannya untuk meneruskan data kepada Anda. Apa yang Anda tulis ke soket dikirimkan dan apa yang telah diterima tersedia untuk dibaca.
Port di sisi lain adalah sesuatu yang hanya dimiliki oleh beberapa protokol TCP / IP. Paket TCP dan UDP memiliki porta. Port hanyalah angka sederhana. Kombinasi port sumber dan port tujuan mengidentifikasi saluran komunikasi antara dua host. Misalnya Anda mungkin memiliki server yang terdiri dari keduanya, server HTTP sederhana dan server FTP sederhana. Jika sekarang sebuah paket tiba untuk alamat server itu, bagaimana ia tahu jika itu adalah paket untuk HTTP atau server FTP? Yah, ia akan tahu sehingga server HTTP akan berjalan pada port 80 dan server FTP pada port 21, jadi jika paket tersebut tiba dengan port tujuan 80, itu untuk server HTTP dan bukan untuk server FTP. Juga paket memiliki port sumber karena tanpa port sumber seperti itu, server hanya dapat memiliki satu koneksi ke satu alamat IP pada suatu waktu. Port sumber memungkinkan server untuk membedakan koneksi yang identik: mereka semua memiliki port tujuan yang sama, misalnya port 80, IP tujuan yang sama (IP server), dan IP sumber yang sama, karena semuanya berasal dari klien yang sama, tetapi karena mereka memiliki port sumber yang berbeda, server dapat membedakan mereka satu sama lain. Dan ketika server mengirim kembali balasan, ia akan melakukannya ke port asal permintaan, dengan cara itu klien juga dapat membedakan balasan berbeda yang diterimanya dari server yang sama.
Port adalah bagian yang termudah, itu hanya pengidentifikasi unik untuk soket. Soket adalah sesuatu yang dapat digunakan proses untuk membangun koneksi dan berkomunikasi satu sama lain. Tall Jeff memiliki analogi telepon yang hebat yang tidak sempurna, jadi saya memutuskan untuk memperbaikinya:
netstat
tampilan beberapa waktu. Semua soket yang diterima dari soket mendengarkan berbagi port yang sama. Ergo port bukan pengidentifikasi unik untuk soket.
Aplikasi terdiri dari pasangan proses yang berkomunikasi melalui jaringan (pasangan klien-server). Proses-proses ini mengirim dan menerima pesan, ke dan dari jaringan melalui antarmuka perangkat lunak yang disebut soket . Mempertimbangkan analogi yang disajikan dalam buku "Jaringan Komputer: Pendekatan Top Down". Ada rumah yang ingin berkomunikasi dengan rumah lain. Di sini, rumah dianalogikan dengan suatu proses, dan pintu ke soket. Proses pengiriman mengasumsikan bahwa ada infrastruktur di sisi lain pintu yang akan mengangkut data ke tujuan. Setelah pesan tiba di sisi lain, itu melewati pintu penerima (soket) ke rumah (proses). Ilustrasi ini dari buku yang sama dapat membantu Anda:
Soket adalah bagian dari lapisan transport, yang menyediakan komunikasi logis untuk aplikasi. Ini berarti bahwa dari sudut pandang aplikasi kedua host terhubung langsung satu sama lain, meskipun ada banyak router dan / atau switch di antara mereka. Jadi soket bukanlah koneksi itu sendiri, itu adalah titik akhir dari koneksi. Protokol layer transport diimplementasikan hanya pada host, dan bukan pada router perantara.
Pelabuhanmenyediakan sarana pengalamatan internal ke mesin. Tujuan utamanya adalah untuk memungkinkan beberapa proses mengirim dan menerima data melalui jaringan tanpa mengganggu proses lain (datanya). Semua soket dilengkapi dengan nomor port. Ketika sebuah segmen tiba ke sebuah host, layer transport memeriksa nomor port tujuan dari segmen tersebut. Kemudian meneruskan segmen ke soket yang sesuai. Pekerjaan mengirimkan data dalam segmen lapisan transport ke soket yang benar disebut de-multiplexing . Data segmen kemudian diteruskan ke proses yang terpasang pada soket.
Soket adalah struktur dalam perangkat lunak Anda. Ini lebih atau kurang file; ini memiliki operasi seperti membaca dan menulis. Itu bukan hal fisik; ini cara perangkat lunak Anda merujuk pada hal-hal fisik.
Port adalah hal yang mirip perangkat. Setiap host memiliki satu atau lebih jaringan (itu bersifat fisik); host memiliki alamat di setiap jaringan. Setiap alamat dapat memiliki ribuan port.
Satu soket saja mungkin menggunakan port di alamat. Soket mengalokasikan port kira-kira seperti mengalokasikan perangkat untuk sistem file I / O. Setelah port dialokasikan, tidak ada soket lain yang dapat terhubung ke port itu. Port akan dibebaskan ketika soket ditutup.
Lihatlah Terminologi TCP / IP .
dari Tutorial Oracle Java :
Soket adalah salah satu titik akhir dari tautan komunikasi dua arah antara dua program yang berjalan di jaringan. Soket terikat ke nomor port sehingga lapisan TCP dapat mengidentifikasi aplikasi tempat data akan dikirim.
Port dan soket dapat dibandingkan dengan Cabang Bank.
Nomor gedung "Bank" dianalogikan dengan alamat IP. Bank memiliki bagian yang berbeda seperti:
Jadi 1 (departemen rekening tabungan), 2 (departemen pinjaman pribadi), 3 (departemen pinjaman rumah) dan 4 (departemen keluhan) adalah pelabuhan.
Sekarang katakanlah Anda pergi untuk membuka rekening tabungan, Anda pergi ke bank (alamat IP), kemudian Anda pergi ke "departemen rekening tabungan" (port nomor 1), kemudian Anda bertemu dengan salah satu karyawan yang bekerja di "departemen rekening tabungan" ". Biarkan kami memanggilnya SAVINGACCOUNT_EMPLOYEE1 untuk membuka akun.
SAVINGACCOUNT_EMPLOYEE1 adalah deskriptor soket Anda, jadi mungkin ada SAVINGACCOUNT_EMPLOYEE1 hingga SAVINGACCOUNT_EMPLOYEEN. Ini semua deskriptor soket.
Demikian juga, departemen lain akan memiliki karyawan yang bekerja di bawah mereka dan mereka analog dengan soket.
Soket adalah mekanisme I / O data. Port adalah konsep kontrak dari protokol komunikasi . Soket bisa ada tanpa port. Port dapat ada tanpa soket tertentu (misalnya jika beberapa soket aktif pada port yang sama, yang mungkin diizinkan untuk beberapa protokol).
Port digunakan untuk menentukan soket mana penerima harus merutekan paket, dengan banyak protokol, tetapi tidak selalu diperlukan dan pemilihan soket penerima dapat dilakukan dengan cara lain - port sepenuhnya merupakan alat yang digunakan oleh pengendali protokol di subsistem jaringan. mis. jika protokol tidak menggunakan port, paket dapat pergi ke semua soket mendengarkan atau soket apa pun.
Terminologi TCP / IP relatif yang saya asumsikan tersirat oleh pertanyaan. Dalam istilah awam:
PORT adalah seperti nomor telepon rumah tertentu dalam kode pos tertentu. Kode ZIP kota dapat dianggap sebagai alamat IP kota dan semua rumah di kota itu.
SOCKET di sisi lain lebih mirip dengan panggilan telepon antara telepon sepasang rumah yang saling berbicara. Panggilan itu dapat dibuat antara rumah di kota yang sama atau dua rumah di kota yang berbeda. Hanya saja, jalur sementara yang dibuat antara sepasang ponsel saling berbicara yaitu SOCKET.
Dalam arti luas, Socket - hanya itu, soket, sama seperti soket listrik, kabel atau telepon Anda. Suatu titik di mana "hal-hal yang diperlukan" (daya, sinyal, informasi) dapat keluar dan masuk. Ini menyembunyikan banyak hal yang terperinci, yang tidak diperlukan untuk penggunaan "hal-hal yang diperlukan". Dalam istilah perangkat lunak, ia menyediakan cara umum untuk mendefinisikan mekanisme komunikasi antara dua entitas (entitas tersebut bisa berupa apa saja - dua aplikasi, dua perangkat yang terpisah secara fisik, ruang Pengguna & Kernel dalam OS, dll)
Port adalah pembeda titik akhir. Ini membedakan satu titik akhir dari yang lain. Pada tingkat jaringan, ia membedakan satu aplikasi dari yang lain, sehingga tumpukan jaringan dapat meneruskan informasi ke aplikasi yang sesuai.
Sudah jawaban teoritis untuk pertanyaan ini. Saya ingin memberikan contoh praktis untuk pertanyaan ini, yang akan menjernihkan pemahaman Anda tentang Socket dan Port.
Saya menemukannya di sini
Contoh ini akan memandu Anda melalui proses menghubungkan ke situs web, seperti Wiley. Anda akan membuka browser web Anda (seperti Mozilla Firefox) dan ketik www.wiley.com di bilah alamat. Browser web Anda menggunakan server Domain Name System (DNS) untuk mencari nama www.wiley.com untuk mengidentifikasi alamat IP-nya. Untuk contoh ini, alamatnya adalah 192.0.2.100.
Firefox membuat koneksi ke alamat 192.0.2.100 dan ke port tempat server web lapisan aplikasi beroperasi. Firefox tahu port apa yang diharapkan karena ini adalah port yang terkenal. Port yang terkenal untuk server web adalah TCP port 80.
Soket tujuan yang berusaha disambungkan oleh Firefox ditulis sebagai soket: port, atau dalam contoh ini, 192.0.2.100:80. Ini adalah sisi server dari koneksi, tetapi server perlu tahu ke mana harus mengirim halaman web yang ingin Anda lihat di Mozilla Firefox, jadi Anda memiliki soket untuk sisi klien dari koneksi juga.
Koneksi sisi klien terdiri dari alamat IP Anda, seperti 192.168.1.25, dan nomor port dinamis yang dipilih secara acak. Soket yang terkait dengan Firefox terlihat seperti 192.168.1.25:49175. Karena server web beroperasi pada port TCP 80, kedua soket ini adalah soket TCP, sedangkan jika Anda tersambung ke server yang beroperasi pada port UDP, soket server dan klien akan menjadi soket UDP.
Socket adalah abstraksi yang disediakan oleh kernel untuk aplikasi pengguna untuk data I / O. Jenis soket ditentukan oleh protokol penanganannya, komunikasi IPC dll. Jadi, jika seseorang membuat soket TCP ia dapat melakukan manipulasi seperti membaca data ke soket dan menulis data dengan metode sederhana dan penanganan protokol tingkat rendah seperti konversi TCP dan paket penerusan ke protokol jaringan tingkat rendah dilakukan oleh implementasi soket tertentu di kernel. Keuntungannya adalah bahwa pengguna tidak perlu khawatir tentang penanganan protokol spesifik dan harus hanya membaca dan menulis data ke soket seperti buffer normal. Hal yang sama berlaku untuk IPC, pengguna hanya membaca dan menulis data ke soket dan kernel menangani semua detail tingkat lebih rendah berdasarkan jenis soket yang dibuat.
Port bersama dengan IP seperti memberikan alamat ke soket, meskipun itu tidak perlu, tetapi membantu dalam komunikasi jaringan.
Satu port dapat memiliki satu atau lebih soket yang terhubung dengan IP eksternal yang berbeda seperti outlet listrik ganda.
TCP 192.168.100.2:9001 155.94.246.179:39255 ESTABLISHED 1312
TCP 192.168.100.2:9001 171.25.193.9:61832 ESTABLISHED 1312
TCP 192.168.100.2:9001 178.62.199.226:37912 ESTABLISHED 1312
TCP 192.168.100.2:9001 188.193.64.150:40900 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.23.194.149:43970 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.49.73.11:38842 ESTABLISHED 1312
Socket adalah abstraksi SW dari titik akhir jaringan, digunakan sebagai antarmuka ke aplikasi. Di Jawa, C # itu diwakili oleh objek, di Linux, Unix itu adalah file.
Port hanyalah properti soket yang telah Anda tentukan jika ingin menjalin komunikasi. Untuk menerima paket dari soket Anda harus mengikatnya ke port lokal tertentu dan NIC (dengan alamat IP lokal) atau semua NIC (INADDR_ANY ditentukan dalam panggilan mengikat). Untuk mengirim paket, Anda harus menentukan port dan IP dari soket jarak jauh.
Soket pada dasarnya adalah titik akhir untuk komunikasi jaringan, yang terdiri dari setidaknya alamat IP dan porta. Dalam Java / C # soket adalah implementasi level satu sisi dari koneksi dua arah yang lebih tinggi.
Juga, definisi dalam dokumentasi Java .
Pelabuhan:
Port dapat merujuk ke titik koneksi fisik untuk perangkat periferal seperti port serial, paralel, dan USB. Istilah port juga mengacu pada titik-titik koneksi Ethernet tertentu, seperti yang ada pada hub, switch, atau router.
Stopkontak:
Soket mewakili koneksi tunggal antara dua aplikasi jaringan. Kedua aplikasi ini secara nominal berjalan pada komputer yang berbeda, tetapi soket juga dapat digunakan untuk komunikasi antarproses pada satu komputer. Aplikasi dapat membuat beberapa soket untuk berkomunikasi satu sama lain. Soket adalah dua arah, artinya kedua sisi koneksi mampu mengirim dan menerima data.
Port menunjukkan titik akhir komunikasi dalam transport TCP dan UDP untuk protokol jaringan IP. Soket adalah abstraksi perangkat lunak untuk titik akhir komunikasi yang biasa digunakan dalam implementasi protokol ini (soket API). Implementasi alternatif adalah XTI / TLI API.
Lihat juga:
Stevens, WR 1998, Pemrograman Jaringan UNIX: API Jaringan: Soket dan XTI; Volume 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Volume 1: Protokol, Addison-Wesley.