TCP (Transmission Control Protocol)

Introduction to TCP (Transmission Control Protocol)

Transport layer पर 2 तरह के protocols पाये जाते है।

  • Connection-less protocol - इस तरह के protocol में जब data send किया जाता है तो sender और receiver के बीच में कोई connection established नहीं होता है। इस category के protocol का मुख्य उदाहरण UDP (User Data-gram Protocol) है।
  • Connection oriented protocol - इस तरह के protocol में data transfer के दौरान sender और receiver के बीच में connection establish किया जाता है। इस category के protocol का उदाहरण TCP (Transmission Control Protocol) है।

TCP (Transmission Control Protocol) एक transport layer connection oriented protocol है। ये protocol reliable delivery provide करता है। TCP और Internet Protocol मिलकर Internet Protocol Suit बनाते है। TCP को RFC 675 में define किया गया था। हालाँकि शुरू में TCP को network layer और transport layer services provide करने के लिए बनाया गया था लेकिन ये एक अनुपयोगी combination साबित हुआ। इसलिए इसके network layer functions को अलग करके उससे IP (Internet Protocol) को design किया गया और केवल transport layer functions के साथ TCP को दुबारा introduce किया गया। इस दौरान TCP को दुबारा RFC 793 में define किया गया था।

TCP connection oriented है। 2 devices के बीच में connection establish करने के लिए दोनों devices को कुछ parameters को fulfill करना होता तब ही connection establish हो पाता है। आइये TCP की connection process को समझने का प्रयास करते है।

TCP Connection Establishment (Three Way Handshake)

TCP में connection establishment बहुत ही simple है इसे Three way handshake के द्वारा perform किया जाता है। Three way handshake sender और receiver के बीच में messages की sequence होती है जिससे connection establish किया जाता है।

सबसे पहले Sender receiver को message भेजता है की वो connection establish करके कुछ data भेजना चाहता है। जब receiver को ये message मिलता है तो receiver वापस sender को message भेजता है की वो data के लिए ready क्या sender ready है। इसके बाद sender वापस एक message भेजता है जो की receiver को data की sequence बताता है। इसके बाद sender और receiver के बीच में data transfer शुरू हो जाता है।

Sender और receiver के बीच में भेजे जाने वाले ये messages 3 तरह के होते है। इनके बारे में निचे दिया जा रहा है।

  • SYN - Connection Request
  • SYN + ACK - sequence number request cum acceptance of connection request
  • ACK - Acceptance of connection request and data sequence numbers

निचे connection establishment process को कुछ simple steps के द्वारा define किया जा रहा है।

  1. सबसे पहले sender synchronization message के द्वारा connection establish करने की request करता है।
  2. इसके बाद receiver synchronization cum acknowledge message के द्वारा connection establish करने की स्वीकृति देता है और data के sequence numbers के लिए request करता है।
  3. इसके बाद sender data के sequence numbers के रूप में अपनी स्वीकृति प्रदान करता है।
  4. अब connection establish हो चूका है और sender और receiver के बीच में data transfer शुरू हो जाता है।
tcp connection handshake in Hindi

TCP में connection bidirectional होता है। इससे से कोई फर्क नहीं पड़ता की connection की request किसने भेजी थी। जो भी चाहे वो data transfer शुर कर सकता है। TCP के द्वारा एक साथ कई connections establish किये जा सकते है। हर connection को TCP individually track कर सकता है। Connections को sockets के द्वारा identify किया जाता है। Sockets destination और host दोनों तरफ होते है। सभी connection से related data को Transmission control block में maintain किया जाता है।

Segmentation

Network layer के द्वारा data transport layer को दिया जाता है। Transport layer पर ये data TCP segments में convert किया जाता है। Data को transfer करने से पहले छोटे छोटे segments के रूप में तोडना segmentation कहलाता है। Segmentation TCP का एक primary task है।

