क्या ये 2 पैकेट एक ही tcp सॉकेट के हैं?
मान लीजिए कि हम दो पैकेट करते हैं A
और B
।
A
: स्रोत-आईपी S1
, गंतव्य-आईपी D1
, स्रोत-बंदरगाह SP1
, गंतव्य-बंदरगाह हैDP1
B
: स्रोत-आईपी S2
, गंतव्य-आईपी D1
, स्रोत-बंदरगाह SP2
, गंतव्य-बंदरगाह हैDP1
दोनों टीसीपी हैं। क्या इन दोनों पैकेटों में अब एक ही सॉकेट होगा?
यूडीपी के बारे में मैंने पढ़ा है कि इसके सॉकेट में गंतव्य-आईपी और गंतव्य-पोर्ट-संख्या होती है। सू अगर यह यूडीपी के साथ किया गया था, तो दोनों पैकेट एक ही सॉकेट द्वारा प्राप्त किए जाएंगे।
लेकिन यह उदाहरण टीसीपी के लिए है और यहां मुझे यकीन नहीं है कि क्या यह टीसीपी के लिए भी उसी सॉकेट से गुजरेगा?
जवाब
सबसे पहले, टीसीपी एकल पैकेट के बारे में परवाह नहीं करता है। यदि ये पिछले कनेक्शन कनेक्शन के बिना सिर्फ डेटा पैकेट हैं, तो उन्हें बस छोड़ दिया जाएगा, इसमें कोई सॉकेट शामिल नहीं है। इसलिए मैं मान रहा हूं कि यह स्थापित कनेक्शन के बारे में है, या कनेक्शन स्थापित करने के लिए शुरुआती पैकेट हैं। एक टीसीपी कनेक्शन को कम से कम 4 tuple of (src-ip, src-port, dst-ip, dst-port) द्वारा परिभाषित किया गया है। चूंकि ये 4 टुपल्स स्पष्ट रूप से दोनों मामलों में भिन्न हैं, इसलिए अलग-अलग सॉकेट्स की आवश्यकता होगी।
यूडीपी के बारे में मैंने पढ़ा है कि इसके सॉकेट में गंतव्य-आईपी और गंतव्य-पोर्ट-संख्या होती है।
यह केवल असंबद्ध यूडीपी सॉकेट के लिए सही है । साथ जुड़ा यूडीपी सॉकेट फिर 4-टपल प्रासंगिक है।
UDP के बारे में मैंने पढ़ा है कि ...
टीसीपी और यूडीपी के बीच मुख्य अंतर यह है कि टीसीपी कनेक्शन-उन्मुख है, जबकि यूडीपी एकल पैकेट प्रसारित करने के लिए उपयोग किया जाता है।
एक यूडीपी सॉकेट कंप्यूटर पर एक निश्चित (गंतव्य) पोर्ट पर पहुंचने वाले सभी यूडीपी पैकेट को संभाल रहा है।
एक टीसीपी सॉकेट एक निश्चित टीसीपी कनेक्शन से संबंधित सभी पैकेटों को संभाल रहा है।
क्या इन दोनों पैकेटों में अब एक ही सॉकेट होगा?
यह आपके विचार से अधिक जटिल है:
आपके द्वारा वर्णित स्थिति आमतौर पर "सर्वर-साइड" पर होती है (कंप्यूटर पर जो accept()
आने वाले कनेक्शन को संभालने के लिए एपीआई का उपयोग करता है - जैसे कि वेब सर्वर)।
मान लें कि दो कंप्यूटर (वेब ब्राउज़र चलाना) एक ही वेब सर्वर से कनेक्ट करना चाहते हैं। दोनों कंप्यूटरों ने समान "सोर्स टीसीपी पोर्ट" को चुना। इस स्थिति में वेब सर्वर पर दो कंप्यूटरों द्वारा भेजे गए पैकेट आपकी स्थिति को संतुष्ट करते हैं: केवल स्रोत आईपी पता दोनों कंप्यूटरों द्वारा भेजे गए पैकेटों में भिन्न होता है, जबकि गंतव्य आईपी पता, गंतव्य बंदरगाह और स्रोत पोर्ट समान होते हैं।
हालांकि, "सर्वर-साइड" पर दो कुर्सियां एक एकल टीसीपी कनेक्शन को संभालने में शामिल हैं :
- एक सॉकेट जो उपयोग करता है
listen()
औरaccept()
आने वाले टीसीपी कनेक्शन की प्रतीक्षा करता है । - प्रत्येक आने वाले टीसीपी कनेक्शन के लिए एक सॉकेट जो कि वापस आ जाता है
accept()
।
जब टीसीपी पैकेट टीसीपी कनेक्शन का पहला पैकेट होता है, तो पैकेट को टीसीपी सॉकेट द्वारा "हैंडल" किया जाता है, listen()
जो गंतव्य पोर्ट पर प्रदर्शन कर रहा है ।
यह सॉकेट स्रोत आईपी पते की परवाह नहीं करता है और न ही स्रोत टीसीपी पोर्ट - यूडीपी सॉकेट की तरह। सॉकेट एक निश्चित गंतव्य आईपी पते और एक निश्चित गंतव्य बंदरगाह वाले टीसीपी कनेक्शन के सभी पहले पैकेटों को संभाल रहा है।
जब वह पहला पैकेट प्राप्त होता है, तो दूसरा सॉकेट (टीसीपी कनेक्शन को संभालना) access()
एपीआई द्वारा बनाया और वापस किया जाता है।
यह सॉकेट एक निश्चित कनेक्शन (और इसलिए टीसीपी कनेक्शन के सभी आगे के पैकेट) को संभालता है।
क्योंकि हमारे पास उदाहरण में दो अलग-अलग कनेक्शन हैं, एक ही सर्वर से कनेक्ट होने वाले दो कंप्यूटर एक ही "सोर्स टीसीपी पोर्ट" का उपयोग करते हैं, दो अलग-अलग सॉकेट पैकेट को संभालेंगे जो केवल गंतव्य टीसीपी पोर्ट में भिन्न होते हैं।