WebSockets और शुद्ध TCP के बीच मूलभूत अंतर क्या है?


167

मैंने WebSockets के बारे में पढ़ा है और मुझे आश्चर्य है कि ब्राउज़र केवल सामान्य टीसीपी कनेक्शन क्यों नहीं खोल सका और किसी भी अन्य डेस्कटॉप एप्लिकेशन की तरह सर्वर से संवाद कर सकता है। और यह संचार वेबस्केट के माध्यम से क्यों संभव है?


8
लेकिन समस्या क्या है? उन्हें टीसीपी का उपयोग करने दें।
xap4o

2
अधिक जानकारी stackoverflow.com/questions/8051516/…
Hernán Eche

2
"वेबसॉकेट एक प्रोटोकॉल है जो एकल टीसीपी कनेक्शन पर पूर्ण-द्वैध संचार चैनल प्रदान करता है"। आप टीसीपी कनेक्शन भी बना सकते हैं जो पूर्ण द्वैध हैं? WebSockets के बारे में यह क्या खास है?
अभिषेक जैन

12
समस्या यह है कि आमतौर पर वेब सर्वर में सुरक्षा कारणों से केवल एक पोर्ट खुला होता है, अर्थात पोर्ट 80। परिभाषा के अनुसार एक बंदरगाह केवल एक आवेदन के लिए संलग्न कर सकते हैं । तो क्या होगा यदि कोई ग्राहक वेब (HTTP) के अलावा किसी सेवा का उपयोग करना चाहता है, लेकिन केवल एक पोर्ट उपलब्ध है? देखा! WebSockets!
पिथिकोस

3
@Pithikos ने बैल की आंख पर प्रहार किया कि हमें वेबसोकेट्स की इस जटिलता की आवश्यकता क्यों है और न कि ब्राउज़र-सर्वर संचार के लिए सीधे टीसीपी सॉकेट्स से निपटने के लिए।
सनी

जवाबों:


260

जब आप इंट्रानेट सीमा के भीतर काम कर रहे हों, तो टीसीपी सॉकेट्स के माध्यम से संवाद करना आसान होता है, क्योंकि आपके पास उस नेटवर्क पर मशीनों पर नियंत्रण है और टीसीपी कनेक्शन बनाने के लिए उपयुक्त पोर्ट खोल सकते हैं।

इंटरनेट पर, आप दूसरे छोर पर किसी और के सर्वर के साथ संचार कर रहे हैं। वे कनेक्शन के लिए किसी भी पुराने सॉकेट को खोलने की बहुत संभावना नहीं है। आमतौर पर उनके पास केवल कुछ मानक होते हैं जैसे HTTP के लिए पोर्ट 80 या HTTPS के लिए 443। तो, सर्वर के साथ संवाद करने के लिए आप उन बंदरगाहों में से एक का उपयोग करके कनेक्ट करने के लिए बाध्य हैं।

यह देखते हुए कि ये वेब सर्वर के लिए मानक पोर्ट हैं जो आमतौर पर HTTP बोलते हैं, इसलिए आप HTTP प्रोटोकॉल के अनुरूप होने के लिए बाध्य हैं, अन्यथा सर्वर आपसे बात नहीं करेगा। वेब सॉकेट्स का उद्देश्य आपको HTTP के माध्यम से कनेक्शन शुरू करने की अनुमति देना है, लेकिन फिर अधिक "टीसीपी सॉकेट" जैसी संचार धारा को अनुमति देने के लिए वेब सॉकेट प्रोटोकॉल (सर्वर ऐसा करने में सक्षम है) का उपयोग करने के लिए बातचीत करता है।


2
आसान स्पष्टीकरण के लिए धन्यवाद, ऐश।
xap4o

तो मूल रूप से WebSocket केवल टीसीपी के लिए एक रैपर है इस मायने में कि यूडीपी आईपी के लिए केवल एक आवरण है?
18

3
@ स्पेसर: एक वेबस्केट को ओवर ऑपरेट करने के लिए किसी प्रकार के ट्रांसपोर्ट प्रोटोकॉल की आवश्यकता होती है, लेकिन उस ट्रांसपोर्ट लेयर को टीसीपी होना आवश्यक नहीं है (यह लगभग हमेशा टीसीपी का अभ्यास करने वाला होता है)। आप टीसीपी के आसपास एक तरह के रैपर के रूप में वेबस्केट्स के बारे में सोच सकते थे, लेकिन मुझे विश्वास नहीं होता कि दोनों के बीच कोई प्रिस्क्रिप्शनल लिंक है।
ऐश