Network layer के द्वारा TCP को packets transfer किये जाते है। Packets size में बहुत बड़े होते है इसलिए इन्हें छोटे छोटे parts में divide कर दिया जाता है। ये parts segments कहलाते है। आपको ये भी ध्यान रखना चाहिए की transport layer पर data segment कहलाता है।

Sequencing

Data को segments के रूप में तोड़ने के साथ ही हर segment को एक sequence number दिया जाता है। Data की sequencing के 2 advantages निचे दिए जा रहे है।

  • Segments को sequence number देने से receiver सभी segments को receive करने के बाद उन्हें proper order में arrange कर सकता है।
  • Transfer के दौरान यदि कोई segment drop भी हो जाये तो sequence number के द्वारा उसे identify करके दोबारा भेजा जा सकता है।

जब भी कोई segment किसी sequence number के साथ आता हैं तो receiver उस sequence number को +1 करके acknowledge भेजता है। इसका मतलब ये होता है की मुझे segment मिल चूका है आप इससे next segment भेजिए।

TCP एक बहुत ही reliable protocol है इसमें हर transfer को acknowledge किया जाता है। मान लीजिए sender ने segment number 101 भेजा है। Receiver इस segment को पाकर acknowledgment message के द्वारा sender को बतायेगा की मुझे segment number 101 मिल चुका है और साथ ही receiver इसमें 1 number add करके भेजेगा। 1 add करके भेजने का मतलब होता है की अब आप next segment भेज दीजिये। इस उदाहरण में receiver sequence number 102 भेजेगा जो sender को बताता है की next segment भेजना है। जब किसी receiver के द्वारा कोई acknowledgement नहीं मिलता है तो sender उस segment को दुबारा भेजता है।

Sliding Window

जब आप TCP header को देखेंगे तो पाएंगे की उसमें एक window field होता है। इस window field से ये define किया जाता है की receiver कितनी bytes का data एक बार में receive कर सकता है। उदाहरण के लिए कोई sender की data transfer speed और buffer size अधिक हो सकती है। लेकिन यदि दूसरी तरफ receiver की speed और buffer size कम है तो receiver कम bytes की window size value set करके sender को भेजेगा। इससे sender को ये पता चलता है की receiver कितना data कितनी तेजी से receive कर सकता है।

Sender शुरू में हमेशा कम size के segments transfer करता है। लेकिन जब sender को लगता है की receiver आसानी से receive कर रहा है तो sender transfer speed को बढ़ाने का प्रयास करता है और ज्यादा size का data भेजता है। यदि receiver इस size के data को receive कर लेता है तो sender आगे के सभी packets इसी size के भेजता है। थोड़ी देर बाद sender वापस transfer speed को बढ़ाने के लिए और बड़ी size का data भेजता है। यदि receiver इस data को भी receive कर लेता है तो sender फिर इसी size का data भेजता है। लेकिन यदि इस data का size receiver के buffer से अधिक है तो receiver window field की value 0 set करके भेजता है। इससे sender को पता चलता है की sender इस size का data receive नहीं कर सकता है। इसके बाद sender पुरानी इससे कम size का data भेजता है।

Window size का एक मतलब ये और होता है की कितने segments या bytes sender बिना किसी acknowledgment के भेज सकता है। जब receiver segments receive करता है तो आखिर segment में +1 करके acknowledgment भेजता है जिसका मतलब होता है की पिछले सभी segments receive कर लिए गए है। अब आप आगे के segments भेज सकते है।

sliding window in TCP connection

Terminating a TCP Connection

जब तक कोई host (sender or receiver) खुद connection को terminate नहीं करते है तब तक connection established ही रहता है। दोनों में से कोई भी host connection को terminate कर सकता है। ज्यादातर जब data transfer complete हो जाता है तो connection को terminate कर दिया जाता है। दोनों hosts को connection terminate करने की ability इसलिए दी गई है ताकि connection के terminate होने से पहले data transfer पूरी तरह complete हो सके। यदि ऐसा न हो तो एक ही host के पास पूरा control होता है और इससे data transfer होने से पहले ही connection terminate होने के chances होते है।

