Perbedaan antara pemrograman jaringan dan pemrograman soket

16

Apakah ada perbedaan besar ketika kita berbicara tentang "pemrograman soket" dibandingkan dengan "pemrograman jaringan"?

Apakah ada beberapa topik yang mencakup "pemrograman jaringan" tetapi tidak "pemrograman soket"?

Aquarius_Girl
sumber

Jawaban:

26

Pemrograman soket (setidaknya seperti istilah yang biasanya digunakan) adalah pemrograman untuk satu jaringan API tertentu. Soket mendukung protokol berbasis IP (terutama TCP dan UDP) 1 .

Pemrograman jaringan dapat dilakukan dengan menggunakan berbagai API lainnya. Windows memiliki sejumlah API protokol-independen seperti fungsi WNet * dan Net *. Versi Windows yang lebih lama juga menggunakan NetBIOS / NetBEUI (NetBIOS End User Interface), dan sebagian besar didukung (dan mungkin masih) IPX / SPX (protokol Netware lama).

Kebanyakan pemrograman jaringan saat ini, bagaimanapun, dilakukan baik menggunakan soket secara langsung, atau menggunakan berbagai lapisan lain di atas soket (misalnya, cukup banyak dilakukan melalui HTTP, yang biasanya diimplementasikan dengan TCP di atas soket). TCP / IP dan UDP / IP (serta sejumlah protokol berbasis IP lainnya) dilakukan terutama melalui antarmuka soket. Secara teori, antarmuka pemrograman lain dapat digunakan, tetapi dalam praktiknya soket tampaknya cukup, sehingga tidak ada banyak minat untuk menggantinya. Saya harus, bagaimanapun, menyebutkan bahwa soket Windows (WinSock) memiliki beberapa ekstensi yang lebih atau kurang unik untuk Windows. Saya kira itu terbuka untuk beberapa argumen apakah kode yang menggunakan ekstensi ini benar-benar memenuhi syarat sebagai kode "soket" atau tidak - mereka ekstensi berdasarkan konsep yang sama, tetapi kode yang menggunakannya tidak t biasanya portabel untuk sistem lain. Saya kira apakah itu memenuhi syarat sebagai "soket" atau tidak tergantung terutama pada apakah Anda menganggap soket lebih sebagai konsep, atau serangkaian fungsi, parameter, dll yang sangat spesifik.

Edit (dalam membalas komentar):

Agak sulit untuk mengatakan apakah "soket tahu" menyiratkan mengetahui "segalanya" tentang TCP dan UDP. Mari kita bahas satu hal kecil: satu program demo untuk soket adalah membuat program obrolan klien / server. Klien terhubung ke server, dan ketika pengguna di satu klien mengetik sesuatu, itu akan diteruskan ke klien lain yang terhubung ke server yang sama. Setiap klien menampilkan apa yang masuk dari server, dan memungkinkan pengguna mengetik pesan untuk dikirim ke klien lain.

Pada saat yang sama, pertimbangkan apa yang termasuk dalam program obrolan "nyata" seperti AIM, Windows Messenger, iChat, dll. Untuk menangani tidak hanya teks, tetapi suara, video, transfer file, grup, daftar, dll., Program tipikal mungkin melibatkan selusin standar yang berbeda, termasuk hal-hal seperti SIP, STUN, MENGHIDUPKAN, RTCP, RTP, XAMPP, mDNS, dll. .

IMO, seseorang yang "tahu soket" harus dapat membuat kode program obrolan (tingkat demo, hanya teks) pertama dalam beberapa jam tanpa menghabiskan banyak waktu dalam file bantuan (dan semacamnya) melakukan penelitian. Kecuali mereka mengklaim setidaknya beberapa pengalaman sebelumnya bekerja pada program obrolan "nyata", saya tidak akan mengharapkan mereka untuk mengetahui RFC / standar mana yang berlaku untuk hal-hal seperti itu.

Hal yang sama berlaku secara umum: mengingat jumlah RFC (dan berbagai standar lainnya) yang diterapkan pada semua hal berbeda yang dilakukan orang melalui jaringan, tidak masuk akal untuk mengharapkan siapa pun untuk menghafal semuanya. Meskipun demikian, jika Anda memiliki seperangkat persyaratan untuk sesuatu yang Anda harapkan orang dapat tangani dalam program "lokal" dengan mudah, cukup menambahkan "melalui jaringan" sebagai persyaratan yang biasanya tidak menambah kesulitan yang luar biasa. (meskipun menangani masalah seperti latensi jaringan).


1 Soket di Unix juga mendukung soket keluarga Unix, tetapi ini (setidaknya biasanya) digunakan untuk IPC intra-mesin, bukan jaringan. Ada juga lusinan protokol lain untuk hal-hal seperti manajemen router yang soketnya tidak benar-benar mendukung (di luar soket mentah memungkinkan Anda untuk membangun dan mengirim paket sewenang-wenang).

Jerry Coffin
sumber
Terima kasih, sekarang ini adalah jawaban yang patut dipertimbangkan. :-) Jadi, dapatkah saya menyimpulkan bahwa ketika saya mengatakan saya tahu pemrograman soket, artinya hanya berurusan dengan " segalanya " dengan TCP / UDP, hanya? Saya perlu tahu segalanya tentang TCP / UDP?
Aquarius_Girl
@AnishaKaul: Lihat jawaban yang sudah diedit.
Jerry Coffin
@ JerryCoffin: Mungkin perlu dicatat bahwa soket juga merupakan bagian dari protokol berbasis IP. Ada beberapa hal seperti ICMP / IP yang tidak tercakup oleh soket juga.
Matthew Scharley
6

"pemrograman jaringan" akan membutuhkan beberapa teknologi jaringan - misalnya, RPC. Soket (kemungkinan besar maksud Anda soket BSD) adalah contoh dari teknologi tersebut. Jadi "pemrograman soket" adalah bagian dari "pemrograman jaringan".

sharptooth
sumber
@Anisha Kaul: Oke, pemrograman RPC adalah pemrograman jaringan (subset daripadanya) dan satu konsep RPC penting adalah apa yang disebut pengikatan tali - lihat msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx Anda tidak perlu hal itu saat memprogram soket BSD.
sharptooth
@Anisha Kaul: Tidak, "semua kemungkinan" adalah daftar besar. Saya akan menyebutkan beberapa yang digunakan secara luas - Java RMI dan .NET Remoting adalah contoh yang baik.
sharptooth
-3

Ya, memang benar bahwa pemrograman jaringan memerlukan teknologi jaringan sementara di sisi lain pemrograman soket adalah bagian dari pemrograman jaringan. Kebanyakan pemrograman jaringan saat ini dilakukan baik menggunakan soket secara langsung, atau menggunakan berbagai lapisan lain di atas soket.

Ajay Prasad
sumber
3
ini tampaknya tidak menambahkan sesuatu yang substansial atas apa yang sudah diposting di jawaban sebelumnya
nyamuk