TCP కనెక్షన్ సెటప్
మనం వెబ్ బ్రౌజ్ చేసినప్పుడు, ఇమెయిల్ పంపినప్పుడు, లేదా ఆన్లైన్ గేమ్ ఆడినప్పుడు, దాని వెనుక ఉన్న సంక్లిష్టమైన నెట్వర్క్ కనెక్షన్ గురించి మనం తరచుగా ఆలోచించము. అయితే, మనకు మరియు సర్వర్కు మధ్య స్థిరమైన కమ్యూనికేషన్ను నిర్ధారించేవి ఈ చిన్న చిన్న దశలే. అత్యంత ముఖ్యమైన దశలలో ఒకటి TCP కనెక్షన్ సెటప్, మరియు దీనికి మూలమైనది త్రీ-వే హ్యాండ్షేక్.
ఈ వ్యాసం త్రీ-వే హ్యాండ్షేక్ యొక్క సూత్రం, ప్రక్రియ మరియు ప్రాముఖ్యతను వివరంగా చర్చిస్తుంది. త్రీ-వే హ్యాండ్షేక్ ఎందుకు అవసరమో, అది కనెక్షన్ స్థిరత్వం మరియు విశ్వసనీయతను ఎలా నిర్ధారిస్తుందో, మరియు డేటా బదిలీకి అది ఎంత ముఖ్యమైనదో దశలవారీగా వివరిస్తాము. త్రీ-వే హ్యాండ్షేక్పై లోతైన అవగాహనతో, మనం నెట్వర్క్ కమ్యూనికేషన్ యొక్క అంతర్లీన యంత్రాంగాలపై మెరుగైన అవగాహనను మరియు TCP కనెక్షన్ల విశ్వసనీయతపై స్పష్టమైన దృక్పథాన్ని పొందుతాము.
TCP త్రీ-వే హ్యాండ్షేక్ ప్రక్రియ మరియు స్టేట్ ట్రాన్సిషన్స్
TCP అనేది ఒక కనెక్షన్-ఆధారిత రవాణా ప్రోటోకాల్, దీనికి డేటా ప్రసారానికి ముందు కనెక్షన్ ఏర్పాటు అవసరం. ఈ కనెక్షన్ ఏర్పాటు ప్రక్రియ త్రీ-వే హ్యాండ్షేక్ ద్వారా జరుగుతుంది.
ప్రతి కనెక్షన్లో పంపబడే TCP ప్యాకెట్లను మరింత నిశితంగా పరిశీలిద్దాం.
ప్రారంభంలో, క్లయింట్ మరియు సర్వర్ రెండూ మూసివేయబడి ఉంటాయి. మొదట, సర్వర్ ఒక పోర్ట్పై చురుకుగా వింటూ LISTEN స్థితిలో ఉంటుంది, అంటే సర్వర్ను తప్పనిసరిగా ప్రారంభించాలి. తరువాత, క్లయింట్ వెబ్పేజీని యాక్సెస్ చేయడం ప్రారంభించడానికి సిద్ధంగా ఉంటుంది. ఇది సర్వర్తో కనెక్షన్ను ఏర్పరచుకోవాలి. మొదటి కనెక్షన్ ప్యాకెట్ యొక్క ఫార్మాట్ ఈ క్రింది విధంగా ఉంటుంది:
ఒక క్లయింట్ కనెక్షన్ను ప్రారంభించినప్పుడు, అది ఒక యాదృచ్ఛిక ప్రారంభ సీక్వెన్స్ నంబర్ను (client_isn) సృష్టించి, దానిని TCP హెడర్ యొక్క "సీక్వెన్స్ నంబర్" ఫీల్డ్లో ఉంచుతుంది. అదే సమయంలో, బయటకు వెళ్లే ప్యాకెట్ ఒక SYN ప్యాకెట్ అని సూచించడానికి క్లయింట్ SYN ఫ్లాగ్ పొజిషన్ను 1కి సెట్ చేస్తుంది. సర్వర్కు మొదటి SYN ప్యాకెట్ను పంపడం ద్వారా, సర్వర్తో కనెక్షన్ను ఏర్పాటు చేయాలనుకుంటున్నట్లు క్లయింట్ సూచిస్తుంది. ఈ ప్యాకెట్లో అప్లికేషన్ లేయర్ డేటా (అంటే, పంపిన డేటా) ఉండదు. ఈ సమయంలో, క్లయింట్ యొక్క స్థితి SYN-SENTగా గుర్తించబడుతుంది.
సర్వర్ క్లయింట్ నుండి SYN ప్యాకెట్ను స్వీకరించినప్పుడు, అది యాదృచ్ఛికంగా దాని స్వంత సీరియల్ నంబర్ను (server_isn) ప్రారంభించి, ఆ నంబర్ను TCP హెడర్ యొక్క "సీరియల్ నంబర్" ఫీల్డ్లో ఉంచుతుంది. తరువాత, సర్వర్ "అక్నాలెడ్జ్మెంట్ నంబర్" ఫీల్డ్లో client_isn + 1ని నమోదు చేసి, SYN మరియు ACK బిట్లు రెండింటినీ 1కి సెట్ చేస్తుంది. చివరగా, సర్వర్ ప్యాకెట్ను క్లయింట్కు పంపుతుంది, ఇందులో ఎటువంటి అప్లికేషన్-లేయర్ డేటా ఉండదు (మరియు సర్వర్ పంపడానికి కూడా ఎటువంటి డేటా ఉండదు). ఈ సమయంలో, సర్వర్ SYN-RCVD స్థితిలో ఉంటుంది.
సర్వర్ నుండి ప్యాకెట్ను స్వీకరించిన తర్వాత, క్లయింట్ తుది ప్రత్యుత్తర ప్యాకెట్కు ప్రతిస్పందించడానికి ఈ క్రింది ఆప్టిమైజేషన్లను నిర్వహించాల్సి ఉంటుంది: మొదట, క్లయింట్ ప్రత్యుత్తర ప్యాకెట్ యొక్క TCP హెడర్లోని ACK బిట్ను 1కి సెట్ చేస్తుంది; రెండవది, క్లయింట్ "సమాధాన సంఖ్యను నిర్ధారించండి" ఫీల్డ్లో server_isn + 1 విలువను నమోదు చేస్తుంది; చివరగా, క్లయింట్ ప్యాకెట్ను సర్వర్కు పంపుతుంది. ఈ ప్యాకెట్ క్లయింట్ నుండి సర్వర్కు డేటాను తీసుకువెళ్లగలదు. ఈ కార్యకలాపాలు పూర్తయిన తర్వాత, క్లయింట్ ESTABLISHED స్థితిలోకి ప్రవేశిస్తుంది.
క్లయింట్ నుండి ప్రత్యుత్తర ప్యాకెట్ను స్వీకరించిన తర్వాత, సర్వర్ కూడా ESTABLISHED స్థితికి మారుతుంది.
పై ప్రక్రియ నుండి మీరు గమనించినట్లుగా, త్రీ-వే హ్యాండ్షేక్ చేస్తున్నప్పుడు, మూడవ హ్యాండ్షేక్ డేటాను పంపడానికి అనుమతించబడుతుంది, కానీ మొదటి రెండు హ్యాండ్షేక్లు అనుమతించబడవు. ఇది ఇంటర్వ్యూలలో తరచుగా అడిగే ప్రశ్న. త్రీ-వే హ్యాండ్షేక్ పూర్తయిన తర్వాత, రెండు పక్షాలు 'ఎస్టాబ్లిష్డ్' (ESTABLISHED) స్థితిలోకి ప్రవేశిస్తాయి. ఇది కనెక్షన్ విజయవంతంగా ఏర్పడిందని సూచిస్తుంది, ఆ సమయంలో క్లయింట్ మరియు సర్వర్ ఒకదానికొకటి డేటాను పంపడం ప్రారంభించవచ్చు.
మూడుసార్లు ఎందుకు కరచాలనం? రెండుసార్లు, నాలుగుసార్లు కాదు?
సాధారణంగా ఇచ్చే సమాధానం, "ఎందుకంటే త్రీ-వే హ్యాండ్షేక్ స్వీకరించే మరియు పంపే సామర్థ్యానికి హామీ ఇస్తుంది." ఈ సమాధానం సరైనదే, కానీ ఇది కేవలం ఉపరితల కారణం మాత్రమే, అసలు కారణాన్ని ముందుకు తీసుకురాదు. ఈ విషయంపై మన అవగాహనను మరింత పెంచుకోవడానికి, నేను కింద ట్రిపుల్ హ్యాండ్షేక్కు గల కారణాలను మూడు కోణాల నుండి విశ్లేషిస్తాను.
త్రీ-వే హ్యాండ్షేక్ చారిత్రాత్మకంగా పునరావృతమయ్యే కనెక్షన్ల ప్రారంభాన్ని సమర్థవంతంగా నివారించగలదు (ప్రధాన కారణం).
మూడు-మార్గాల హ్యాండ్షేక్ రెండు పక్షాలు విశ్వసనీయమైన ప్రారంభ క్రమ సంఖ్యను అందుకున్నాయని హామీ ఇస్తుంది.
త్రైపాక్షిక కరచాలనం వనరుల వృధాను నివారిస్తుంది.
కారణం 1: చారిత్రక డూప్లికేట్ జాయిన్లను నివారించండి
క్లుప్తంగా చెప్పాలంటే, పాత డూప్లికేట్ కనెక్షన్ ప్రారంభం వలన కలిగే గందరగోళాన్ని నివారించడమే త్రీ-వే హ్యాండ్షేక్కు ప్రధాన కారణం. సంక్లిష్టమైన నెట్వర్క్ వాతావరణంలో, డేటా ప్యాకెట్ల ప్రసారం ఎల్లప్పుడూ నిర్దిష్ట సమయానికి గమ్యస్థాన హోస్ట్కు పంపబడదు, మరియు నెట్వర్క్ రద్దీ మరియు ఇతర కారణాల వల్ల పాత డేటా ప్యాకెట్లు గమ్యస్థాన హోస్ట్కు ముందుగా చేరుకోవచ్చు. దీనిని నివారించడానికి, TCP కనెక్షన్ను స్థాపించడానికి త్రీ-వే హ్యాండ్షేక్ను ఉపయోగిస్తుంది.
నెట్వర్క్ రద్దీ వంటి పరిస్థితులలో, ఒక క్లయింట్ వరుసగా అనేక SYN కనెక్షన్ ఏర్పాటు ప్యాకెట్లను పంపినప్పుడు, ఈ క్రిందివి సంభవించవచ్చు:
1- పాత SYN ప్యాకెట్లు సరికొత్త SYN ప్యాకెట్ల కంటే ముందుగా సర్వర్కు చేరుకుంటాయి.
2- పాత SYN ప్యాకెట్ను స్వీకరించిన తర్వాత సర్వర్ క్లయింట్కు SYN + ACK ప్యాకెట్ను ప్రత్యుత్తరంగా పంపుతుంది.
3- క్లయింట్ SYN + ACK ప్యాకెట్ను స్వీకరించినప్పుడు, అది తన సొంత సందర్భం ప్రకారం కనెక్షన్ ఒక పాత కనెక్షన్ (సీక్వెన్స్ నంబర్ గడువు ముగిసింది లేదా టైమ్అవుట్ అయింది) అని నిర్ధారించుకుని, ఆపై కనెక్షన్ను రద్దు చేయడానికి సర్వర్కు RST ప్యాకెట్ను పంపుతుంది.
టూ-హ్యాండ్షేక్ కనెక్షన్లో, ప్రస్తుత కనెక్షన్ పాత కనెక్షనో కాదో నిర్ధారించడానికి మార్గం లేదు. త్రీ-వే హ్యాండ్షేక్, క్లయింట్ మూడవ ప్యాకెట్ను పంపడానికి సిద్ధంగా ఉన్నప్పుడు, సందర్భాన్ని బట్టి ప్రస్తుత కనెక్షన్ పాత కనెక్షనో కాదో నిర్ధారించుకోవడానికి వీలు కల్పిస్తుంది:
1- అది ఒక పాత కనెక్షన్ అయితే (సీక్వెన్స్ నంబర్ గడువు ముగిసినా లేదా టైమ్అవుట్ అయినా), మూడవ హ్యాండ్షేక్ ద్వారా పంపబడిన ప్యాకెట్ ఆ పాత కనెక్షన్ను రద్దు చేయడానికి ఉద్దేశించిన RST ప్యాకెట్ అవుతుంది.
2- అది చారిత్రక కనెక్షన్ కాకపోతే, మూడవసారి పంపిన ప్యాకెట్ ఒక ACK ప్యాకెట్ అవుతుంది మరియు కమ్యూనికేట్ చేస్తున్న రెండు పక్షాలు కనెక్షన్ను విజయవంతంగా ఏర్పాటు చేసుకుంటాయి.
అందువల్ల, TCP త్రీ-వే హ్యాండ్షేక్ను ఉపయోగించడానికి ప్రధాన కారణం ఏమిటంటే, అది పాత కనెక్షన్లను నిరోధించడానికి కనెక్షన్ను ప్రారంభిస్తుంది.
కారణం 2: ఇరు పక్షాల ప్రారంభ క్రమ సంఖ్యలను సమకాలీకరించడానికి
TCP ప్రోటోకాల్ యొక్క రెండు వైపులా ఒక సీక్వెన్స్ నంబర్ను తప్పనిసరిగా నిర్వహించాలి, ఇది విశ్వసనీయ ప్రసారాన్ని నిర్ధారించడానికి ఒక కీలక అంశం. TCP కనెక్షన్లలో సీక్వెన్స్ నంబర్లు ముఖ్యమైన పాత్ర పోషిస్తాయి. అవి ఈ క్రింది పనులను చేస్తాయి:
రిసీవర్ నకిలీ డేటాను తొలగించి, డేటా యొక్క ఖచ్చితత్వాన్ని నిర్ధారించగలదు.
డేటా సమగ్రతను నిర్ధారించడానికి రిసీవర్ ప్యాకెట్లను సీక్వెన్స్ నంబర్ క్రమంలో స్వీకరించగలదు.
● సీక్వెన్స్ నంబర్ అవతలి పక్షం స్వీకరించిన డేటా ప్యాకెట్ను గుర్తించగలదు, తద్వారా విశ్వసనీయమైన డేటా ప్రసారాన్ని సాధ్యం చేస్తుంది.
అందువల్ల, TCP కనెక్షన్ను ఏర్పాటు చేసిన తర్వాత, క్లయింట్ ప్రారంభ సీక్వెన్స్ నంబర్తో SYN ప్యాకెట్లను పంపుతుంది మరియు క్లయింట్ యొక్క SYN ప్యాకెట్ను విజయవంతంగా స్వీకరించినట్లు సూచిస్తూ సర్వర్ ఒక ACK ప్యాకెట్తో ప్రత్యుత్తరం ఇవ్వాలని కోరుతుంది. ఆ తర్వాత, సర్వర్ ప్రారంభ సీక్వెన్స్ నంబర్తో కూడిన SYN ప్యాకెట్ను క్లయింట్కు పంపి, ప్రారంభ సీక్వెన్స్ నంబర్లు విశ్వసనీయంగా సమకాలీకరించబడ్డాయని నిర్ధారించుకోవడానికి, క్లయింట్ ప్రత్యుత్తరం ఇచ్చే వరకు శాశ్వతంగా వేచి ఉంటుంది.
ఇరు పక్షాల ప్రారంభ సీక్వెన్స్ నంబర్లను విశ్వసనీయంగా సమకాలీకరించడానికి ఫోర్-వే హ్యాండ్షేక్ కూడా సాధ్యమైనప్పటికీ, రెండవ మరియు మూడవ దశలను ఒకే దశగా కలపవచ్చు, దీని ఫలితంగా త్రీ-వే హ్యాండ్షేక్ ఏర్పడుతుంది. అయితే, ఈ రెండు హ్యాండ్షేక్లు ఒక పక్షం యొక్క ప్రారంభ సీక్వెన్స్ నంబర్ను మరొక పక్షం విజయవంతంగా స్వీకరించిందని మాత్రమే హామీ ఇవ్వగలవు, కానీ ఇరు పక్షాల ప్రారంభ సీక్వెన్స్ నంబర్లు నిర్ధారించబడతాయని ఎటువంటి హామీ లేదు. అందువల్ల, TCP కనెక్షన్ల స్థిరత్వం మరియు విశ్వసనీయతను నిర్ధారించడానికి త్రీ-వే హ్యాండ్షేక్ ఉత్తమమైన ఎంపిక.
కారణం 3: వనరులను వృధా చేయడాన్ని నివారించండి
ఒకవేళ "టూ-హ్యాండ్షేక్" మాత్రమే ఉంటే, నెట్వర్క్లో క్లయింట్ SYN రిక్వెస్ట్ బ్లాక్ చేయబడినప్పుడు, సర్వర్ పంపిన ACK ప్యాకెట్ను క్లయింట్ అందుకోలేదు, కాబట్టి SYN మళ్లీ పంపబడుతుంది. అయితే, మూడవ హ్యాండ్షేక్ లేనందున, కనెక్షన్ను స్థాపించడానికి క్లయింట్ ACK అక్నాలెడ్జ్మెంట్ను అందుకుందో లేదో సర్వర్ నిర్ధారించలేదు. అందువల్ల, సర్వర్ ప్రతి SYN రిక్వెస్ట్ను స్వీకరించిన తర్వాత మాత్రమే చురుకుగా కనెక్షన్ను స్థాపించగలదు. ఇది ఈ క్రింది వాటికి దారితీస్తుంది:
వనరుల వృధా: క్లయింట్ యొక్క SYN అభ్యర్థన నిరోధించబడితే, దాని ఫలితంగా అనేక SYN ప్యాకెట్లు పదేపదే ప్రసారం చేయబడతాయి, అప్పుడు సర్వర్ అభ్యర్థనను స్వీకరించిన తర్వాత అనేక అనవసరమైన చెల్లని కనెక్షన్లను ఏర్పాటు చేస్తుంది. ఇది సర్వర్ వనరులను అనవసరంగా వృధా చేయడానికి దారితీస్తుంది.
సందేశ నిలుపుదల: మూడవ హ్యాండ్షేక్ లేకపోవడం వల్ల, కనెక్షన్ను స్థాపించడానికి క్లయింట్ ACK అంగీకారాన్ని సరిగ్గా అందుకుందో లేదో తెలుసుకునే మార్గం సర్వర్కు ఉండదు. ఫలితంగా, సందేశాలు నెట్వర్క్లో చిక్కుకుపోతే, క్లయింట్ పదే పదే SYN అభ్యర్థనలను పంపుతూనే ఉంటుంది, దీనివల్ల సర్వర్ నిరంతరం కొత్త కనెక్షన్లను స్థాపించాల్సి వస్తుంది. ఇది నెట్వర్క్ రద్దీని మరియు ఆలస్యాన్ని పెంచుతుంది మరియు మొత్తం నెట్వర్క్ పనితీరుపై ప్రతికూల ప్రభావాన్ని చూపుతుంది.
అందువల్ల, నెట్వర్క్ కనెక్షన్ యొక్క స్థిరత్వం మరియు విశ్వసనీయతను నిర్ధారించడానికి, ఈ సమస్యలు తలెత్తకుండా నివారించడానికి TCP కనెక్షన్ను ఏర్పాటు చేయడానికి త్రీ-వే హ్యాండ్షేక్ను ఉపయోగిస్తుంది.
సారాంశం
దినెట్వర్క్ ప్యాకెట్ బ్రోకర్TCP కనెక్షన్ ఏర్పాటు త్రీ-వే హ్యాండ్షేక్ ద్వారా జరుగుతుంది. త్రీ-వే హ్యాండ్షేక్ సమయంలో, క్లయింట్ మొదటగా తాను కనెక్షన్ను ఏర్పాటు చేయాలనుకుంటున్నట్లు సూచిస్తూ, SYN ఫ్లాగ్తో ఒక ప్యాకెట్ను సర్వర్కు పంపుతుంది. క్లయింట్ నుండి అభ్యర్థనను స్వీకరించిన తర్వాత, సర్వర్ కనెక్షన్ అభ్యర్థన అంగీకరించబడిందని సూచిస్తూ, SYN మరియు ACK ఫ్లాగ్లతో ఒక ప్యాకెట్ను క్లయింట్కు ప్రత్యుత్తరంగా పంపి, తన సొంత ప్రారంభ సీక్వెన్స్ నంబర్ను పంపుతుంది. చివరగా, కనెక్షన్ విజయవంతంగా ఏర్పాటు చేయబడిందని సూచించడానికి క్లయింట్ ACK ఫ్లాగ్తో సర్వర్కు ప్రత్యుత్తరం ఇస్తుంది. ఈ విధంగా, రెండు పక్షాలు ESTABLISHED స్థితిలో ఉండి, ఒకదానికొకటి డేటాను పంపడం ప్రారంభించవచ్చు.
సాధారణంగా, TCP కనెక్షన్ ఏర్పాటు కోసం చేసే త్రీ-వే హ్యాండ్షేక్ ప్రక్రియ, కనెక్షన్ స్థిరత్వం మరియు విశ్వసనీయతను నిర్ధారించడానికి, గత కనెక్షన్ల వల్ల కలిగే గందరగోళం మరియు వనరుల వృధాను నివారించడానికి, మరియు ఇరు పక్షాలు డేటాను స్వీకరించగలవని మరియు పంపగలవని నిర్ధారించడానికి రూపొందించబడింది.
పోస్ట్ చేసిన సమయం: జనవరి-08-2025