जब भी कोई host connection को terminate करना चाहता है तो वह एक message send करता है जिसमें FIN flag set होता है। FIN flag का मतलब Finish होता है। ये बताता है की इस message को send करने वाला host connection को terminate करना चाहता है।

उदाहरण के लिए जब host A FIN message send करता है तो ये FIN message को acknowledge होने का इंतज़ार करेगा और FIN-WAIT state में चला जायेगा। इसके बाद host B acknowledge message send करता है और FIN को acknowledge करता है। Host A कुछ भी ना करते हुए FIN state में रहता है। अब same process को follow करते हुए host B FIN message send करता है तो FIN-WAIT state में चला जाता है। इसके बाद host A इस FIN message को receive करके acknowledgement message भेजता है। इसके बाद दोनों तरफ से connection terminate हो जाता है।

आसान शब्दों में कहें तो पहले एक host FIN message भेजेगा और acknowledge होने के लिए wait करेगा। ऐसे ही फिर दूसरा host FIN message send करेगा और acknowledge होने के लिए wait करेगा। जब दोनों host एक दूसरे के FIN message को acknowledge कर देते है तो connection terminate हो जाता है।

A TCP Header

Data को transfer करने के दौरान data के साथ TCP header attach की जाती है। इस header में कई प्रकार की information होती है जो आपके segment की characteristics बताती है। जैसे की source, destination और sequence number आदि। TCP header 12 fields से मिलकर बनी होती है और इसकी minimum size 20 byte होती है। आइये TCP header के सभी fields के बारे में जानने का प्रयास करते है।

Source Port

इस field की size 16 bits होती है। ये field sender के port number को carry करता है।

Destination Port

इस field की size भी 16 bits ही होती है और ये receiver के port number को carry करता है।

Sequence Number

ये field 32 bits का होता है और इसमें segment का sequence number होता है।

Acknowledgement Number

ये field भी 32 bits का होता है और इसमें acknowledgment number carry होता है।

Data Offset

Data Offset ये बताता है की TCP segment में data कँहा से शुरू होता है। इस field की size 4 bits होती है।

Reserved Field

इस field की size 6 bits होती है। इसे future use के लिए रख जाता है। ये हमेशा zero पर set रहता है।

Control Bits

ये field 6 bits का होता है। इसमें एक एक bit के 6 flags होते है। इन flags को set करके आप बता सकते है की ये segment किस तरह का है।

  1. URG (Urgent) - ये flag set करने से segment को traffic में priority मिलती है।
  2. ACK (Acknowledgment) - ये flag किसी भी message को acknowledge करने के लिए set किया जाता है।
  3. PSH (Push) - ये flag segment को forcefully send करता हैं चाहे window full हुई हो या नहीं।
  4. RST (Reset) - ये flag connection को forcefully terminate कर देता है।
  5. SYN (Synchronize) - ये flag connection establish करने के काम आता है।
  6. FIN (Finish) - ये flag connection को terminate करने के लिए set किया जाता है।

Window Field

ये एक 16 bit field होता है। ये identify करता है की receiver कितनी bytes receive करने में capable है।

Checksum Field

ये field error checking के लिए यूज़ किया जाता है। इसे TCP segment और IP header के select field से compute किया जाता है। यदि receivers side पर calculate किया हुआ checksum same ना हो तो segment discard कर दिया जाता है। इस field की size 16 bit होती है।

Urgent Pointer Field

ये एक 16 bit का field होता है। जब urgent flag set किया जाता है तो ये field traffic की last byte को identify करता है।

Options Field

ये field variable size का होता है। ये field TCP segment के लिए optional parameters set करने के लिए यूज़ किया जाता है।

Padding Field

ये field भी variable size का होता है। ये field निश्चित करता है की TCP header 32 bit bounder के भीतर ही समाप्त हो जाये। ये field हमेशा zero पर set रहता है।