4
"इंटरनेट पर, आप दूसरे छोर पर किसी और के सर्वर के साथ संचार कर रहे हैं।" "यह देखते हुए कि ये वेब सर्वर के लिए मानक पोर्ट (80 और 443) हैं जो आमतौर पर HTTP बोलते हैं, इसलिए आप HTTP प्रोटोकॉल के अनुरूप होने के लिए बाध्य हैं। , अन्यथा सर्वर आपसे बात नहीं करेगा। " आमतौर पर, वेबस्केट सर्वर जिसे हम एक्सेस करते हैं वह हमारा अपना होगा। इसलिए हमारे पास एक प्रोटोकॉल के साथ एक एप्लिकेशन हो सकता है जिसे हम पोर्ट के लिए सुनते हैं। फिर, हमें HTTP हैंडशेक और प्रोटोकॉल स्विचिंग की आवश्यकता क्यों होगी? इसके बजाय हम प्रोटोकॉल जैसे वेबस्कैट का सीधे पालन क्यों नहीं कर सकते?
रतुल

2
RFC6455 द्वारा, WebSocket को पहले HTTP में एक हैंडशेक की जरूरत है और फिर WebSocket को प्रोटोकॉल अपग्रेड की। अधिकांश ब्राउज़र इसका अनुसरण करते हैं। मुझे नहीं पता कि आपका क्लाइंट साइड (ब्राउज़र) कैसे समर्थन करेगा, यदि आप सर्वर में किसी प्रोटोकॉल का उपयोग कर रहे हैं। यह ऐसा है जैसे हम फ्रेंच में बातचीत कर सकते हैं, केवल हम दोनों ही फ्रेंच जानते हैं। और हैंडशेक करना पसंद है, मैं आपसे पूछ रहा हूं, 'क्या हम फ्रेंच में संवाद कर सकते हैं?' यहां ब्राउज़र (जैसे क्रोम) फ्रेंच जानते हैं, लेकिन हमें सर्वर फ्रेंच सिखाना होगा। मेरा सवाल यह था कि RFC6455 (WebSocketProtocol) HTTP में हैंडशेक क्यों करना चाहते हैं और चीजों को जटिल करते हैं, वे इसे अपने तरीके से क्यों नहीं कर सकते?
रतुल

31

वेब ब्राउज़र एप्लिकेशन लेयर पर काम करते हैं, जबकि टीसीपी ट्रांसपोर्ट लेयर पर काम करता है। वेब एप्लिकेशन डेवलपर के रूप में, ट्रांसपोर्ट लेयर पर कच्चे बाइट्स के बजाय एप्लिकेशन लेयर के माध्यम से तार पर संदेश भेजना आसान है।

अंतर्निहित WebSockets है टीसीपी, यह सिर्फ सादगी के लिए दूर निकाला है।


2

Websocket एक एप्लीकेशन लेयर प्रोटोकॉल है जबकि TCP ट्रांसपोर्ट लेयर प्रोटोकॉल है। परिवहन स्तर पर, हमारे पास आमतौर पर टीसीपी और यूडीपी प्रोटोकॉल होता है। एप्लिकेशन लेयर के किसी भी संदेश को अन्य मशीन तक पहुंचाने के लिए ट्रांसपोर्ट लेयर से गुजरना पड़ता है। इसलिए, वेबस्कैट और टीसीपी का एक-दूसरे से संबंध होता है और इसकी तुलना नहीं की जा सकती।


2

इसे सरल बनाने के लिए, वेबसोकेट संचार टीसीपी पोर्ट संख्या 80 (या टीएलएस-एन्क्रिप्टेड कनेक्शन के मामले में 443) पर किया जाता है, जो उन वातावरणों के लिए लाभकारी है जो फ़ायरवॉल का उपयोग करके गैर-वेब इंटरनेट कनेक्शन ब्लॉक करते हैं ।

क्या आप मौजूद TCP पोर्ट का उपयोग करना चाहते हैं या एक नया TCP पोर्ट खोलना चाहते हैं जो फ़ायरवॉल द्वारा अवरुद्ध हो सकता है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.