Apa perbedaan mendasar antara WebSockets dan TCP murni?

167

Saya telah membaca tentang WebSockets dan saya bertanya-tanya mengapa browser tidak bisa begitu saja membuka koneksi TCP sepele dan berkomunikasi dengan server seperti aplikasi desktop lainnya. Dan mengapa komunikasi ini dimungkinkan melalui soket web?

xap4o
sumber
8
Tapi apa masalahnya? Biarkan mereka menggunakan TCP.
xap4o
2
Info lebih lanjut stackoverflow.com/questions/8051516/...
Hernán Eche
2
"WebSocket adalah protokol yang menyediakan saluran komunikasi dupleks penuh melalui satu koneksi TCP". Anda dapat membuat koneksi TCP juga yang dupleks penuh? apa ini spesial tentang WebSockets?
Abhishek Jain
12
Masalahnya adalah bahwa biasanya server web hanya memiliki satu port terbuka untuk alasan keamanan, yaitu port 80. Menurut definisi satu port HANYA dapat melampirkan ke satu aplikasi . Jadi bagaimana jika klien ingin menggunakan layanan, selain web (HTTP) tetapi hanya ada satu port yang tersedia? Voila! Soket web!
Pithikos
3
@Pithikos menjadi perhatian utama mengapa kita membutuhkan kerumitan soket web ini dan tidak hanya berurusan dengan soket TCP langsung untuk komunikasi browser-server.
Sunny

Jawaban:

260

Lebih mudah untuk berkomunikasi melalui soket TCP ketika Anda bekerja di dalam batas intranet, karena Anda mungkin memiliki kendali atas mesin-mesin di jaringan itu dan dapat membuka port yang sesuai untuk membuat koneksi TCP.

Melalui internet, Anda berkomunikasi dengan server orang lain di ujung lainnya. Mereka sangat tidak mungkin memiliki soket lama terbuka untuk koneksi. Biasanya mereka hanya memiliki beberapa yang standar seperti port 80 untuk HTTP atau 443 untuk HTTPS. Jadi, untuk berkomunikasi dengan server Anda wajib terhubung menggunakan salah satu port tersebut.

Karena ini adalah port standar untuk server web yang umumnya berbicara HTTP, Anda wajib mematuhi protokol HTTP, jika tidak server tidak akan berbicara kepada Anda. Tujuan dari soket web adalah untuk memungkinkan Anda memulai koneksi melalui HTTP, tetapi kemudian bernegosiasi untuk menggunakan protokol soket web (dengan asumsi server mampu melakukannya) untuk memungkinkan aliran komunikasi yang lebih mirip "TCP TCP".

Abu
sumber
2
Terima kasih atas penjelasan yang mudah, Ash.
xap4o
Jadi pada dasarnya WebSocket hanyalah pembungkus untuk TCP dalam arti bahwa UDP hanyalah pembungkus untuk IP?
Pacerier
3
@Pacerier: WebSocket memerlukan semacam protokol transport untuk beroperasi, tetapi layer transport tidak harus berupa TCP (hampir selalu akan menjadi TCP dalam praktiknya). Anda bisa menganggap WebSockets sebagai semacam pembungkus TCP, tapi saya tidak percaya ada tautan preskriptif antara keduanya.
Ash
4
"Melalui internet, Anda berkomunikasi dengan server orang lain di ujung yang lain." , jika tidak, server tidak akan berbicara dengan Anda. " Biasanya, server websocket yang kita akses akan menjadi milik kita sendiri. Jadi kita dapat memiliki aplikasi dengan protokol yang kita tentukan mendengarkan port. Lalu, mengapa kita membutuhkan jabat tangan HTTP dan pengalihan protokol? Alih-alih mengapa kita tidak bisa langsung mengikuti protokol seperti websocket?
ratul
2
Oleh RFC6455, WebSocket membutuhkan jabat tangan dalam HTTP terlebih dahulu dan kemudian protokol ditingkatkan ke WebSocket. Sebagian besar browser mengikuti ini. Saya tidak tahu bagaimana sisi klien Anda (browser) akan mendukung, jika Anda menggunakan protokol apa pun di server. Sepertinya kita bisa berkomunikasi dalam bahasa Prancis, hanya kita berdua yang tahu bahasa Prancis. Dan berjabat tangan itu seperti, saya bertanya, 'Bisakah kita berkomunikasi dalam bahasa Prancis?' Dalam bahasa Inggris (di sini HTTP). Di sini browser (seperti chrome) tahu bahasa Prancis tetapi kami harus mengajarkan server bahasa Prancis. Pertanyaan saya adalah mengapa RFC6455 (WebSocketProtocol) ingin melakukan jabat tangan dalam HTTP dan mempersulit hal-hal, mengapa mereka tidak bisa melakukannya dengan cara mereka?
ratul
31

Browser web beroperasi pada lapisan Aplikasi, sedangkan TCP beroperasi pada Transport Layer. Sebagai pengembang aplikasi web, lebih mudah untuk mengirim pesan melalui kabel melalui Layer Aplikasi daripada byte mentah di Transport Layer.

WebSockets yang mendasari adalah TCP, itu hanya disarikan untuk kesederhanaan.

wulfgarpro
sumber
2

Websocket adalah protokol lapisan aplikasi sedangkan TCP adalah protokol lapisan transportasi. Pada layer transport, kita biasanya memiliki protokol TCP dan UDP. Setiap pesan dari lapisan aplikasi harus melalui lapisan transportasi untuk dikirim ke mesin lain. Oleh karena itu, websocket dan tcp memiliki hubungan satu sama lain dan tidak dapat dibandingkan.

Minh Trần
sumber
2

Untuk membuatnya sederhana, komunikasi websocket dilakukan melalui TCP port nomor 80 (atau 443 dalam kasus koneksi terenkripsi TLS), yang bermanfaat bagi lingkungan yang memblokir koneksi internet non-web menggunakan firewall .

Apakah Anda ingin menggunakan port TCP yang ada atau membuka port TCP baru yang mungkin diblokir oleh firewall?

Eugene
sumber