TCP പാക്കറ്റ് ഘടന (സെഗ്മെൻ്റ് തലക്കെട്ട് ഫോർമാറ്റ്). നമുക്ക് കമ്പ്യൂട്ടർ നെറ്റ്‌വർക്കുകൾ തകർക്കാം: HTTP, TCP, REST

ഒരു TCP കണക്ഷൻ സ്ഥാപിക്കുന്നു

TCP പ്രോട്ടോക്കോളിൽ, കണക്ഷൻ എസ്റ്റാബ്ലിഷ്‌മെൻ്റ് വിഭാഗത്തിൽ വിവരിച്ചിരിക്കുന്ന "ട്രിപ്പിൾ ഹാൻഡ്‌ഷേക്ക്" ഉപയോഗിച്ചാണ് കണക്ഷനുകൾ സ്ഥാപിക്കുന്നത്. ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, ഒരു വശം (സെർവർ പോലുള്ളവ) ഒരു ഇൻകമിംഗ് കണക്ഷനായി നിഷ്ക്രിയമായി കാത്തിരിക്കുന്നു, ഒന്നുകിൽ ഒരു നിർദ്ദിഷ്‌ട ഉറവിടം വ്യക്തമാക്കുകയോ അല്ലെങ്കിൽ ഒന്ന് വ്യക്തമാക്കാതിരിക്കുകയോ ചെയ്യുക.

മറുവശം (ഉദാഹരണത്തിന്, ക്ലയൻ്റ്) കണക്റ്റുചെയ്യാൻ ആഗ്രഹിക്കുന്ന IP വിലാസവും പോർട്ടും, പരമാവധി TCP സെഗ്‌മെൻ്റ് വലുപ്പവും, ഓപ്ഷണലായി ചില ഉപയോക്തൃ ഡാറ്റയും (പാസ്‌വേഡ് പോലുള്ളവ) വ്യക്തമാക്കുന്ന ഒരു CONNECT പ്രാകൃതം നൽകുന്നു. CONNECT പ്രിമിറ്റീവ് SYN ബിറ്റ് സെറ്റ് ഉള്ള ഒരു TCP സെഗ്‌മെൻ്റ് അയയ്‌ക്കുകയും ACK ബിറ്റ് മായ്‌ക്കുകയും പ്രതികരണത്തിനായി കാത്തിരിക്കുകയും ചെയ്യുന്നു.

ഈ സെഗ്‌മെൻ്റ് അതിൻ്റെ ലക്ഷ്യസ്ഥാനത്ത് എത്തുമ്പോൾ, ലക്ഷ്യസ്ഥാന പോർട്ട് ഫീൽഡിൽ അടങ്ങിയിരിക്കുന്ന അതേ പോർട്ട് ഒരു പാരാമീറ്ററായി വ്യക്തമാക്കുന്നു, ലിസ്‌റ്റൻ പ്രിമിറ്റീവ് ഏതെങ്കിലും പ്രോസസ്സ് എക്‌സിക്യൂട്ട് ചെയ്‌തിട്ടുണ്ടോ എന്ന് TCP എൻ്റിറ്റി പരിശോധിക്കുന്നു. അത്തരമൊരു പ്രക്രിയ ഇല്ലെങ്കിൽ, കണക്ഷൻ നിരസിക്കാൻ RST ബിറ്റ് സജ്ജീകരിച്ച ഒരു സെഗ്മെൻ്റ് അയച്ചുകൊണ്ട് അത് പ്രതികരിക്കുന്നു.

ഏതെങ്കിലും പ്രോസസ് ഏതെങ്കിലും പോർട്ടിൽ കേൾക്കുന്നുണ്ടെങ്കിൽ, ഇൻകമിംഗ് TCP സെഗ്‌മെൻ്റ് ആ പ്രോസസ്സിലേക്ക് കൈമാറും. രണ്ടാമത്തേതിന് കണക്ഷൻ സ്വീകരിക്കുകയോ നിരസിക്കുകയോ ചെയ്യാം. പ്രക്രിയ കണക്ഷൻ സ്വീകരിക്കുകയാണെങ്കിൽ, അത് ഒരു അംഗീകാരത്തോടെ പ്രതികരിക്കുന്നു. സാധാരണ കേസിൽ അയച്ച TCP സെഗ്‌മെൻ്റുകളുടെ ക്രമം (ചിത്രം. a) SYN ബിറ്റ് സെറ്റ് ഉള്ള ഒരു സെഗ്‌മെൻ്റ് സീക്വൻസ് നമ്പർ സ്‌പെയ്‌സിൻ്റെ 1 ബൈറ്റ് ഉൾക്കൊള്ളുന്നു, ഇത് അവരുടെ അംഗീകാരങ്ങളിൽ അവ്യക്തത ഒഴിവാക്കുന്നു.

രണ്ട് ഹോസ്റ്റുകൾ ഒരേസമയം പരസ്പരം ഒരു ബന്ധം സ്ഥാപിക്കാൻ ശ്രമിക്കുകയാണെങ്കിൽ, സംഭവിക്കുന്ന സംഭവങ്ങളുടെ ക്രമം ചിത്രം 17-ന് സമാനമായിരിക്കും. ബി. ഫലമായി, ഒരു കണക്ഷൻ മാത്രമേ സ്ഥാപിക്കപ്പെടുകയുള്ളൂ, രണ്ടല്ല, കാരണം ജോടി എൻഡ് പോയിൻ്റുകൾ കണക്ഷനെ അദ്വിതീയമായി തിരിച്ചറിയുന്നു. അതായത്, രണ്ട് കണക്ഷനുകളും ജോഡി (x, y) ഉപയോഗിച്ച് സ്വയം തിരിച്ചറിയാൻ ശ്രമിക്കുകയാണെങ്കിൽ, (x, y) എന്നതിനായി ഒരു ടേബിൾ എൻട്രി മാത്രമേ ഉണ്ടാകൂ.

മുകളിൽ ചർച്ച ചെയ്ത കാരണങ്ങളാൽ കണക്ഷൻ സീക്വൻസ് നമ്പറിൻ്റെ പ്രാരംഭ മൂല്യം പൂജ്യമല്ല. ഒരു ടൈമർ അടിസ്ഥാനമാക്കിയുള്ള ഒരു സർക്യൂട്ട് ഉപയോഗിക്കുന്നു, ഓരോ 4 μs ലും അതിൻ്റെ അവസ്ഥ മാറ്റുന്നു. കൂടുതൽ വിശ്വാസ്യതയ്ക്കായി, ഒരു പരാജയത്തിന് ശേഷമുള്ള ഹോസ്റ്റ് പരമാവധി പാക്കറ്റ് ആയുസ്സ് കഴിഞ്ഞതിന് ശേഷമുള്ളതിനേക്കാൾ നേരത്തെ റീബൂട്ട് ചെയ്യുന്നത് നിരോധിച്ചിരിക്കുന്നു. മുമ്പത്തെ കണക്ഷനുകളിൽ നിന്നുള്ള പാക്കറ്റുകളൊന്നും ഇൻ്റർനെറ്റിൽ ഒഴുകുന്നില്ലെന്ന് ഇത് ഉറപ്പാക്കുന്നു.

TCP കണക്ഷൻ ഡ്രോപ്പ്

TCP കണക്ഷനുകൾ ഫുൾ-ഡ്യൂപ്ലെക്സാണെങ്കിലും, അവ എങ്ങനെ റിലീസ് ചെയ്യപ്പെടുന്നുവെന്ന് മനസിലാക്കാൻ, അവയെ സിംപ്ലക്സ് കണക്ഷനുകളുടെ ജോഡികളായി കണക്കാക്കുന്നതാണ് നല്ലത്. ഓരോ സിംപ്ലെക്‌സ് കണക്ഷനും അതിൻ്റെ പങ്കാളിയിൽ നിന്ന് സ്വതന്ത്രമായി തകരുന്നു. കണക്ഷൻ അടയ്‌ക്കുന്നതിന്, രണ്ട് കക്ഷികൾക്കും FIN ബിറ്റ് സജ്ജീകരിച്ച് TCP സെഗ്‌മെൻ്റ് അയയ്‌ക്കാൻ കഴിയും, അത് അയയ്‌ക്കാൻ കൂടുതൽ ഡാറ്റ ഇല്ലെന്ന് സൂചിപ്പിക്കുന്നു. ഈ TCP സെഗ്‌മെൻ്റിന് ഒരു അംഗീകാരം ലഭിക്കുമ്പോൾ, ഈ പ്രക്ഷേപണ ദിശ അടച്ചിരിക്കും. എന്നിരുന്നാലും, ഡാറ്റ അനിശ്ചിതമായി വിപരീത ദിശയിലേക്ക് ഒഴുകുന്നത് തുടരാം. രണ്ട് ദിശകളും അടയ്ക്കുമ്പോൾ കണക്ഷൻ തകരാറിലാകുന്നു. സാധാരണഗതിയിൽ, ഒരു കണക്ഷൻ ക്ലോസ് ചെയ്യുന്നതിന് നാല് ടിസിപി സെഗ്‌മെൻ്റുകൾ ആവശ്യമാണ്: ഒന്ന് FIN ബിറ്റും ഒരെണ്ണം ഓരോ ദിശയിലും ACK ബിറ്റും. ആദ്യത്തെ ACK ബിറ്റും രണ്ടാമത്തെ FIN ബിറ്റും ഒരു TCP സെഗ്‌മെൻ്റിൽ അടങ്ങിയിരിക്കാം, ഇത് സെഗ്‌മെൻ്റുകളുടെ എണ്ണം മൂന്നായി കുറയ്ക്കും.

രണ്ട് കക്ഷികൾക്കും ഒരേ സമയം വിടപറയാനും ഹാംഗ് അപ്പ് ചെയ്യാനും കഴിയുന്ന ഒരു ടെലിഫോൺ സംഭാഷണം പോലെ, ഒരു TCP കണക്ഷൻ്റെ രണ്ട് അറ്റങ്ങൾക്കും ഒരേ സമയം FIN സന്ദേശങ്ങൾ അയയ്‌ക്കാൻ കഴിയും. അവർ രണ്ടുപേരും സാധാരണ അംഗീകാരങ്ങൾ സ്വീകരിക്കുകയും കണക്ഷൻ ക്ലോസ് ചെയ്യുകയും ചെയ്യുന്നു. അടിസ്ഥാനപരമായി, ഒരേസമയം, തുടർച്ചയായ വിച്ഛേദങ്ങൾ തമ്മിൽ വ്യത്യാസമില്ല.

രണ്ട് സൈന്യങ്ങളുടെ പ്രശ്നം ഒഴിവാക്കാൻ, ടൈമറുകൾ ഉപയോഗിക്കുന്നു. അയച്ച FIN സെഗ്‌മെൻ്റിലേക്കുള്ള പ്രതികരണം പരമാവധി രണ്ട് പാക്കറ്റ് ലൈഫ് ടൈം ഇടവേളകൾക്കുള്ളിൽ എത്തിയില്ലെങ്കിൽ, അയച്ചയാൾ കണക്ഷൻ ക്ലോസ് ചെയ്യുന്നു. ആരും ഉത്തരം നൽകുന്നില്ലെന്ന് മറുവശം ശ്രദ്ധിക്കുകയും വിച്ഛേദിക്കുകയും ചെയ്യും. ഈ പരിഹാരം അനുയോജ്യമല്ലെങ്കിലും, ആദർശത്തിൻ്റെ അപ്രാപ്യത കണക്കിലെടുക്കുമ്പോൾ, നമുക്ക് ഉള്ളത് ഉപയോഗിക്കേണ്ടതുണ്ട്. പ്രായോഗികമായി, പ്രശ്നങ്ങൾ വളരെ അപൂർവമായി മാത്രമേ ഉണ്ടാകൂ.

TCP ട്രാൻസ്മിഷൻ നിയന്ത്രണം

നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, മിക്ക ഡാറ്റാ ട്രാൻസ്ഫർ പ്രോട്ടോക്കോളുകളിലും ചെയ്യുന്നത് പോലെ, TCP വിൻഡോ മാനേജ്മെൻ്റ് നേരിട്ട് അംഗീകാരങ്ങളുമായി ബന്ധിപ്പിച്ചിട്ടില്ല. ഉദാഹരണത്തിന്, സ്വീകർത്താവിന് 4096-ബൈറ്റ് ബഫർ ഉണ്ടെന്ന് കരുതുക. അയയ്ക്കുന്നയാൾ സ്വീകർത്താവിന് വിജയകരമായി ലഭിച്ച 2048-ബൈറ്റ് സെഗ്‌മെൻ്റ് കൈമാറുകയാണെങ്കിൽ, സ്വീകർത്താവ് അതിൻ്റെ രസീത് അംഗീകരിക്കുന്നു. എന്നിരുന്നാലും, ഇത് റിസീവറിന് 2048 ബഫർ സ്പേസ് മാത്രമേ നൽകൂ (ആപ്ലിക്കേഷൻ ബഫറിൽ നിന്ന് കുറച്ച് ഡാറ്റ എടുക്കുന്നത് വരെ), അത് അയച്ചയാൾക്ക് റിപ്പോർട്ട് ചെയ്യുന്നു, ഉചിതമായ വിൻഡോ വലുപ്പവും (2048) അടുത്ത പ്രതീക്ഷിക്കുന്ന ബൈറ്റിൻ്റെ എണ്ണവും സൂചിപ്പിക്കുന്നു.

അയക്കുന്നയാൾ പിന്നീട് മറ്റൊരു 2048 ബൈറ്റുകൾ അയയ്‌ക്കുന്നു, അവ അംഗീകരിച്ചു, പക്ഷേ വിൻഡോ വലുപ്പം 0 ആയി പ്രഖ്യാപിക്കപ്പെടുന്നു. സ്വീകരിക്കുന്ന ഹോസ്റ്റ് ബഫർ സ്‌പെയ്‌സ് സൃഷ്‌ടിക്കുകയും വിൻഡോ വലുപ്പം വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നതുവരെ അയച്ചയാൾ പ്രക്ഷേപണം നിർത്തണം.

വിൻഡോ വലുപ്പം പൂജ്യത്തിൽ, അയച്ചയാൾക്ക് രണ്ട് സന്ദർഭങ്ങളിലൊഴികെ സെഗ്‌മെൻ്റുകൾ അയയ്ക്കാൻ കഴിയില്ല. ആദ്യം, അടിയന്തിര ഡാറ്റ അയയ്‌ക്കാൻ ഇത് അനുവദനീയമാണ്, ഉദാഹരണത്തിന്, ഒരു വിദൂര മെഷീനിൽ പ്രവർത്തിക്കുന്ന ഒരു പ്രോസസ്സിനെ ഉപയോക്താവിന് ഇല്ലാതാക്കാൻ കഴിയും. രണ്ടാമതായി, വിൻഡോ വലുപ്പത്തെക്കുറിച്ചും പ്രതീക്ഷിക്കുന്ന അടുത്ത ബൈറ്റിനെക്കുറിച്ചുമുള്ള വിവരങ്ങൾ ആവർത്തിക്കാൻ റിസീവറോട് ആവശ്യപ്പെടുന്ന ഒരു 1-ബൈറ്റ് സെഗ്‌മെൻ്റ് അയയ്ക്കാൻ അയയ്ക്കുന്നയാൾക്ക് കഴിയും. വിൻഡോ സൈസ് പരസ്യം നഷ്‌ടപ്പെട്ടാൽ തടസ്സങ്ങൾ തടയുന്നതിന് ടിസിപി സ്റ്റാൻഡേർഡ് ഈ സവിശേഷത വ്യക്തമായി നൽകുന്നു.

ആപ്ലിക്കേഷനിൽ നിന്ന് വരുന്നതിനാൽ അയയ്ക്കുന്നവർ ഉടൻ ഡാറ്റ കൈമാറേണ്ടതില്ല. കൂടാതെ, സ്വീകർത്താക്കൾ എത്രയും വേഗം സ്ഥിരീകരണങ്ങൾ അയയ്ക്കണമെന്ന് ആരും ആവശ്യപ്പെടുന്നില്ല. ഉദാഹരണത്തിന്, ഒരു TCP എൻ്റിറ്റി, ആപ്ലിക്കേഷനിൽ നിന്ന് ആദ്യത്തെ 2 KB ഡാറ്റ സ്വീകരിക്കുകയും അത് അറിയുകയും ചെയ്യുന്നു ലഭ്യമായ വലിപ്പംവിൻഡോ 4 KB ആണ്, 4 KB പേലോഡുള്ള ഒരു സെഗ്‌മെൻ്റ് ഉടനടി കൈമാറുന്നതിനായി മറ്റൊരു 2 KB ഡാറ്റ വരുന്നത് വരെ ഞാൻ സ്വീകരിച്ച ഡാറ്റ ഒരു ബഫറിൽ സംഭരിച്ചാൽ ഞാൻ തികച്ചും ശരിയാണ്. പ്രകടനം മെച്ചപ്പെടുത്താൻ ഈ വിവേചനാധികാരം ഉപയോഗിക്കാം.

എല്ലാ കീസ്ട്രോക്കുകളോടും പ്രതികരിക്കുന്ന ഒരു ഇൻ്ററാക്ടീവ് എഡിറ്ററുമായി ഒരു TELNET കണക്ഷൻ പരിഗണിക്കുക. ഏറ്റവും മോശം സാഹചര്യത്തിൽ, അയയ്‌ക്കുന്ന TCP എൻ്റിറ്റിയിൽ പ്രതീകം എത്തുമ്പോൾ, അത് 21-ബൈറ്റ് TCP സെഗ്‌മെൻ്റ് സൃഷ്‌ടിക്കുകയും അത് IP ലെയറിലേക്ക് കൈമാറുകയും ചെയ്യുന്നു, അത് ഒരു 41-ബൈറ്റ് IP ഡാറ്റാഗ്രാം അയയ്‌ക്കുന്നു.

സ്വീകരിക്കുന്ന അവസാനത്തിൽ, TCP എൻ്റിറ്റി ഒരു 40-ബൈറ്റ് അംഗീകാരം (20 ബൈറ്റ് TCP ഹെഡറും 20 ബൈറ്റ് IP ഹെഡറും) ഉപയോഗിച്ച് ഉടൻ പ്രതികരിക്കുന്നു. തുടർന്ന്, എഡിറ്റർ ബഫറിൽ നിന്ന് ആ ബൈറ്റ് വായിക്കുമ്പോൾ, TCP എൻ്റിറ്റി ബഫർ വലുപ്പത്തിൽ ഒരു അപ്‌ഡേറ്റ് അയയ്‌ക്കും, വിൻഡോ 1 ബൈറ്റ് വലത്തേക്ക് നീക്കുന്നു. ഈ പാക്കറ്റിൻ്റെ വലിപ്പവും 40 ബൈറ്റുകളാണ്. അവസാനമായി, എഡിറ്റർ ഈ പ്രതീകം പ്രോസസ്സ് ചെയ്യുമ്പോൾ, അത് 41-ബൈറ്റ് പാക്കറ്റിൽ ട്രാൻസ്മിറ്റ് ചെയ്യുന്ന ഒരു എക്കോ തിരികെ അയയ്ക്കുന്നു. മൊത്തത്തിൽ, കീബോർഡിൽ നിന്ന് നൽകിയ ഓരോ പ്രതീകത്തിനും, മൊത്തം 162 ബൈറ്റുകളുടെ വലുപ്പമുള്ള നാല് പാക്കറ്റുകൾ അയയ്ക്കുന്നു. ലൈൻ ശേഷിയുടെ കുറവുള്ള സാഹചര്യങ്ങളിൽ, ഈ പ്രവർത്തന രീതി അഭികാമ്യമല്ല.

സാഹചര്യം മെച്ചപ്പെടുത്തുന്നതിന്, ഒരു പാക്കറ്റിൽ അക്‌നോളജ്‌മെൻ്റ് അയയ്‌ക്കുന്നതിനുള്ള അധിക ഡാറ്റ ലഭിക്കുമെന്ന പ്രതീക്ഷയിൽ പല ടിസിപി നടപ്പാക്കലുകളും അംഗീകാരങ്ങളും വിൻഡോ സൈസ് അപ്‌ഡേറ്റുകളും 500 എംഎസ് വൈകിപ്പിക്കുന്നു. എഡിറ്റർ 500 ms-നുള്ളിൽ പ്രതിധ്വനിപ്പിക്കുന്നുവെങ്കിൽ, ഒരു വിദൂര ഉപയോക്താവിന്ഒരു 41-ബൈറ്റ് പാക്കറ്റ് മാത്രമേ അയയ്‌ക്കേണ്ടതുള്ളൂ, അങ്ങനെ നെറ്റ്‌വർക്ക് ലോഡ് പകുതിയായി കുറയ്ക്കുന്നു.

ഈ കാലതാമസം രീതി നെറ്റ്‌വർക്ക് ലോഡ് കുറയ്ക്കുന്നുണ്ടെങ്കിലും, ഓരോ ബൈറ്റും പ്രത്യേകം 41-ബൈറ്റ് പാക്കറ്റിൽ അയച്ചതിനാൽ അയച്ചയാളുടെ നെറ്റ്‌വർക്ക് കാര്യക്ഷമത കുറവായിരിക്കും. കാര്യക്ഷമത മെച്ചപ്പെടുത്തുന്ന ഒരു രീതി നാഗ്ലെയുടെ അൽഗോരിതം (Nagle, 1984) എന്നറിയപ്പെടുന്നു. Nagl-ൻ്റെ നിർദ്ദേശം വളരെ ലളിതമായി തോന്നുന്നു: അയച്ചയാളുടെ അടുത്തേക്ക് ഒരു സമയം ഒരു ബൈറ്റ് ഡാറ്റ എത്തുന്നുവെങ്കിൽ, അയച്ചയാൾ ആദ്യത്തെ ബൈറ്റ് കൈമാറുകയും ബാക്കിയുള്ളവ ബഫർ ചെയ്യുകയും ചെയ്യുന്നു. ഇതിനുശേഷം, നിങ്ങൾക്ക് ബഫറിൽ ശേഖരിച്ച എല്ലാ പ്രതീകങ്ങളും ഒരു ടിസിപി സെഗ്‌മെൻ്റായി അയയ്‌ക്കാനും അയച്ച പ്രതീകങ്ങളുടെ സ്ഥിരീകരണം ലഭിക്കുന്നതുവരെ വീണ്ടും ബഫറിംഗ് ആരംഭിക്കാനും കഴിയും. ഉപയോക്താവ് വേഗത്തിൽ പ്രതീകങ്ങൾ നൽകുകയും നെറ്റ്‌വർക്ക് മന്ദഗതിയിലാവുകയും ചെയ്താൽ, ഓരോ സെഗ്‌മെൻ്റിലും ഗണ്യമായ എണ്ണം പ്രതീകങ്ങൾ കൈമാറ്റം ചെയ്യപ്പെടും, അങ്ങനെ നെറ്റ്‌വർക്കിലെ ലോഡ് ഗണ്യമായി കുറയുന്നു. കൂടാതെ, ബഫറിലെ പ്രതീകങ്ങളുടെ എണ്ണം വിൻഡോ വലുപ്പത്തിൻ്റെ പകുതിയോ അല്ലെങ്കിൽ പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പമോ കവിഞ്ഞാലും ഒരു പുതിയ പാക്കറ്റ് അയയ്ക്കാൻ ഈ അൽഗോരിതം അനുവദിക്കുന്നു.

ടിസിപി പ്രോട്ടോക്കോളിൻ്റെ വിവിധ നിർവ്വഹണങ്ങളിൽ നാഗലിൻ്റെ അൽഗോരിതം വ്യാപകമായി ഉപയോഗിക്കുന്നു, എന്നാൽ ചിലപ്പോൾ ഇത് പ്രവർത്തനരഹിതമാക്കുന്നതാണ് നല്ലത്. പ്രത്യേകിച്ച്, ജോലി ചെയ്യുമ്പോൾ X-Windows ആപ്ലിക്കേഷനുകൾഇൻറർനെറ്റിൽ, മൗസിൻ്റെ ചലനങ്ങളെക്കുറിച്ചുള്ള വിവരങ്ങൾ അയയ്ക്കുന്നു റിമോട്ട് കമ്പ്യൂട്ടർ. (എക്സ്-വിൻഡോ ആണ് മിക്ക യുണിക്സ്-ടൈപ്പ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങൾക്കുമുള്ള വിൻഡോ മാനേജ്മെൻ്റ് സിസ്റ്റം). ബാച്ച് കൈമാറ്റത്തിനായി നിങ്ങൾ ഈ ഡാറ്റ ബഫർ ചെയ്യുകയാണെങ്കിൽ, കഴ്‌സർ നീണ്ട ഇടവേളകളോടെ ഞെട്ടലോടെ നീങ്ങും, അതിൻ്റെ ഫലമായി പ്രോഗ്രാം ഉപയോഗിക്കുന്നത് വളരെ ബുദ്ധിമുട്ടുള്ളതും മിക്കവാറും അസാധ്യവുമാണ്.

ടിസിപി പ്രകടനത്തെ ഗണ്യമായി കുറയ്ക്കുന്ന മറ്റൊരു പ്രശ്നം മണ്ടൻ വിൻഡോ സിൻഡ്രോം എന്നറിയപ്പെടുന്നു (ക്ലാർക്ക്, 1982). TCP എൻ്റിറ്റി വലിയ ബ്ലോക്കുകളിൽ ഡാറ്റ അയയ്‌ക്കുന്നു എന്നതാണ് പ്രശ്‌നത്തിൻ്റെ സാരം, എന്നാൽ ഇൻ്ററാക്ടീവ് ആപ്ലിക്കേഷൻ്റെ സ്വീകരിക്കുന്ന വശം അത് പ്രതീകം അനുസരിച്ച് വായിക്കുന്നു.

നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം - പ്രാരംഭ അവസ്ഥ ഇപ്രകാരമാണ്: സ്വീകരിക്കുന്ന ഭാഗത്തിൻ്റെ TCP ബഫർ നിറഞ്ഞിരിക്കുന്നു, അയച്ചയാൾക്ക് ഇത് അറിയാം (അതായത്, അതിൻ്റെ വിൻഡോ വലുപ്പം 0 ആണ്). പിന്നെ സംവേദനാത്മക ആപ്ലിക്കേഷൻഒരു TCP സ്ട്രീമിൽ നിന്ന് ഒരു പ്രതീകം വായിക്കുന്നു. സ്വീകരിക്കുന്ന TCP എൻ്റിറ്റി, ജാലകത്തിൻ്റെ വലുപ്പം വർധിച്ചിട്ടുണ്ടെന്നും ഇപ്പോൾ 1 ബൈറ്റ് അയയ്‌ക്കാൻ കഴിയുമെന്നും അയച്ചയാളെ സന്തോഷപൂർവ്വം അറിയിക്കുന്നു. അയച്ചയാൾ അനുസരിക്കുകയും 1 ബൈറ്റ് അയയ്ക്കുകയും ചെയ്യുന്നു. ബഫർ വീണ്ടും നിറഞ്ഞു, ജാലക വലുപ്പം പൂജ്യമുള്ള ഒരു 1-ബൈറ്റ് സെഗ്‌മെൻ്റിനുള്ള അംഗീകാരം അയച്ചുകൊണ്ട് റിസീവർ അത് അറിയിക്കുന്നു. ഇത് എന്നേക്കും തുടരാം.

ഡേവിഡ് ക്ലാർക്ക് ഒരു ബൈറ്റ് വിൻഡോ സൈസ് വിവരങ്ങൾ അയയ്ക്കുന്നതിൽ നിന്ന് സ്വീകരിക്കുന്നതിനെ തടയാൻ നിർദ്ദേശിച്ചു. പകരം, സ്വീകർത്താവ് ബഫറിൽ ഗണ്യമായ അളവിൽ ഇടം ലഭിക്കുന്നതുവരെ കാത്തിരിക്കണം. പ്രത്യേകിച്ചും, റിസീവർ, കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ പരസ്യപ്പെടുത്തിയ പരമാവധി വലിപ്പം സെഗ്‌മെൻ്റ് സ്വീകരിക്കുന്നതുവരെ അല്ലെങ്കിൽ അതിൻ്റെ ബഫർ പകുതിയെങ്കിലും സൗജന്യമാകുന്നതുവരെ പുതിയ വിൻഡോ വലുപ്പത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ അയയ്‌ക്കരുത്.

കൂടാതെ, വളരെ ചെറിയ സെഗ്‌മെൻ്റുകൾ അയയ്‌ക്കാതെ അയയ്ക്കുന്നയാൾക്ക് തന്നെ അയയ്‌ക്കൽ കാര്യക്ഷമത മെച്ചപ്പെടുത്താൻ സഹായിക്കാനാകും. പകരം, ഒരു മുഴുവൻ സെഗ്‌മെൻ്റും അയയ്‌ക്കാൻ അനുവദിക്കുന്ന തരത്തിൽ വിൻഡോ വലുപ്പം വലുതാകുന്നതുവരെ അല്ലെങ്കിൽ റിസീവറിൻ്റെ ബഫറിൻ്റെ പകുതി വലുപ്പമെങ്കിലും അത് കാത്തിരിക്കണം. (അയക്കുന്നയാൾക്ക് മുമ്പ് ലഭിച്ച വിൻഡോ സൈസ് സന്ദേശങ്ങളുടെ ഒരു ശ്രേണിയിൽ നിന്ന് ഈ വലുപ്പം കണക്കാക്കാം.)

മണ്ടത്തരമായ വിൻഡോ സിൻഡ്രോം ഒഴിവാക്കാനുള്ള പ്രശ്നത്തിൽ, നാഗലിൻ്റെ അൽഗോരിതവും ക്ലാർക്കിൻ്റെ പരിഹാരവും പരസ്പര പൂരകമാണ്. ഒരു TCP എൻ്റിറ്റി പ്രതീകത്തിന് പ്രതീകം അനുസരിച്ച് ഡാറ്റ നൽകുന്ന ഒരു ആപ്ലിക്കേഷൻ്റെ പ്രശ്നം പരിഹരിക്കാൻ Nagl ശ്രമിക്കുകയായിരുന്നു. ടിസിപിയിൽ നിന്ന് പ്രതീകം അനുസരിച്ച് ഡാറ്റ സ്വീകരിക്കുന്ന ആപ്ലിക്കേഷൻ്റെ പ്രശ്നം പരിഹരിക്കാൻ ക്ലാർക്ക് ശ്രമിച്ചു. രണ്ട് പരിഹാരങ്ങളും മികച്ചതും ഒരേസമയം പ്രവർത്തിക്കാൻ കഴിയുന്നതുമാണ്. വളരെ ചെറിയ ഭാഗങ്ങളിൽ ഡാറ്റ അയയ്ക്കുകയോ പ്രക്ഷേപണം ചെയ്യാൻ ആവശ്യപ്പെടുകയോ ചെയ്യരുത് എന്നതാണ് അവരുടെ സാരാംശം.

TCP സ്വീകരിക്കുന്ന എൻ്റിറ്റിക്ക് വിൻഡോ സൈസ് വിവരങ്ങൾ വലിയ കഷണങ്ങളായി അപ്‌ഡേറ്റ് ചെയ്യുന്നതിലൂടെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിൽ കൂടുതൽ മുന്നോട്ട് പോകാനാകും. അയയ്‌ക്കുന്ന TCP എൻ്റിറ്റി പോലെ, ഇതിന് ഡാറ്റ ബഫർ ചെയ്യാനും ഒരു വലിയ അളവിലുള്ള ഡാറ്റ ലഭിക്കുന്നതുവരെ ഒരു ആപ്ലിക്കേഷനിൽ നിന്നുള്ള ഒരു റീഡ് അഭ്യർത്ഥന തടയാനും കഴിയും. ഇത് TCP എൻ്റിറ്റിയിലേക്കുള്ള കോളുകളുടെ എണ്ണം കുറയ്ക്കുകയും അതിനാൽ ഓവർഹെഡ് കുറയ്ക്കുകയും ചെയ്യുന്നു. തീർച്ചയായും, ഈ സമീപനം പ്രതികരണ സമയം വർദ്ധിപ്പിക്കുന്നു, എന്നാൽ ഫയൽ കൈമാറ്റം പോലെയുള്ള നോൺ-ഇൻ്ററാക്ടീവ് ആപ്ലിക്കേഷനുകൾക്ക്, മുഴുവൻ പ്രവർത്തനത്തിലും ചെലവഴിക്കുന്ന സമയം കുറയ്ക്കുന്നത് വ്യക്തിഗത അഭ്യർത്ഥനകൾക്കുള്ള പ്രതികരണ സമയം വർദ്ധിപ്പിക്കുന്നതിനേക്കാൾ വളരെ പ്രധാനമാണ്.

തെറ്റായ ക്രമത്തിൽ ലഭിച്ച സെഗ്‌മെൻ്റുകളാണ് സ്വീകർത്താവിൻ്റെ മറ്റൊരു പ്രശ്നം. സ്വീകർത്താവിൻ്റെ വിവേചനാധികാരത്തിൽ അവ നിലനിർത്തുകയോ ഉപേക്ഷിക്കുകയോ ചെയ്യാം. തീർച്ചയായും, അംഗീകരിക്കപ്പെട്ട ബൈറ്റ് വരെയുള്ള എല്ലാ ഡാറ്റയും ലഭിച്ചാൽ മാത്രമേ ഒരു അംഗീകാരം അയയ്‌ക്കാൻ കഴിയൂ. സ്വീകർത്താവിന് O, 1, 2, 4, 5, 6, 7 എന്നീ സെഗ്‌മെൻ്റുകൾ ലഭിക്കുകയാണെങ്കിൽ, അത് സെഗ്‌മെൻ്റ് 2-ൻ്റെ അവസാന ബൈറ്റ് വരെയുള്ള ഡാറ്റയുടെ രസീത് അംഗീകരിക്കാൻ കഴിയും. അയച്ചയാൾ കാലഹരണപ്പെടുമ്പോൾ, അത് സെഗ്‌മെൻ്റ് 3 വീണ്ടും കൈമാറും. സെഗ്‌മെൻ്റ് 3 എത്തുമ്പോഴേക്കും റിസീവറിന് 4 മുതൽ 7 വരെയുള്ള സെഗ്‌മെൻ്റുകൾ ബഫർ ചെയ്‌തിട്ടുണ്ടെങ്കിൽ, സെഗ്‌മെൻ്റ് 7-ൻ്റെ അവസാന ബൈറ്റ് വരെയുള്ള എല്ലാ ബൈറ്റുകളുടെയും രസീത് അതിന് അംഗീകരിക്കാനാകും.

- 1

ഉപയോഗിച്ച ട്രാഫിക്കും പ്രോട്ടോക്കോളുകളും വിശകലനം ചെയ്യുന്ന ഒരു പ്രോഗ്രാം ഉപയോഗിച്ച് - വയർഷാർക്ക്, നിങ്ങൾക്ക് മൂന്ന്-ഘട്ട TCP ഹാൻഡ്‌ഷേക്കിൻ്റെ പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും:


ഘട്ടം 1

ചെക്ക് ഫ്ലാഗ് സെറ്റ് ഉള്ള ഒരു സെഗ്‌മെൻ്റ് അയച്ചുകൊണ്ട് TCP ക്ലയൻ്റ് ത്രീ-വേ ഹാൻഡ്‌ഷേക്ക് ആരംഭിക്കുന്നു SYN(സീക്വൻസ് നമ്പർ സമന്വയിപ്പിക്കുക) തലക്കെട്ടിലെ സീക്വൻസ് നമ്പർ ഫീൽഡിൽ യഥാർത്ഥ മൂല്യം വ്യക്തമാക്കുക. ഇതാണ് സീക്വൻസ് സംഖ്യയുടെ പ്രാരംഭ മൂല്യം, ഇത് സ്റ്റാർട്ടിംഗ് സീക്വൻസ് നമ്പർ എന്നറിയപ്പെടുന്നു ( ഐ.എസ്.എൻ), ക്രമരഹിതമായി തിരഞ്ഞെടുത്തു, ആ സെഷനായി ക്ലയൻ്റിൽനിന്നും സെർവറിലേക്കുള്ള ഡാറ്റയുടെ ഒഴുക്ക് ട്രാക്ക് ചെയ്യാൻ ഇത് ഉപയോഗിക്കുന്നു. ഡാറ്റാ കൈമാറ്റം തുടരുമ്പോൾ, ഓരോ സെഗ്‌മെൻ്റിൻ്റെയും ഹെഡറിലെ ISN, ക്ലയൻ്റിൽനിന്ന് സെർവറിലേക്ക് അയച്ച ഡാറ്റയുടെ ഓരോ ബൈറ്റിനും ഒന്നായി വർദ്ധിപ്പിക്കും.

പ്രോട്ടോക്കോൾ അനലൈസർ ഔട്ട്പുട്ട് SYN കൺട്രോൾ ഫ്ലാഗും ആപേക്ഷിക സീക്വൻസ് നമ്പറും കാണിക്കുന്നത് എങ്ങനെയെന്ന് ചിത്രം കാണിക്കുന്നു.

SYN കൺട്രോൾ ഫ്ലാഗ് സജ്ജീകരിച്ചിരിക്കുന്നു, ആപേക്ഷിക സീക്വൻസ് നമ്പർ 0 ആണ്. പ്രോട്ടോക്കോൾ അനലൈസർ ഗ്രാഫ് ക്രമത്തിനും അംഗീകാര സംഖ്യകൾക്കുമുള്ള ആപേക്ഷിക മൂല്യങ്ങളെ സൂചിപ്പിക്കുന്നുവെങ്കിലും, യഥാർത്ഥ മൂല്യങ്ങൾ ബൈനറി 32-ബിറ്റ് നമ്പറുകളാണ്. "പാക്കറ്റ് ബൈറ്റുകൾ" ഏരിയ പരിശോധിച്ചുകൊണ്ട് സെഗ്മെൻ്റ് ഹെഡറുകളിൽ അയച്ച യഥാർത്ഥ നമ്പറുകൾ നമുക്ക് നിർണ്ണയിക്കാനാകും. പ്രതിനിധീകരിക്കുന്ന നാല് ബൈറ്റുകൾ ഇവിടെ കാണാം ഹെക്സാഡെസിമൽരൂപം.

ഘട്ടം 2

ക്ലയൻ്റിൽ നിന്ന് സെർവറിലേക്ക് ഒരു സെഷൻ സ്ഥാപിക്കുന്നതിന് TCP സെർവർ ക്ലയൻ്റിൽനിന്ന് ഒരു SYN സെഗ്‌മെൻ്റിൻ്റെ രസീത് അംഗീകരിക്കണം. ഇത് ചെയ്യുന്നതിന്, സെർവർ ACK ഫ്ലാഗ് സെറ്റ് ഉപയോഗിച്ച് സെഗ്‌മെൻ്റ് ക്ലയൻ്റിലേക്ക് തിരികെ അയയ്‌ക്കുന്നു, ഇത് അക്‌നോളജ്‌മെൻ്റ് നമ്പർ ഫീൽഡ് പ്രവർത്തനക്ഷമമാണെന്ന് സൂചിപ്പിക്കുന്നു. സെഗ്‌മെൻ്റിൽ ഈ ഫ്ലാഗ് സജ്ജീകരിച്ചിരിക്കുന്നതിനാൽ, ക്ലയൻ്റ് ടിസിപിയിൽ നിന്ന് സെർവറിന് ഒരു SYN ലഭിച്ചു എന്നതിൻ്റെ ഒരു അംഗീകാരമായി ക്ലയൻ്റ് ഇത് തിരിച്ചറിയുന്നു.

UDP തലക്കെട്ട് എപ്പോഴും 64 ബിറ്റുകൾ നീളമുള്ളതാണ്. യുഡിപി സെഗ്‌മെൻ്റിൽ നിർവചിച്ചിരിക്കുന്ന ഫീൽഡുകളിൽ (ചിത്രം കാണുക) ഇനിപ്പറയുന്നവ ഉൾപ്പെടുന്നു:
1. ഉറവിട പോർട്ട്: ഉറവിട പോർട്ട് നമ്പർ (16 ബിറ്റുകൾ)
2. ഡെസ്റ്റിനേഷൻ പോർട്ട്: ഡെസ്റ്റിനേഷൻ പോർട്ട് നമ്പർ (16 ബിറ്റുകൾ)
3. സന്ദേശ ദൈർഘ്യം: UDP തലക്കെട്ടിൻ്റെയും UDP ഡാറ്റയുടെയും ദൈർഘ്യം (16 ബിറ്റുകൾ)
4. ചെക്ക്സം: തലക്കെട്ടിൻ്റെയും ഡാറ്റാ ഫീൽഡുകളുടെയും കണക്കുകൂട്ടിയ ചെക്ക്സം (16 ബിറ്റുകൾ)
5. ഡാറ്റ: അപ്പർ-ലെയർ പ്രോട്ടോക്കോൾ (ULP) ഡാറ്റ (വേരിയബിൾ നീളം)
UDP ഉപയോഗിക്കുന്ന പ്രോട്ടോക്കോളുകളുടെ ഉദാഹരണങ്ങൾ: TFTP, SNMP, നെറ്റ്‌വർക്ക് ഫയൽ സിസ്റ്റം(NFS) കൂടാതെ ഡൊമെയ്ൻ നാമംസിസ്റ്റം (DNS).

TCP തലക്കെട്ടിൽ നിർവചിച്ചിരിക്കുന്ന വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു TCP പ്രോട്ടോക്കോൾഓം IN ഈ വിഭാഗം TCP തലക്കെട്ടിൻ്റെ ഘടകങ്ങൾ വിവരിച്ചിരിക്കുന്നു.

ഐപി പാക്കറ്റുകൾ ഉപയോഗിച്ചാണ് ടിസിപി സെഗ്‌മെൻ്റുകൾ കൈമാറുന്നത്. TCP തലക്കെട്ട് IP തലക്കെട്ടിനെ പിന്തുടരുന്നു. ടിസിപി ഒഴികെയുള്ള മറ്റ് ഹോസ്റ്റ്-ലെവൽ പ്രോട്ടോക്കോളുകളുടെ നിലനിൽപ്പിന് ഈ വേർതിരിവ് അനുവദിക്കുന്നു. TCP തലക്കെട്ട് ഫീൽഡുകളിൽ ഇനിപ്പറയുന്നവ ഉൾപ്പെടുന്നു:

ഉറവിട പോർട്ട്: ഉറവിട പോർട്ട് നമ്പർ (16 ബിറ്റുകൾ)

ഡെസ്റ്റിനേഷൻ പോർട്ട്: ഡെസ്റ്റിനേഷൻ പോർട്ട് നമ്പർ (16 ബിറ്റുകൾ)

ക്രമസംഖ്യ: സീരിയൽ നമ്പർഡാറ്റയുടെ ആദ്യ ഒക്റ്ററ്റ്
ഇൻകമിംഗ് ഡാറ്റ ശരിയായി ക്രമീകരിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കാൻ ഉപയോഗിക്കുന്ന സെഗ്മെൻ്റ്
(32 ബിറ്റുകൾ)

അംഗീകാര നമ്പർ: അടുത്തതായി പ്രതീക്ഷിക്കുന്ന ഒക്‌റ്റെറ്റ്
TCP (32 ബിറ്റുകൾ)

തലക്കെട്ടിൻ്റെ ദൈർഘ്യം: തലക്കെട്ടിലെ 32-ബിറ്റ് വാക്കുകളുടെ എണ്ണം (4 ബിറ്റുകൾ)

റിസർവ് ചെയ്‌തത്: 0 ആയി സജ്ജീകരിക്കുക (3 ബിറ്റുകൾ)

നിയന്ത്രണ ബിറ്റുകൾ: ക്രമീകരണം പോലുള്ള നിയന്ത്രണ പ്രവർത്തനങ്ങൾ,
ഓവർലോഡും സെഷൻ അവസാനിപ്പിക്കലും (9 ബിറ്റുകൾ). ഒരു പ്രത്യേകതയുള്ള ഒരൊറ്റ ബിറ്റ്
ഒരു മൂല്യം പലപ്പോഴും ഒരു പതാകയായി കരുതപ്പെടുന്നു.

വിൻഡോ: ഉപകരണം സ്വീകരിക്കാൻ തയ്യാറുള്ള ഒക്ടറ്റുകളുടെ എണ്ണം (16 ബിറ്റുകൾ)

ചെക്ക്സം: ഹെഡറിൻ്റെയും കണക്കാക്കിയ ചെക്ക്സം
ഡാറ്റ (16 ബിറ്റുകൾ)

അടിയന്തിരം: അടിയന്തിര ഡാറ്റയുടെ അവസാനത്തെ സൂചിപ്പിക്കുന്നു (16 ബിറ്റുകൾ)

ഓപ്ഷനുകൾ: നിലവിൽ ഒരു ഓപ്ഷൻ നിർവചിച്ചിരിക്കുന്നു - പരമാവധി വലുപ്പം
TCP സെഗ്മെൻ്റ് (0 അല്ലെങ്കിൽ 32 ബിറ്റുകൾ)

ഡാറ്റ: അപ്പർ-ലെയർ പ്രോട്ടോക്കോൾ (ULP) ഡാറ്റ
(വേരിയബിൾ നീളം)

ആമുഖം

TCP ഒരു കണക്ഷൻ-ഓറിയൻ്റഡ് പ്രോട്ടോക്കോൾ ആണ്. ഏതെങ്കിലും കക്ഷിക്ക് മറ്റൊന്നിലേക്ക് ഡാറ്റ അയയ്‌ക്കുന്നതിന് മുമ്പ്, അവർക്കിടയിൽ ഒരു ബന്ധം സ്ഥാപിക്കേണ്ടതുണ്ട്. ഈ അധ്യായത്തിൽ, ഒരു ടിസിപി കണക്ഷൻ എങ്ങനെ സ്ഥാപിക്കപ്പെടുന്നുവെന്നും അത് എങ്ങനെ അവസാനിപ്പിക്കുന്നുവെന്നും വിശദമായി നോക്കാം.

TCP പ്രവർത്തിക്കുന്നതിന് രണ്ട് അറ്റങ്ങൾക്കിടയിൽ ഒരു കണക്ഷൻ സ്ഥാപിക്കേണ്ടതിനാൽ, UDP പോലുള്ള കണക്ഷനില്ലാത്ത പ്രോട്ടോക്കോളുകളിൽ നിന്ന് ഇത് വ്യത്യസ്തമാണ്. UDP ഉപയോഗിക്കുമ്പോൾ, ഓരോ വശവും ആദ്യം ഒരു കണക്ഷൻ സ്ഥാപിക്കാതെ തന്നെ ഡാറ്റാഗ്രാമുകൾ മറ്റൊന്നിലേക്ക് അയയ്ക്കുന്നത് ഞങ്ങൾ കണ്ടു.

ഒരു കണക്ഷൻ സ്ഥാപിക്കുകയും അവസാനിപ്പിക്കുകയും ചെയ്യുന്നു

ഒരു ടിസിപി കണക്ഷൻ സ്ഥാപിക്കുകയും അവസാനിപ്പിക്കുകയും ചെയ്യുമ്പോൾ എന്ത് സംഭവിക്കുമെന്ന് കാണുന്നതിന്, ഞങ്ങൾ svr4 സിസ്റ്റത്തിൽ ഇനിപ്പറയുന്ന കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്തു:

svr4% ടെൽനെറ്റ് ബിഎസ്ഡി നിരസിക്കുക
192.82.148.3 ശ്രമിക്കുന്നു ...
bsdi-യുമായി ബന്ധിപ്പിച്ചു.
എസ്കേപ്പ് പ്രതീകം "^]" ആണ്.
^] നിയന്ത്രണം നൽകുക, വലത് ചതുര ബ്രാക്കറ്റ്,
ടെൽനെറ്റ്> ഉപേക്ഷിക്കുകടെൽനെറ്റ് ക്ലയൻ്റ് കണക്ഷൻ അടയ്ക്കുന്നതിന്
കണക്ഷൻ അടച്ചു.

ടെൽനെറ്റ് കമാൻഡ് ഡിസ്‌കാർഡ് സേവനവുമായി ബന്ധപ്പെട്ട പോർട്ടിലെ bsdi ഹോസ്റ്റിലേക്ക് ഒരു TCP കണക്ഷൻ സ്ഥാപിക്കുന്നു (അധ്യായം 1, വിഭാഗം). ഒരു കണക്ഷൻ സ്ഥാപിക്കുകയും തകരാറിലാകുകയും ചെയ്യുമ്പോൾ, ഡാറ്റ കൈമാറ്റം ചെയ്യാതെ എന്താണ് സംഭവിക്കുന്നതെന്ന് നമ്മൾ കാണേണ്ട തരത്തിലുള്ള സേവനമാണിത്.

tcpdump ഔട്ട്പുട്ട്

ഈ കമാൻഡ് സൃഷ്ടിക്കുന്ന സെഗ്‌മെൻ്റുകൾക്കുള്ള tcpdump ഔട്ട്‌പുട്ട് ചിത്രം 18.1 കാണിക്കുന്നു.

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521 (0)
4096 വിജയിച്ചു
2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521 (0)
ack 1415531522 വിജയി 4096

3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . ack 1823083522 വിൻ 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1415531522:1415531522 (0)
ack 1823083522 വിൻ 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037: . ack 1415531523 വിജയി 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1823083522:1823083522 (0)
ack 1415531523 വിജയി 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 1823083523 വിജയി 4096

ചിത്രം 18.1 TCP കണക്ഷൻ സ്ഥാപിക്കുന്നതിനും കീറുന്നതിനുമുള്ള tcpdump ഔട്ട്പുട്ട്.

ഈ ഏഴ് TCP സെഗ്‌മെൻ്റുകളിൽ TCP തലക്കെട്ടുകൾ മാത്രമേ അടങ്ങിയിട്ടുള്ളൂ. ഡാറ്റ കൈമാറ്റം നടന്നില്ല.

TCP സെഗ്മെൻ്റുകൾക്കായി, ഓരോ ഔട്ട്പുട്ട് ലൈനും ആരംഭിക്കുന്നു

ഉറവിടം > ലക്ഷ്യസ്ഥാനം: പതാകകൾ

TCP ഹെഡറിൻ്റെ () ആറ് ഫ്ലാഗ് ബിറ്റുകളിൽ നാലെണ്ണമാണ് ഫ്ലാഗുകൾ. ഫ്ലാഗുകളുമായി പൊരുത്തപ്പെടുന്നതും ഔട്ട്പുട്ടിൽ ദൃശ്യമാകുന്നതുമായ അഞ്ച് വ്യത്യസ്ത ചിഹ്നങ്ങൾ ചിത്രം 18.2 കാണിക്കുന്നു.

3 പ്രതീകങ്ങളുടെ ചുരുക്കെഴുത്ത്

വിവരണം

സീക്വൻസ് നമ്പറുകൾ സമന്വയിപ്പിക്കുക
അയച്ചയാൾ ഡാറ്റ കൈമാറുന്നത് പൂർത്തിയാക്കി
കണക്ഷൻ റീസെറ്റ്
സ്വീകരിക്കുന്ന പ്രക്രിയയിലേക്ക് കഴിയുന്നത്ര വേഗത്തിൽ ഡാറ്റ അയയ്ക്കുന്നു
നാല് പതാകകളിൽ ഒന്നുപോലും സ്ഥാപിച്ചിട്ടില്ല

ചിത്രം 18.2 TCP ഹെഡറിലെ ഫ്ലാഗ് ബിറ്റുകൾക്കായി tcpdump മുഖേന ഫ്ലാഗ് പ്രതീകങ്ങൾ ഔട്ട്പുട്ട് ചെയ്യുന്നു.

ഈ ഉദാഹരണത്തിൽ നമ്മൾ S, F, ഡോട്ട് ഫ്ലാഗുകൾ കാണുന്നു. രണ്ട് പതാകകൾ കൂടി (ആർ, പി) പിന്നീട് ദൃശ്യമാകും. TCP ഹെഡറിലെ മറ്റ് രണ്ട് ഫ്ലാഗ് ബിറ്റുകൾ - ACK, URG - tcpdump കമാൻഡ് പ്രിൻ്റ് ചെയ്യുന്നു.

ചിത്രം 18.2-ൽ കാണിച്ചിരിക്കുന്ന നാല് ഫ്ലാഗ് ബിറ്റുകളിൽ ഒന്നിൽ കൂടുതൽ ഒരൊറ്റ സെഗ്‌മെൻ്റിൽ ഉണ്ടായിരിക്കാം, എന്നിരുന്നാലും, സാധാരണയായി ഒരു ഫ്ലാഗ് മാത്രമേ സജ്ജീകരിക്കൂ.

RFC 1025 [Postel 1987] എന്നത്, ലഭ്യമായ എല്ലാ ഫ്ലാഗ് ബിറ്റുകളുടെയും പരമാവധി സംയോജനം ഒരേസമയം (SYN, URG, PSH, FIN, കൂടാതെ 1 ഡാറ്റാ ബൈറ്റ്) ഒരു Kamikaze പാക്കറ്റായി സജ്ജീകരിച്ചിരിക്കുന്ന വിഭാഗത്തെ സൂചിപ്പിക്കുന്നു (ഇൽ ആംഗലേയ ഭാഷസമാനമായ പാക്കേജിന് മറ്റ് നിരവധി നിർവചനങ്ങൾ ഉണ്ട്, അതായത് "ഡേർട്ടി പാക്കേജ്", "ന്യൂ ഇയർ ട്രീ പാക്കേജ്" മുതലായവ).

വരി 1-ൽ, ഫീൽഡ് 1415531521:1415531521 (0) അർത്ഥമാക്കുന്നത് പാക്കറ്റിൻ്റെ സീക്വൻസ് നമ്പർ 1415531521 ആണെന്നും സെഗ്‌മെൻ്റിലെ ഡാറ്റാ ബൈറ്റുകളുടെ എണ്ണം 0 ആണെന്നും ആണ്. tcpdump കമാൻഡ് സ്റ്റാർട്ടിംഗ് സീക്വൻസ് നമ്പർ പ്രിൻ്റ് ചെയ്യുന്നു, ഒരു കോളൻ, കണക്കാക്കിയ നമ്പർ. തുടർന്ന് പരാൻതീസിസിലെ ഡാറ്റാ ബൈറ്റുകളുടെ എണ്ണം. ബൈറ്റുകളുടെ എണ്ണം 0-ൽ കൂടുതലായിരിക്കുമ്പോൾ, പ്രതീക്ഷിക്കുന്ന അന്തിമ സീക്വൻസ് നമ്പർ കാണാൻ സാധിക്കും. സെഗ്‌മെൻ്റിൽ ഒന്നോ അതിലധികമോ ബൈറ്റുകളോ ഉപയോക്തൃ ഡാറ്റയോ ഉണ്ടെങ്കിൽ, ഫീൽഡ് ദൃശ്യമാകുന്നു (1) അല്ലെങ്കിൽ (2) SYN പതാക, FIN അല്ലെങ്കിൽ RST. ചിത്രം 18.1 ലെ വരികൾ 1, 2, 4, 6 എന്നിവയിൽ, ഫ്ലാഗ് ബിറ്റുകൾ സജ്ജീകരിച്ചിരിക്കുന്നതിനാൽ ഈ ഫീൽഡ് ദൃശ്യമാകുന്നു - ഈ ഉദാഹരണത്തിൽ ഡാറ്റ കൈമാറ്റം ചെയ്തിട്ടില്ല.

വരി 2-ൽ, ack 1415531522 ഫീൽഡിൽ സ്ഥിരീകരണ നമ്പർ അടങ്ങിയിരിക്കുന്നു. ACK ഫ്ലാഗ് സജ്ജീകരിച്ചാൽ മാത്രമേ അത് അച്ചടിക്കുകയുള്ളൂ. ഔട്ട്‌പുട്ടിൻ്റെ ഓരോ വരിയിലും വിൻ 4096 ഫീൽഡ് അയച്ചയാൾ പ്രഖ്യാപിച്ച വിൻഡോ വലുപ്പം കാണിക്കുന്നു. ഈ ഉദാഹരണത്തിൽ, ആശയവിനിമയം ഇല്ലാതിരുന്നിടത്ത്, വിൻഡോയുടെ വലുപ്പം മാറ്റമില്ലാതെ വെച്ചിരിക്കുന്നു കൂടാതെ 4096 ൻ്റെ ഡിഫോൾട്ട് മൂല്യം ഉപയോഗിച്ചു. (ഞങ്ങൾ TCP വിൻഡോ വലുപ്പം അധ്യായം 20-ലെ ഒരു വിഭാഗത്തിൽ ഉൾപ്പെടുത്തും.)

ചിത്രം 18.1-ലെ ഔട്ട്‌പുട്ടിലെ അവസാന ഫീൽഡ്, അയയ്ക്കുന്നയാൾ സജ്ജമാക്കിയിട്ടുള്ള പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം (MSS - പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം) കാണിക്കുന്നു. ഈ മൂല്യത്തേക്കാൾ വലിയ TCP സെഗ്‌മെൻ്റുകൾ സ്വീകരിക്കാൻ അയച്ചയാൾ ആഗ്രഹിക്കുന്നില്ല. വിഘടനം ഒഴിവാക്കാനാണ് ഇത് സാധാരണയായി ചെയ്യുന്നത് (അധ്യായം 11, വിഭാഗം). ഈ അധ്യായത്തിൻ്റെ ഒരു വിഭാഗത്തിൽ ഞങ്ങൾ പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം ഉൾക്കൊള്ളുന്നു, കൂടാതെ ഈ അധ്യായത്തിൻ്റെ ഒരു വിഭാഗത്തിൽ വിവിധ TCP ഓപ്ഷനുകളുടെ ഫോർമാറ്റ് കാണിക്കും.

സമയ ഡയഗ്രമുകൾ

ഈ പാക്കറ്റ് എക്സ്ചേഞ്ചുമായി ബന്ധപ്പെട്ട സമയ ഡയഗ്രം ചിത്രം 18.3 കാണിക്കുന്നു. (ഞങ്ങൾ ആദ്യം നോക്കിയപ്പോൾ സമയ ഡയഗ്രമുകളുടെ ചില അടിസ്ഥാന സവിശേഷതകൾ ഞങ്ങൾ വിവരിച്ചു.) ഈ ചിത്രം ഏത് ഭാഗത്താണ് പാക്കറ്റുകൾ അയയ്ക്കുന്നതെന്ന് കാണിക്കുന്നു. tcpdump കമാൻഡിൻ്റെ ഔട്ട്‌പുട്ടും കാണിക്കുന്നു (ഇത് S-ന് പകരം SYN എന്ന് അച്ചടിച്ചു). ഈ ടൈമിംഗ് ഡയഗ്രം ഞങ്ങളുടെ ചർച്ചയ്ക്ക് പ്രസക്തമല്ലാത്തതിനാൽ വിൻഡോ സൈസ് മൂല്യം നീക്കം ചെയ്തു.

കണക്ഷൻ എസ്റ്റാബ്ലിഷ്മെൻ്റ് പ്രോട്ടോക്കോൾ

ഇനി നമുക്ക് TCP പ്രോട്ടോക്കോളിൻ്റെ വിശദാംശങ്ങളിലേക്ക് മടങ്ങാം, അത് ചിത്രം 18.3-ൽ കാണിച്ചിരിക്കുന്നു. ഒരു TCP കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, നിങ്ങൾ ചെയ്യേണ്ടത്:

  1. ക്ലയൻ്റ് കണക്റ്റുചെയ്യാൻ ആഗ്രഹിക്കുന്ന സെർവറിൻ്റെ പോർട്ട് നമ്പറും ക്ലയൻ്റിൻറെ യഥാർത്ഥ സീക്വൻസ് നമ്പറും (ഈ ഉദാഹരണത്തിൽ, ISN, 1415531521) സൂചിപ്പിക്കുന്ന ഒരു SYN സെഗ്‌മെൻ്റ് അഭ്യർത്ഥിക്കുന്നയാൾ (സാധാരണയായി ക്ലയൻ്റ് എന്ന് വിളിക്കുന്നു) അയയ്ക്കുന്നു. ഇത് സെഗ്മെൻ്റ് നമ്പർ 1 ആണ്.
  2. സെർവറിൻ്റെ ഒറിജിനൽ സീക്വൻസ് നമ്പർ (സെഗ്‌മെൻ്റ് 2) അടങ്ങുന്ന അതിൻ്റെ SYN സെഗ്‌മെൻ്റിലൂടെ സെർവർ പ്രതികരിക്കുന്നു. ഒരു ACK (ക്ലയൻ്റിൻ്റെ ISN പ്ലസ് വൺ) ഉപയോഗിച്ച് ക്ലയൻ്റിൻറെ SYN-ൻ്റെ വരവ് സെർവർ അംഗീകരിക്കുന്നു. ഓരോ SYN-നും ഒരൊറ്റ സീക്വൻസ് നമ്പർ ഉപയോഗിക്കുന്നു.
  3. ഒരു ACK (സെർവർ ISN പ്ലസ് വൺ, സെഗ്‌മെൻ്റ് 3) ഉപയോഗിച്ച് സെർവറിൽ നിന്നുള്ള SYN-ൻ്റെ വരവ് ക്ലയൻ്റ് അംഗീകരിക്കണം.

ഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ ഈ മൂന്ന് സെഗ്മെൻ്റുകൾ മതിയാകും. ഇതിനെ പലപ്പോഴും ത്രീ-വേ ഹാൻഡ്‌ഷേക്ക് എന്ന് വിളിക്കുന്നു.

ചിത്രം 18.3 കണക്ഷൻ സ്ഥാപിക്കുന്നതിൻ്റെയും അവസാനിപ്പിക്കുന്നതിൻ്റെയും സമയ ഡയഗ്രം.

ആദ്യത്തെ SYN അയക്കുന്ന കക്ഷി കണക്ഷൻ സജീവമാക്കിയതായി കണക്കാക്കുന്നു (സജീവമായി തുറന്നത്). ആദ്യ SYN സ്വീകരിക്കുകയും അടുത്ത SYN അയയ്ക്കുകയും ചെയ്യുന്ന മറുവശം, കണക്ഷൻ തുറക്കുന്നതിൽ ഒരു നിഷ്ക്രിയ പങ്ക് വഹിക്കുന്നു (പാസീവ് ഓപ്പൺ). (ഈ അധ്യായത്തിൻ്റെ ഒരു വിഭാഗത്തിൽ, ഒരു കണക്ഷൻ തുറക്കുന്നതിനുള്ള നടപടിക്രമം ഞങ്ങൾ വിശദമായി വിവരിക്കും, അവിടെ കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ ഇരു കക്ഷികളും സജീവമായി കണക്കാക്കപ്പെടുന്നു.)

ഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ ഓരോ വശവും അതിൻ്റെ SYN അയച്ചുകഴിഞ്ഞാൽ, ആ കണക്ഷനായി അത് ഒരു പ്രാരംഭ സീക്വൻസ് നമ്പർ (ISN) തിരഞ്ഞെടുക്കുന്നു. ISN ഓരോ തവണയും മാറണം, അതിനാൽ ഓരോ കണക്ഷനും അതിൻ്റേതായ വ്യത്യസ്ത ISN ഉണ്ട്. RFC 793 [Postel 1981c] ISN 32-ബിറ്റ് കൗണ്ടറാണെന്ന് വ്യക്തമാക്കുന്നു, അത് ഓരോ 4 മൈക്രോസെക്കൻഡിലും ഒന്ന് വർദ്ധിക്കുന്നു. സീക്വൻസ് നമ്പറുകൾക്ക് നന്ദി, നെറ്റ്‌വർക്കിൽ നിലനിൽക്കുന്നതും പിന്നീട് ഡെലിവർ ചെയ്യുന്നതുമായ പാക്കറ്റുകൾ നിലവിലുള്ള കണക്ഷൻ്റെ ഭാഗമായി കാണുന്നില്ല.

സീക്വൻസ് നമ്പർ എങ്ങനെയാണ് തിരഞ്ഞെടുത്തത്? 4.4BSD (ഒപ്പം മിക്ക ബെർക്ക്‌ലി നടപ്പിലാക്കലുകളിലും), സിസ്റ്റം ആരംഭിക്കുമ്പോൾ പ്രാരംഭ ശ്രേണി നമ്പർ 1 ആയി സജ്ജീകരിച്ചിരിക്കുന്നു. സമാനമായ പ്രാക്ടീസ്ഹോസ്റ്റ് ആവശ്യകതകൾ RFC അപലപിക്കുന്നു. ഈ മൂല്യം ഓരോ അര സെക്കൻഡിലും 64000 വർദ്ധിക്കുകയും ഓരോ 9.5 മണിക്കൂറിലും 0 ആയി മടങ്ങുകയും ചെയ്യുന്നു. (ഇത് ഓരോ 8 മൈക്രോസെക്കൻഡിലും ഓരോ 4 മൈക്രോസെക്കൻഡിലും ഒന്ന് വർദ്ധിക്കുന്ന ഒരു കൗണ്ടറുമായി യോജിക്കുന്നു.) കൂടാതെ, ഓരോ തവണയും ഒരു കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ, ഈ വേരിയബിൾ 64000 വർദ്ധിപ്പിക്കും.

സെഗ്‌മെൻ്റുകൾ 3 ഉം 4 ഉം തമ്മിലുള്ള 4.1 സെക്കൻഡ് വിടവ് ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നതിനും കണക്ഷൻ അവസാനിപ്പിക്കുന്നതിന് ടെൽനെറ്റ് ക്വിറ്റ് കമാൻഡ് നൽകുന്നതിനും ഇടയിലുള്ള സമയവുമായി പൊരുത്തപ്പെടുന്നു.

പ്രോട്ടോക്കോൾ വിച്ഛേദിക്കുക

ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, 3 സെഗ്‌മെൻ്റുകൾ ആവശ്യമാണ്, അത് തകർക്കാൻ - 4. ടിസിപി കണക്ഷൻ പകുതി അടച്ച അവസ്ഥയിലാകാമെന്ന വസ്തുത ഇത് വിശദീകരിക്കുന്നു. ഒരു ടിസിപി കണക്ഷൻ ഫുൾ-ഡ്യൂപ്ലെക്‌സ് ആയതിനാൽ (ഡാറ്റയ്ക്ക് ഓരോ ദിശയിലും മറ്റ് ദിശകളിൽ നിന്ന് സ്വതന്ത്രമായി സഞ്ചരിക്കാനാകും), ഓരോ ദിശയും മറ്റൊന്നിൽ നിന്ന് സ്വതന്ത്രമായി അടച്ചിരിക്കണം. ഡാറ്റ കൈമാറ്റം പൂർത്തിയാകുമ്പോൾ ഓരോ കക്ഷിയും ഒരു FIN അയയ്ക്കണം എന്നതാണ് നിയമം. ടിസിപിക്ക് ഒരു FIN ലഭിക്കുമ്പോൾ, റിമോട്ട് പാർട്ടി കണക്ഷൻ വിച്ഛേദിക്കുന്നതായും ആ ദിശയിലേക്ക് ഡാറ്റ അയക്കുന്നത് നിർത്തുന്നുവെന്നും അത് ആപ്ലിക്കേഷനെ അറിയിക്കണം. അപേക്ഷ അടച്ചതിൻ്റെ ഫലമായാണ് സാധാരണയായി FIN അയയ്ക്കുന്നത്.

ആദ്യം കണക്ഷൻ അടയ്ക്കുന്ന വശം (ആദ്യത്തെ FIN അയയ്‌ക്കുന്നു) ഒരു സജീവ ക്ലോസ് ചെയ്യുന്നു, മറുവശം (ആ FIN സ്വീകരിച്ചത്) ഒരു നിഷ്ക്രിയ ക്ലോസ് ചെയ്യുന്നു എന്ന് നമുക്ക് പറയാം. സാധാരണഗതിയിൽ, ഒരു വശം സജീവമായ ക്ലോസ് ചെയ്യുന്നു, മറ്റൊന്ന് നിഷ്ക്രിയമായ ക്ലോസ് ചെയ്യുന്നു, എന്നിരുന്നാലും, ഈ അധ്യായത്തിൻ്റെ ഒരു ഭാഗത്ത്, ഇരുവശത്തും സജീവമായ ഒരു ക്ലോസ് ചെയ്യാൻ കഴിയുമെന്ന് നമുക്ക് കാണാം.

ചിത്രം 18.3 ലെ സെഗ്മെൻ്റ് നമ്പർ 4 കണക്ഷൻ അടയ്ക്കുകയും ടെൽനെറ്റ് ക്ലയൻ്റ് പ്രവർത്തിക്കുന്നത് നിർത്തുമ്പോൾ അയയ്ക്കുകയും ചെയ്യുന്നു. നമ്മൾ പുറത്തുകടക്കുമ്പോൾ ഇത് സംഭവിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, TCP ക്ലയൻ്റ് FIN അയയ്‌ക്കാൻ നിർബന്ധിതരാകുന്നു, ക്ലയൻ്റിൽ നിന്ന് സെർവറിലേക്കുള്ള ഡാറ്റാ ഫ്ലോ ക്ലോസ് ചെയ്യുന്നു.

സെർവറിന് FIN ലഭിക്കുമ്പോൾ, അത് സ്വീകരിച്ച സീക്വൻസ് നമ്പർ പ്ലസ് വൺ (സെഗ്‌മെൻ്റ് 5) ഉള്ള ഒരു ACK തിരികെ അയയ്‌ക്കുന്നു. SYN പോലെ FIN ഒരു സീക്വൻസ് നമ്പർ ഉപയോഗിക്കുന്നു. ഈ ഘട്ടത്തിൽ, TCP സെർവർ ആപ്ലിക്കേഷനിലേക്ക് (സെർവർ ഷട്ട് ഡൗൺ ചെയ്യുന്നതിന്) ഒരു എൻഡ്-ഓഫ്-ഫയൽ ചിഹ്നവും നൽകുന്നു. സെർവർ അതിൻ്റെ കണക്ഷൻ അടയ്ക്കുന്നു, ഇത് അതിൻ്റെ TCP ഒരു FIN (സെഗ്‌മെൻ്റ് 6) അയയ്‌ക്കുന്നതിന് കാരണമാകുന്നു, അത് ലഭിച്ച സീക്വൻസ് നമ്പർ (സെഗ്‌മെൻ്റ് 7) വർദ്ധിപ്പിക്കുന്നതിലൂടെ ക്ലയൻ്റ് അംഗീകരിക്കണം (ACK).

ഒരു കണക്ഷൻ അടയ്ക്കുമ്പോൾ സെഗ്മെൻ്റുകളുടെ ഒരു സാധാരണ എക്സ്ചേഞ്ച് ചിത്രം 18.4 കാണിക്കുന്നു. സീക്വൻസ് നമ്പറുകൾ ഒഴിവാക്കിയിരിക്കുന്നു. ഈ ചിത്രത്തിൽ, ആപ്ലിക്കേഷനുകൾ അവരുടെ കണക്ഷനുകൾ അടയ്ക്കുന്നത് കാരണം FIN-കൾ അയയ്‌ക്കുന്നു, അതേസമയം ഈ FIN-കൾക്കുള്ള ACK TCP സോഫ്‌റ്റ്‌വെയർ സ്വയമേവ സൃഷ്‌ടിക്കുന്നു.

കണക്ഷനുകൾ സാധാരണയായി ക്ലയൻ്റാണ് സ്ഥാപിക്കുന്നത്, അതായത്, ആദ്യത്തെ SYN ക്ലയൻ്റിൽ നിന്ന് സെർവറിലേക്ക് സഞ്ചരിക്കുന്നു. എന്നിരുന്നാലും, ഇരുവശത്തും കണക്ഷൻ സജീവമായി അടയ്ക്കാൻ കഴിയും (ആദ്യ FIN അയയ്ക്കുക). എന്നിരുന്നാലും, മിക്കപ്പോഴും, കണക്ഷൻ എപ്പോൾ അടയ്ക്കണമെന്ന് തീരുമാനിക്കുന്നത് ക്ലയൻ്റാണ്, കാരണം ക്ലയൻ്റ് പ്രോസസ്സ് പ്രധാനമായും നിയന്ത്രിക്കുന്നത് ഉപയോക്താവാണ്, കണക്ഷൻ അടയ്ക്കുന്നതിന് "പുറത്തുകടക്കുക" പോലെയുള്ള ഒന്ന് പ്രവേശിക്കുന്നു. ചിത്രം 18.4-ൽ, നമുക്ക് ചിത്രത്തിൻ്റെ മുകളിലുള്ള ലേബലുകൾ റിവേഴ്സ് ചെയ്യാം, വിളിക്കുന്നു ഇടത് വശംസെർവർ, ക്ലയൻ്റ് വലതുവശത്ത്. എന്നിരുന്നാലും, ഈ സാഹചര്യത്തിൽ പോലും, ചിത്രത്തിൽ കാണിച്ചിരിക്കുന്നതുപോലെ എല്ലാം കൃത്യമായി പ്രവർത്തിക്കും. (ഉദാഹരണത്തിന്, അധ്യായം 14-ലെ വിഭാഗത്തിലെ ആദ്യ ഉദാഹരണം, ടൈം സെർവർ എങ്ങനെ കണക്ഷൻ ക്ലോസ് ചെയ്യുന്നുവെന്ന് കാണിച്ചു.)

ചിത്രം 18.4 ഒരു കണക്ഷൻ അടയ്ക്കുമ്പോൾ സാധാരണ സെഗ്മെൻ്റ് എക്സ്ചേഞ്ച്.

സാധാരണ tcpdump ഔട്ട്പുട്ട്

ഒരു വലിയ സംഖ്യ സീക്വൻസ് നമ്പറുകളിലൂടെ അടുക്കുന്നതിനുള്ള ചുമതല വളരെ സങ്കീർണ്ണമായതിനാൽ, tcpdump പ്രോഗ്രാം ഔട്ട്‌പുട്ടിൽ SYN സെഗ്‌മെൻ്റുകൾക്കുള്ള സമ്പൂർണ്ണ സീക്വൻസ് നമ്പറുകൾ അടങ്ങിയിരിക്കുന്നു, കൂടാതെ തുടർന്നുള്ള എല്ലാ സീക്വൻസ് നമ്പറുകളും യഥാർത്ഥ സീക്വൻസ് നമ്പറുകളിൽ നിന്ന് ആപേക്ഷിക ഓഫ്‌സെറ്റായി കാണിക്കുന്നു. (ചിത്രം 18.1-ൽ കാണിച്ചിരിക്കുന്ന ഔട്ട്പുട്ട് ലഭിക്കുന്നതിന്, ഞങ്ങൾ -S ഓപ്ഷൻ വ്യക്തമാക്കേണ്ടതുണ്ട്.) ചിത്രം 18.1-ന് അനുയോജ്യമായ സാധാരണ tcpdump ഔട്ട്പുട്ട് ചിത്രം 18.5-ൽ കാണിച്ചിരിക്കുന്നു.

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521(0)
4096 വിജയിച്ചു
2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521(0)
എക്ക് 1415531522
4096 വിജയിച്ചു
3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . AC 1 വിജയം 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1:1 (0) ack 1 win 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037: . ack 2 വിജയം 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1:1 (0) ack 2 win 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 2 വിജയം 4096

ചിത്രം 18.5 കണക്ഷൻ സ്ഥാപിക്കുന്നതിനും അവസാനിപ്പിക്കുന്നതിനുമുള്ള സാധാരണ tcpdump കമാൻഡ് ഔട്ട്പുട്ട്.

പൂർണ്ണ ശ്രേണി സംഖ്യകൾ കാണിക്കേണ്ട ആവശ്യമില്ലെങ്കിൽ, ഇനിപ്പറയുന്ന എല്ലാ ഉദാഹരണങ്ങളിലും ഞങ്ങൾ ഈ ഔട്ട്പുട്ട് ഫോം ഉപയോഗിക്കും.

ഒരു കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ സമയപരിധി

ഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ കഴിയാത്തതിന് നിരവധി കാരണങ്ങളുണ്ട്. ഉദാഹരണത്തിന്, ഹോസ്റ്റ് (സെർവർ) ഓഫാക്കി. സമാനമായ ഒരു സാഹചര്യം അനുകരിക്കാൻ, ഞങ്ങൾ നിർവ്വഹിച്ചു ടെൽനെറ്റ് കമാൻഡ്, സെർവറിൽ നിന്ന് ഇഥർനെറ്റ് കേബിൾ വിച്ഛേദിച്ച ശേഷം. tcpdump കമാൻഡിൻ്റെ ഔട്ട്പുട്ട് ചിത്രം 18.6 കാണിക്കുന്നു.

1 0.0 bsdi.1024 >
4096 വിജയിച്ചു
2 5.814797 (5.8148) bsdi.1024 > svr4. discard: S 291008001:291008001(0)
4096 വിജയിച്ചു
3 29.815436 (24.0006) bsdi.1024 > svr4. discard: S 291008001:291008001(0)
4096 വിജയിച്ചു

ചിത്രം 18.6 കാലഹരണപ്പെട്ട ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നതിനുള്ള tcpdump കമാൻഡിൻ്റെ ഔട്ട്പുട്ട്.

ഈ ഔട്ട്‌പുട്ടിൽ നിങ്ങൾ ശ്രദ്ധിക്കേണ്ടത് ഒരു കണക്ഷൻ സ്ഥാപിക്കാനുള്ള ശ്രമത്തിൽ TCP ക്ലയൻ്റ് എത്ര തവണ SYN അയയ്ക്കുന്നു എന്നതാണ്. രണ്ടാമത്തെ സെഗ്‌മെൻ്റ് ആദ്യത്തേതിന് 5.8 സെക്കൻഡിന് ശേഷം അയയ്‌ക്കുന്നു, മൂന്നാമത്തേത് രണ്ടാമത്തേതിന് 24 സെക്കൻഡിന് ശേഷം അയയ്‌ക്കുന്നു.

ക്ലയൻ്റ് റീബൂട്ട് ചെയ്തതിന് ശേഷം ഏകദേശം 38 മിനിറ്റുകൾക്ക് ശേഷം ഈ ഉദാഹരണം പ്രവർത്തിച്ചുവെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. അതിനാൽ, അനുബന്ധ യഥാർത്ഥ ശ്രേണി നമ്പർ 291008001 (ഏകദേശം 38x60x6400x2) ആണ്. അധ്യായത്തിൻ്റെ തുടക്കത്തിൽ, സാധാരണ ബെർക്ക്‌ലി സിസ്റ്റങ്ങൾ പ്രാരംഭ സീക്വൻസ് നമ്പർ 1 ആയി സജ്ജീകരിക്കുകയും ഓരോ പകുതി സെക്കൻഡിലും 64000 വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നുവെന്ന് ഞങ്ങൾ പറഞ്ഞു.

ക്ലയൻ്റ് പോർട്ട് നമ്പർ 1024 ആയതിനാൽ, സിസ്റ്റം റീബൂട്ട് ചെയ്തതിന് ശേഷമുള്ള ആദ്യത്തെ ടിസിപി കണക്ഷനാണിത് എന്നതും ശ്രദ്ധിക്കേണ്ടതാണ്.

എന്നിരുന്നാലും, TCP ക്ലയൻ്റ് അതിൻ്റെ ശ്രമം ഉപേക്ഷിക്കുന്നതിന് മുമ്പ് എത്ര സമയം റീട്രാൻസ്മിഷൻ നടത്തിയെന്ന് ചിത്രം 18.6 കാണിക്കുന്നില്ല. ഈ താൽക്കാലിക മൂല്യങ്ങൾ കാണുന്നതിന്, നമ്മൾ ടെൽനെറ്റ് കമാൻഡ് ഇനിപ്പറയുന്ന രീതിയിൽ എക്സിക്യൂട്ട് ചെയ്യണം:

bsdi % തീയതി ; ടെൽനെറ്റ് svr4 നിരസിക്കുക; തീയതി
വ്യാഴം 24 16:24:11 MST 1992
192.82.148.2 ശ്രമിക്കുന്നു...
ടെൽനെറ്റ്: റിമോട്ട് ഹോസ്റ്റിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല: കണക്ഷൻ സമയം കഴിഞ്ഞു
വ്യാഴം 24 16:25:27 MST 1992

സമയം 76 സെക്കൻഡ്. മിക്ക ബെർക്ക്‌ലി സിസ്റ്റങ്ങളും 75 സെക്കൻഡ് സമയപരിധി നിശ്ചയിക്കുന്നു, ഈ സമയത്ത് ഒരു പുതിയ കണക്ഷൻ സ്ഥാപിക്കേണ്ടതുണ്ട്. അദ്ധ്യായം 21 വിഭാഗത്തിൽ, ക്ലയൻ്റ് അയച്ച മൂന്നാമത്തെ പാക്കറ്റ് ഏകദേശം 16:25:29-ന്, അതായത്, അയച്ച് 48 സെക്കൻഡുകൾക്ക് ശേഷം അവസാനിക്കുമെന്ന് നമുക്ക് കാണാം, എന്നാൽ ക്ലയൻ്റ് 75 സെക്കൻഡിന് ശേഷം ശ്രമിക്കുന്നത് നിർത്തില്ല. .

ആദ്യമായി പുറത്ത്

ചിത്രം 18.6-ൽ, ആദ്യ ടൈംഔട്ട്, 5.8 സെക്കൻഡ്, 6 സെക്കൻഡിന് അടുത്താണ്, എന്നാൽ 6 സെക്കൻഡ് അല്ല, രണ്ടാമത്തെ ടൈംഔട്ട് ഏതാണ്ട് കൃത്യമായി 24 സെക്കൻഡ് ആണെന്ന് ശ്രദ്ധിക്കുക. സമാനമായ പത്ത് ടെസ്റ്റുകൾ കൂടി നടത്തി, അവയിൽ ഓരോന്നിലും ആദ്യ ടൈംഔട്ടിൻ്റെ മൂല്യം 5.59 സെക്കൻഡ് മുതൽ 5.93 സെക്കൻഡ് വരെയാണ്. എന്നിരുന്നാലും, രണ്ടാമത്തെ ടൈംഔട്ട് എല്ലായ്പ്പോഴും 24.00 സെക്കൻഡ് ആയിരുന്നു.

ബിഎസ്ഡി ടിസിപി നടപ്പാക്കലുകൾ ഓരോ 500 മില്ലിസെക്കൻഡിലും ഒരു ടൈമർ ആരംഭിക്കുന്നതിനാലാണിത്. ഈ 500 മില്ലിസെക്കൻഡ് ടൈമർ വിവിധ TCP ടൈംഔട്ടുകൾക്കായി ഉപയോഗിക്കുന്നു, ഇവയെല്ലാം ഇനിപ്പറയുന്ന അധ്യായങ്ങളിൽ വിവരിക്കും. നമ്മൾ ടെൽനെറ്റ് കമാൻഡ് നൽകുമ്പോൾ, പ്രാരംഭ 6 സെക്കൻഡ് ടൈമർ സജ്ജീകരിച്ചിരിക്കുന്നു (12 ക്ലോക്ക് ടിക്കുകൾ), എന്നിരുന്നാലും ഇത് 5.5 മുതൽ 6 സെക്കൻഡുകൾക്കിടയിൽ എവിടെയും കാലഹരണപ്പെടും. ഇത് എങ്ങനെ സംഭവിക്കുന്നുവെന്ന് ചിത്രം 18.7 കാണിക്കുന്നു.

ചിത്രം 18.7 500-ms TCP ടൈമർ.

ടൈമർ 12 ടിക്കുകളായി സജ്ജീകരിച്ചിരിക്കുന്നതിനാൽ, അത് സജ്ജീകരിച്ചതിന് ശേഷം 0 മുതൽ 500 മില്ലിസെക്കൻഡ് വരെ ആദ്യ ടൈമർ കുറയുന്നു. ഈ സമയം മുതൽ, ടൈമർ ഏകദേശം ഓരോ 500 മില്ലിസെക്കൻഡിലും കുറയുന്നു, എന്നാൽ ആദ്യ കാലയളവ് വ്യത്യാസപ്പെടാം. (ഞങ്ങൾ "ഏകദേശം" എന്ന വാക്ക് ഉപയോഗിക്കുന്നു, കാരണം ഓരോ 500 മില്ലിസെക്കൻഡിലും TCP നിയന്ത്രണം സ്വീകരിക്കുന്ന സമയം ഏകദേശമാണ്, കാരണം മറ്റൊരു തടസ്സം കടന്നുപോകുകയും കേർണൽ കൈകാര്യം ചെയ്യുകയും ചെയ്യാം.)

ചിത്രം 18.7-ൽ 0 എന്ന് ലേബൽ ചെയ്‌തിരിക്കുന്ന ടിക്കിൽ ഈ 6-സെക്കൻഡ് ടൈമർ കാലഹരണപ്പെടുമ്പോൾ, ടൈമർ 24 സെക്കൻഡിലേക്ക് (48 ടിക്കുകൾ) പുനഃസജ്ജമാക്കും. ഈ അടുത്ത ടൈമർ 24 സെക്കൻഡ് ആയിരിക്കും, കാരണം ഇത് 500 മില്ലിസെക്കൻഡ് ടിസിപി ടൈമറിനെ കേർണൽ വിളിച്ച സമയത്താണ് സജ്ജീകരിച്ചിരിക്കുന്നത്, അല്ലാതെ ഉപയോക്താവല്ല.

സേവന തരം ഫീൽഡ്

ചിത്രം 18.6-ൽ നമ്മൾ എക്സ്പ്രഷൻ കാണുന്നു. ഇത് ഒരു IP ഡാറ്റാഗ്രാമിലെ () തരം-ഓഫ്-സർവീസ് ഫീൽഡാണ് (TOS - തരം-ഓഫ്-സർവീസ്). BSD/386-ലെ ടെൽനെറ്റ് ക്ലയൻ്റ് ഈ ഫീൽഡ് ഏറ്റവും കുറഞ്ഞ ലേറ്റൻസി നേടുന്നതിന് സജ്ജമാക്കുന്നു.

പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം

പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം (MSS) ആണ് ടിസിപി റിമോട്ട് എൻഡിലേക്ക് അയയ്‌ക്കുന്ന ഏറ്റവും വലിയ ഡാറ്റ. ഒരു കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ, ഓരോ വശത്തും അതിൻ്റെ MSS പരസ്യം ചെയ്യാൻ കഴിയും. ഞങ്ങൾ കണ്ട മൂല്യങ്ങൾ 1024 ആയിരുന്നു. തത്ഫലമായുണ്ടാകുന്ന ഐപി ഡാറ്റാഗ്രാം സാധാരണയായി 40 ബൈറ്റുകൾ വലുതാണ്: ടിസിപി ഹെഡറിനായി 20 ബൈറ്റുകളും ഐപി ഹെഡറിനായി 20 ബൈറ്റുകളും അനുവദിച്ചിരിക്കുന്നു.

ഈ ഓപ്ഷൻ "എഗ്രിമെൻ്റ് പ്രകാരം" ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ചില പ്രസിദ്ധീകരണങ്ങൾ പറയുന്നു. വാസ്തവത്തിൽ, ഈ കേസിൽ കരാർ ഉപയോഗിക്കുന്നില്ല. ഒരു കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ, ഓരോ വശവും അത് സ്വീകരിക്കാൻ ഉദ്ദേശിക്കുന്ന MSS പരസ്യം ചെയ്യുന്നു. (SYN സെഗ്‌മെൻ്റിൽ മാത്രമേ MSS ഓപ്ഷൻ ഉപയോഗിക്കാൻ കഴിയൂ.) ഒരു വശം മറുവശത്ത് നിന്ന് MSS ഓപ്ഷൻ സ്വീകരിക്കുന്നില്ലെങ്കിൽ, 536 ബൈറ്റുകളുടെ ഡിഫോൾട്ട് വലുപ്പം ഉപയോഗിക്കുന്നു. (ഈ സാഹചര്യത്തിൽ, 20-ബൈറ്റ് IP ഹെഡറും 20-ബൈറ്റ് TCP ഹെഡറും ഉപയോഗിച്ച്, IP ഡാറ്റാഗ്രാം വലുപ്പം 576 ബൈറ്റുകൾ ആയിരിക്കും.)

പൊതുവേ, വിഘടനം സംഭവിക്കാത്തിടത്തോളം കാലം കൂടുതൽ എംഎസ്എസ് നല്ലതാണ്. (ഇത് എല്ലായ്പ്പോഴും ശരിയല്ല. ഇത് പരിശോധിക്കുകയും സ്ഥിരീകരിക്കുകയും ചെയ്യുക.) വലിയ വലിപ്പങ്ങൾഓരോ സെഗ്‌മെൻ്റിലും കൂടുതൽ ഡാറ്റ അയയ്‌ക്കാൻ സെഗ്‌മെൻ്റുകൾ അനുവദിക്കുന്നു, ഇത് IP, TCP തലക്കെട്ടുകളുടെ ആപേക്ഷിക ചെലവ് കുറയ്ക്കുന്നു. TCP ഒരു SYN സെഗ്‌മെൻ്റ് അയയ്ക്കുമ്പോൾ, അല്ലെങ്കിൽ എപ്പോൾ പ്രാദേശിക ആപ്ലിക്കേഷൻഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ ആഗ്രഹിക്കുന്നു, അല്ലെങ്കിൽ ഒരു റിമോട്ട് ഹോസ്റ്റിൽ നിന്ന് ഒരു കണക്ഷൻ അഭ്യർത്ഥന ലഭിക്കുമ്പോൾ, നിശ്ചിത TCP, IP തലക്കെട്ടുകളുടെ വലിപ്പം മൈനസ് ഔട്ട്ഗോയിംഗ് ഇൻ്റർഫേസിൻ്റെ MTU-ന് തുല്യമായി MSS മൂല്യം സജ്ജമാക്കാൻ കഴിയും. ഇഥർനെറ്റിന്, MSS 1460 ബൈറ്റുകൾ വരെ ആകാം. IEEE 802.3 എൻക്യാപ്‌സുലേഷൻ ഉപയോഗിക്കുമ്പോൾ (അധ്യായം 2, വിഭാഗം), MSS 1452 ബൈറ്റുകൾ വരെ ആകാം.

ഈ അധ്യായത്തിൽ നമ്മൾ കാണുന്ന 1024 ൻ്റെ മൂല്യം BSD/386, SVR4 എന്നിവ ഉൾപ്പെടുന്ന കണക്ഷനുകളുമായി പൊരുത്തപ്പെടുന്നു, കാരണം മിക്ക BSD നടപ്പിലാക്കലുകൾക്കും MSS 512-ൻ്റെ ഗുണിതം ആവശ്യമാണ്. SunOS 4.1.3, Solaris 2.2, AIX 3.2 തുടങ്ങിയ മറ്റ് സിസ്റ്റങ്ങൾ. 2, ഇരുവശവും ഒരേ ഇഥർനെറ്റിൽ ആയിരിക്കുമ്പോൾ 1460-ൻ്റെ ഒരു MSS പ്രഖ്യാപിക്കുക. [മൊഗൽ 1993] ൽ നൽകിയിരിക്കുന്ന കണക്കുകൂട്ടലുകൾ കാണിക്കുന്നത് 1460-ൻ്റെ ഒരു എംഎസ്എസ് 1024-ൻ്റെ എംഎസ്എസിനേക്കാൾ മികച്ച ഇഥർനെറ്റ് പ്രകടനം നൽകുന്നു എന്നാണ്.

ലക്ഷ്യസ്ഥാന ഐപി വിലാസം "നോൺ-ലോക്കൽ" ആണെങ്കിൽ, MSS സാധാരണയായി ഡിഫോൾട്ടായി സജ്ജീകരിക്കും - 536. അന്തിമ ലക്ഷ്യസ്ഥാനം ലോക്കൽ ആണോ നോൺ ലോക്കൽ ആണോ എന്ന് ഇനിപ്പറയുന്ന രീതിയിൽ നിർണ്ണയിക്കാനാകും. അയച്ചയാളുടെ അതേ നെറ്റ്‌വർക്ക് ഐഡിയും അതേ സബ്‌നെറ്റ് മാസ്‌കും ഉള്ള ഐപി വിലാസമുള്ള ഒരു ലക്ഷ്യസ്ഥാനം പ്രാദേശികമാണ്; നെറ്റ്‌വർക്ക് ഐഡിയിൽ നിന്ന് തികച്ചും വ്യത്യസ്തമായ ഐപി വിലാസം പ്രാദേശികമല്ലാത്ത ഒരു ലക്ഷ്യസ്ഥാനം; ഒരേ നെറ്റ്‌വർക്ക് ഐഡിയുള്ള ഒരു ലക്ഷ്യസ്ഥാനം, എന്നാൽ മറ്റൊരു സബ്‌നെറ്റ് മാസ്‌ക് ഉള്ളത്, ഒന്നുകിൽ ലോക്കൽ അല്ലെങ്കിൽ നോൺ-ലോക്കൽ ആകാം. മിക്ക നടപ്പിലാക്കലുകളും ഒരു കോൺഫിഗറേഷൻ ഓപ്‌ഷൻ ( കൂടാതെ ) നൽകുന്നു, അത് ഏതൊക്കെ സബ്‌നെറ്റുകൾ ലോക്കൽ ആണെന്നും നോൺ ലോക്കൽ ആണെന്നും വ്യക്തമാക്കാൻ സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്ററെ അനുവദിക്കുന്നു. ഈ ഓപ്‌ഷൻ സജ്ജീകരിക്കുന്നത് പരമാവധി പരസ്യപ്പെടുത്തിയ MSS നിർണ്ണയിക്കുന്നു (അത് ഔട്ട്‌ഗോയിംഗ് ഇൻ്റർഫേസിൻ്റെ MTU പോലെ വലുതായിരിക്കും), അല്ലാത്തപക്ഷം 536 ൻ്റെ സ്ഥിര മൂല്യം ഉപയോഗിക്കുന്നു.

റിമോട്ട് പാർട്ടി അയയ്‌ക്കുന്ന ഡാറ്റാഗ്രാമുകളുടെ വലുപ്പം സജ്ജീകരിക്കാൻ MSS ഹോസ്റ്റിനെ അനുവദിക്കുന്നു. ഹോസ്റ്റ് അത് അയയ്ക്കുന്ന ഡാറ്റാഗ്രാമുകളുടെ വലുപ്പവും പരിമിതപ്പെടുത്തുന്നു എന്ന വസ്തുത നിങ്ങൾ കണക്കിലെടുക്കുകയാണെങ്കിൽ, ഹോസ്റ്റ് ഒരു ചെറിയ MTU ഉള്ള ഒരു നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്യുമ്പോൾ ഇത് വിഘടനം ഒഴിവാക്കുന്നു.

296 MTU ഉള്ള ഒരു SLIP ചാനൽ ഉള്ള ഞങ്ങളുടെ ഹോസ്റ്റ് സ്ലിപ്പ് ഒരു bsdi റൂട്ടറുമായി ബന്ധിപ്പിച്ചിരിക്കുന്നതായി സങ്കൽപ്പിക്കുക. ചിത്രം 18.8 ഈ സിസ്റ്റങ്ങളെയും ആതിഥേയ സൂര്യനെയും കാണിക്കുന്നു.

ചിത്രം 18.8 സൂര്യനിൽ നിന്നും സ്ലിപ്പിലേക്കുള്ള TCP കണക്ഷൻ, MSS മൂല്യങ്ങൾ.

ഞങ്ങൾ സൂര്യനിൽ നിന്ന് സ്ലിപ്പിലേക്ക് ഒരു TCP കണക്ഷൻ സ്ഥാപിക്കുകയും tcpdump ഉപയോഗിച്ച് സെഗ്‌മെൻ്റുകൾ സ്കാൻ ചെയ്യുകയും ചെയ്തു. ചിത്രം 18.9 കണക്ഷൻ സ്ഥാപനം മാത്രം കാണിക്കുന്നു (വിൻഡോ വലുപ്പ പ്രഖ്യാപനങ്ങൾ നീക്കംചെയ്തു).

1 0.0 sun.1093 > slip.discard: S 517312000:517312000(0)

2 0.10 (0.00) slip.discard > sun.1093: S 509556225:509556225(0)
എക്ക് 517312001
3 0.10 (0.00) സൂര്യൻ.1093 > slip.discard: . എക്ക് 1

ചിത്രം 18.9 സൂര്യനിൽ നിന്ന് സ്ലിപ്പിലേക്ക് ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നതിനുള്ള Tcpdump ഔട്ട്പുട്ട്.

ഇവിടെ ശ്രദ്ധിക്കേണ്ട പ്രധാന കാര്യം, സൂര്യന് 256 ബൈറ്റുകളേക്കാൾ വലിയ ഡാറ്റാ ചങ്കുള്ള ഒരു സെഗ്‌മെൻ്റ് അയയ്‌ക്കാനാവില്ല, കാരണം അതിന് 256 (ലൈൻ 2) എംഎസ്എസ് ലഭിച്ചു. മാത്രമല്ല, ഔട്ട്‌ഗോയിംഗ് ഇൻ്റർഫേസിൻ്റെ MTU 296 ആണെന്ന് സ്ലിപ്പിന് അറിയാവുന്നതിനാൽ, സൺ 1460-ൻ്റെ MSS പരസ്യം ചെയ്‌താലും, വിഘടനം ഒഴിവാക്കാൻ അതിന് ഒരിക്കലും 256 ബൈറ്റിലധികം ഡാറ്റ അയയ്ക്കാൻ കഴിയില്ല. എന്നിരുന്നാലും, റിമോട്ട് പാർട്ടി പരസ്യപ്പെടുത്തിയ MSS-നേക്കാൾ കുറച്ച് ഡാറ്റയാണ് സിസ്റ്റം അയച്ചത്.

576-ൽ താഴെയുള്ള MTU ഉള്ള ഒരു നെറ്റ്‌വർക്കിലേക്ക് ഹോസ്റ്റ് നേരിട്ട് കണക്‌റ്റ് ചെയ്‌തിട്ടുണ്ടെങ്കിൽ മാത്രമേ ഈ രീതിയിൽ ഫ്രാഗ്‌മെൻ്റേഷൻ ഒഴിവാക്കാനാകൂ. രണ്ട് ഹോസ്റ്റുകളും ഇഥർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌ത് 536-ൻ്റെ MSS പരസ്യം ചെയ്‌തിട്ടുണ്ടെങ്കിൽ, എന്നാൽ ഇൻ്റർമീഡിയറ്റ് നെറ്റ്‌വർക്കിന് 296 MTU ഉണ്ട്, വിഘടനം സംഭവിക്കും. ഇത് ഒഴിവാക്കാനുള്ള ഏക മാർഗം ട്രാൻസ്പോർട്ട് MTU കണ്ടെത്തൽ സംവിധാനം (അധ്യായം 24, വിഭാഗം) ഉപയോഗിക്കുക എന്നതാണ്.

പകുതി സ്വകാര്യ ടിസിപി

ഒരു കക്ഷിക്ക് ഒരു കണക്ഷനിലേക്ക് ഡാറ്റ കൈമാറ്റം ചെയ്യുന്നത് നിർത്താനുള്ള കഴിവ് ടിസിപി നൽകുന്നു, എന്നാൽ മറ്റേ കക്ഷിയിൽ നിന്ന് ഡാറ്റ സ്വീകരിക്കുന്നു. ഇതിനെ ഹാഫ്-ക്ലോസ്ഡ് ടിസിപി എന്ന് വിളിക്കുന്നു. ഞങ്ങൾ നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, ഈ സവിശേഷത പ്രയോജനപ്പെടുത്താൻ പല ആപ്ലിക്കേഷനുകൾക്കും കഴിയില്ല.

ഈ പ്രോഗ്രാമിംഗ് ഇൻ്റർഫേസ് ഫീച്ചർ ഉപയോഗിക്കുന്നതിന്, "ഞാൻ ഡാറ്റ കൈമാറ്റം ചെയ്തുകഴിഞ്ഞു, അതിനാൽ ഞാൻ ഒരു എൻഡ്-ഓഫ്-ഫയൽ ഇൻഡിക്കേറ്റർ (FIN) റിമോട്ട് എൻഡിലേക്ക് അയയ്‌ക്കുന്നു, പക്ഷേ എനിക്ക് ഇപ്പോഴും സ്വീകരിക്കണം" എന്ന് പറയാൻ നിങ്ങൾ അപ്ലിക്കേഷനെ അനുവദിക്കേണ്ടതുണ്ട് അതിനുമുമ്പ് റിമോട്ട് എൻഡിൽ നിന്നുള്ള ഡാറ്റ." അത് എനിക്ക് ഒരു എൻഡ്-ഓഫ്-ഫയൽ ചിഹ്നം (FIN) അയയ്ക്കുന്നത് വരെ."

ക്ലോസ് ചെയ്യുന്നതിനുപകരം 1 എന്ന രണ്ടാമത്തെ ആർഗ്യുമെൻ്റ് ഉപയോഗിച്ച് ആപ്ലിക്കേഷൻ ഷട്ട്ഡൗൺ വിളിക്കുകയാണെങ്കിൽ സോക്കറ്റ്സ് API സെമി-ക്ലോസ്ഡ് മോഡിനെ പിന്തുണയ്ക്കുന്നു. എന്നിരുന്നാലും, മിക്ക ആപ്ലിക്കേഷനുകളും ക്ലോസ് എന്ന് വിളിച്ച് രണ്ട് ദിശകളിലുമുള്ള കണക്ഷനുകൾ അടയ്ക്കുന്നു.

ചിത്രം 18.10 സെമി-ക്ലോസ്ഡ് ടിസിപിയുടെ ഒരു സാധാരണ സാഹചര്യം കാണിക്കുന്നു. ഞങ്ങൾ ക്ലയൻ്റിനെ ഇടതുവശത്ത് കാണിച്ചു, അവൻ സെമി-ക്ലോസ്ഡ് മോഡ് ആരംഭിക്കുന്നു, എന്നിരുന്നാലും, ഇരുവശത്തും ഇത് ചെയ്യാൻ കഴിയും. ആദ്യത്തെ രണ്ട് സെഗ്‌മെൻ്റുകൾ സമാനമാണ്: ഇനീഷ്യേറ്ററിൽ നിന്നുള്ള FIN, തുടർന്ന് റിസീവറിൽ നിന്നുള്ള ACK, FIN. എന്നിരുന്നാലും, ചിത്രം 18.4-ൽ ഉള്ളതിൽ നിന്ന് വ്യത്യസ്‌തമായിരിക്കും, കാരണം പകുതി-ക്ലോസ് ഓർഡർ ലഭിച്ച കക്ഷി ഇപ്പോഴും ഡാറ്റ അയയ്‌ക്കുന്നുണ്ടാകാം. ഞങ്ങൾ ഒരു ഡാറ്റ സെഗ്‌മെൻ്റിന് ശേഷം ഒരു ACK മാത്രമേ കാണിച്ചിട്ടുള്ളൂ, എന്നാൽ ഈ സാഹചര്യത്തിൽ എത്ര ഡാറ്റാ സെഗ്‌മെൻ്റുകളും അയയ്‌ക്കാൻ കഴിയും. (ഡാറ്റാ സെഗ്‌മെൻ്റുകളുടെയും അക്‌നോളജ്‌മെൻ്റുകളുടെയും എക്സ്ചേഞ്ച് കൂടുതൽ വിശദമായി ഞങ്ങൾ കവർ ചെയ്യും.) പകുതി-ക്ലോസ് ഓർഡർ ലഭിച്ച അവസാനം ഒരു ഡാറ്റാ ട്രാൻസ്ഫർ നടത്തുമ്പോൾ, അത് കണക്ഷൻ്റെ ഒരു ഭാഗം ക്ലോസ് ചെയ്യുന്നു, ഇത് ഒരു FIN അയയ്‌ക്കുന്നതിന് കാരണമാകുന്നു. "സെമി-ക്ലോസ്ഡ്" മോഡ് ആരംഭിച്ച ആപ്ലിക്കേഷനിലേക്ക് ഒരു എൻഡ്-ഓഫ്-ഫയൽ ഫ്ലാഗ് വിതരണം ചെയ്തു. രണ്ടാമത്തെ FIN സ്ഥിരീകരിക്കുമ്പോൾ, കണക്ഷൻ പൂർണ്ണമായും അടച്ചതായി കണക്കാക്കുന്നു.

ചിത്രം 18.10 പകുതി അടച്ച മോഡിൽ TCP.

സെമി-ക്ലോസ്ഡ് മോഡ് എന്തിനുവേണ്ടി ഉപയോഗിക്കാം? ഒരു ഉദാഹരണം ആകാം Unix കമാൻഡ് rsh(1), മറ്റൊരു സിസ്റ്റത്തിൽ കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്യുന്നു. ടീം

സൂര്യൻ % rsh bsdi അടുക്കുക< datafile

bsdi ഹോസ്റ്റിൽ സോർട്ട് കമാൻഡ് പ്രവർത്തിപ്പിക്കും, rsh കമാൻഡിൻ്റെ സ്റ്റാൻഡേർഡ് ഇൻപുട്ട് ഡാറ്റ ഫയൽ എന്ന ഫയലിൽ നിന്ന് റീഡ് ചെയ്യും. rsh കമാൻഡ് തനിക്കും റിമോട്ട് ഹോസ്റ്റിൽ എക്സിക്യൂട്ട് ചെയ്യുന്ന പ്രോഗ്രാമിനും ഇടയിൽ TCP കണക്ഷനുകൾ സൃഷ്ടിക്കുന്നു. rsh പിന്നീട് വളരെ ലളിതമായി പ്രവർത്തിക്കുന്നു: കമാൻഡ് കണക്ഷനിലേക്ക് സ്റ്റാൻഡേർഡ് ഇൻപുട്ട് (ഡാറ്റഫയൽ) പകർത്തുകയും കണക്ഷനിൽ നിന്ന് സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ടിലേക്ക് (ഞങ്ങളുടെ ടെർമിനൽ) പകർത്തുകയും ചെയ്യുന്നു. ഇത് എങ്ങനെ സംഭവിക്കുന്നുവെന്ന് ചിത്രം 18.11 കാണിക്കുന്നു. (ടിസിപി കണക്ഷൻ ഫുൾ ഡ്യുപ്ലെക്സാണെന്ന് ഞങ്ങൾ ഓർക്കുന്നു.)

ചിത്രം 18.11 കമാൻഡ്: rsh bsdi അടുക്കുക< datafile.

റിമോട്ട് ഹോസ്റ്റ് bsdi-യിൽ, rshd സെർവർ അതിൻ്റെ സ്റ്റാൻഡേർഡ് ഇൻപുട്ടും സ്റ്റാൻഡേർഡ് ഔട്ട്‌പുട്ടും TCP കണക്ഷനിലേക്ക് നയിക്കുന്ന തരത്തിൽ സോർട്ട് പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നു. അദ്ധ്യായം 14 ഇവിടെ ഉൾപ്പെട്ടിരിക്കുന്ന Unix പ്രക്രിയയുടെ ഘടനയെക്കുറിച്ച് വിശദമായ വിവരണം നൽകുന്നു, എന്നാൽ TCP കണക്ഷനും TCP സെമി-ക്ലോസ്ഡ് മോഡും എങ്ങനെ ഉപയോഗിക്കുന്നു എന്നതിൽ ഞങ്ങൾക്ക് താൽപ്പര്യമുണ്ട്.

സോർട്ട് പ്രോഗ്രാമിന് അതിൻ്റെ എല്ലാ ഇൻപുട്ടും റീഡ് ചെയ്യുന്നതുവരെ ഔട്ട്പുട്ട് സൃഷ്ടിക്കാൻ തുടങ്ങാൻ കഴിയില്ല. rsh ക്ലയൻ്റിൽ നിന്ന് സോർട്ട് സെർവറിലേക്കുള്ള കണക്ഷനിലൂടെ വരുന്ന എല്ലാ റോ ഡാറ്റയും അടുക്കേണ്ട ഫയലിലേക്ക് അയയ്ക്കുന്നു. ഇൻപുട്ടിൽ (ഡാറ്റഫിൽ) ഫയലിൻ്റെ അവസാന അടയാളം എത്തുമ്പോൾ, rsh ക്ലയൻ്റ് TCP കണക്ഷൻ്റെ പകുതി-ക്ലോസ് ചെയ്യുന്നു. സോർട്ട് സെർവർ അതിൻ്റെ ഫയലിൻ്റെ അവസാന അടയാളം എടുക്കുന്നു സ്റ്റാൻഡേർഡ് ഇൻപുട്ട്(TCP കണക്ഷൻ), ഫയൽ അടുക്കുകയും ഫലം അതിൻ്റെ സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ടിലേക്ക് (TCP കണക്ഷൻ) എഴുതുകയും ചെയ്യുന്നു. rsh ക്ലയൻ്റ് അതിൻ്റെ അവസാനം TCP കണക്ഷൻ വായിക്കുന്നത് തുടരുന്നു, ക്രമീകരിച്ച ഫയൽ അതിൻ്റെ സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ടിലേക്ക് പകർത്തുന്നു.

ഹാഫ്-ക്ലോസ്ഡ് മോഡ് ഉപയോഗിക്കാതെ, ഡാറ്റ അയയ്‌ക്കുന്നത് പൂർത്തിയാക്കിയെന്ന് സെർവറിനോട് പറയാൻ ക്ലയൻ്റിനെ അനുവദിക്കുന്ന ചില അധിക സാങ്കേതികത ആവശ്യമാണ്, എന്നാൽ സെർവറിൽ നിന്ന് ഡാറ്റ സ്വീകരിക്കാൻ ക്ലയൻ്റിന് ഇപ്പോഴും അനുമതിയുണ്ട്. പകരമായി, രണ്ട് കണക്ഷനുകൾ ഉപയോഗിക്കേണ്ടതുണ്ട്, എന്നാൽ സെമി-ക്ലോസ്ഡ് മോഡ് തിരഞ്ഞെടുക്കുന്നതാണ്.

TCP ട്രാൻസ്മിഷൻ സ്റ്റേറ്റ് ഡയഗ്രം

ഒരു ടിസിപി കണക്ഷൻ സ്ഥാപിക്കുന്നതിനും തകർക്കുന്നതിനുമുള്ള നിരവധി നിയമങ്ങൾ ഞങ്ങൾ വിവരിച്ചിട്ടുണ്ട്. ഈ നിയമങ്ങൾ ഒരു ട്രാൻസ്മിഷൻ സ്റ്റേറ്റ് ഡയഗ്രാമിലേക്ക് സമാഹരിച്ചിരിക്കുന്നു, അത് ചിത്രം 18.12 ൽ കാണിച്ചിരിക്കുന്നു.

ഈ ഡയഗ്രം ഒരു സ്റ്റാൻഡേർഡ് സ്റ്റേറ്റ് ഡയഗ്രം ആണെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. സാധാരണ ക്ലയൻ്റ് കൈമാറ്റം ഞങ്ങൾ സോളിഡ് ഉപയോഗിച്ച് അടയാളപ്പെടുത്തി ബോൾഡ് അമ്പുകൾ, കൂടാതെ ഡോട്ട് ഇട്ട ബോൾഡ് അമ്പടയാളങ്ങളുള്ള സാധാരണ സെർവർ കൈമാറ്റം.

എസ്റ്റാബ്ലിഷ്ഡ് സ്റ്റേറ്റിലേക്ക് നയിക്കുന്ന രണ്ട് കൈമാറ്റങ്ങൾ കണക്ഷൻ തുറക്കുന്നതിനോട് യോജിക്കുന്നു, കൂടാതെ എസ്റ്റാബ്ലിഷ്ഡ് സ്റ്റേറ്റിൽ നിന്ന് നയിക്കുന്ന രണ്ട് കൈമാറ്റങ്ങൾ കണക്ഷൻ അവസാനിപ്പിക്കുന്നതിനോട് യോജിക്കുന്നു. രണ്ട് കക്ഷികൾക്കിടയിൽ രണ്ട് ദിശകളിലേക്കും ഡാറ്റ കൈമാറുന്നത് സാധ്യമാകുന്ന നിമിഷത്തിലാണ് സ്ഥാപിതമായ അവസ്ഥ സംഭവിക്കുന്നത്. ഈ അവസ്ഥയിൽ എന്താണ് സംഭവിക്കുന്നതെന്ന് ഇനിപ്പറയുന്ന അധ്യായങ്ങൾ വിവരിക്കും.

ഒരു ഡോട്ട് ഇട്ട ബോക്‌സിനുള്ളിൽ ഡയഗ്രാമിൻ്റെ താഴെ ഇടതുവശത്തുള്ള നാല് ബോക്‌സുകൾ ഞങ്ങൾ സംയോജിപ്പിച്ച് അവയെ "സജീവ ക്ലോസ്" എന്ന് ലേബൽ ചെയ്തു. മറ്റ് രണ്ട് സ്‌ക്വയറുകൾ (CLOSE_WAIT, LAST_ACK) ഒരു ഡോട്ട് ഇട്ട ഫ്രെയിമിൽ ചേരുകയും "പാസീവ് ക്ലോസ്" എന്ന് ലേബൽ ചെയ്യുകയും ചെയ്യുന്നു.

ഈ ചിത്രത്തിലെ 11 സ്റ്റേറ്റുകളുടെ പേരുകൾ (CLOSED, LISTEN, SYN_SENT, അങ്ങനെ പലതും) netstat കമാൻഡ് മുഖേനയുള്ള സംസ്ഥാനങ്ങളുടെ ഔട്ട്‌പുട്ടുമായി പൊരുത്തപ്പെടുന്നതിന് തിരഞ്ഞെടുത്തിരിക്കുന്നു. നെറ്റ്സ്റ്റാറ്റിൻ്റെ പേരുകൾ, RFC 793-ൽ വിവരിച്ചിരിക്കുന്ന പേരുകൾക്ക് ഏതാണ്ട് സമാനമാണ്. ക്ലോസ്ഡ് അവസ്ഥ യഥാർത്ഥത്തിൽ ഒരു സംസ്ഥാനമല്ല, പക്ഷേ ഇത് ഡയഗ്രാമിൻ്റെ ആരംഭ-അവസാന പോയിൻ്റാണ്.

LISTEN എന്നതിൽ നിന്ന് SYN_SENT എന്നതിലേക്ക് അവസ്ഥ മാറ്റുന്നത് സൈദ്ധാന്തികമായി സാധ്യമാണ്, പക്ഷേ ബെർക്ക്‌ലി നടപ്പിലാക്കലുകളിൽ പിന്തുണയില്ല.

കൂടാതെ SYN_RCVD-ൽ നിന്ന് LISTEN എന്നതിലേക്കുള്ള ഒരു സംസ്ഥാന മാറ്റം, LISTEN അവസ്ഥയിൽ നിന്ന് SYN_RCVD നൽകിയാൽ മാത്രമേ സാധ്യമാകൂ (ഇതൊരു സാധാരണ സാഹചര്യമാണ്), അല്ലാതെ SYN_SENT അവസ്ഥയിൽ നിന്നല്ല (ഒരേസമയം തുറക്കുന്നത്). ഇതിനർത്ഥം ഞങ്ങൾ ഒരു നിഷ്ക്രിയ ഓപ്പൺ ചെയ്‌ത് (LISTEN അവസ്ഥയിൽ പ്രവേശിച്ചു), ഒരു SYN ലഭിച്ചു, ഒരു ACK ഉപയോഗിച്ച് ഒരു SYN അയച്ചു (RECEIVED_SYN - SYN_RCVD അവസ്ഥയിൽ പ്രവേശിച്ചു) തുടർന്ന് ഒരു ACK-ന് പകരം റീസെറ്റ് ലഭിച്ചാൽ, എൻഡ്‌പോയിൻ്റ് LISTEN-ലേക്ക് മടങ്ങുന്നു. മറ്റൊരു കണക്ഷൻ അഭ്യർത്ഥന വരുന്നതിനായി കാത്തിരിക്കുന്നു.

ചിത്രം 18.12 TCP സംസ്ഥാന മാറ്റ ഡയഗ്രം.

ഒരു സാധാരണ TCP കണക്ഷൻ സ്ഥാപിക്കലും അവസാനിപ്പിക്കലും ചിത്രം 18.13 കാണിക്കുന്നു. കൂടാതെ വിശദമായി വിവരിച്ചിട്ടുണ്ട് വിവിധ സംസ്ഥാനങ്ങൾ, ഇതിലൂടെ ക്ലയൻ്റും സെർവറും കടന്നുപോകുന്നു.

ചിത്രം 18.13 സാധാരണ കണക്ഷൻ തുറക്കുന്നതിനും അടയ്ക്കുന്നതിനുമുള്ള TCP അവസ്ഥകൾ.

ചിത്രം 18.13-ൽ, ഇടത് വശത്തുള്ള ക്ലയൻ്റ് ഒരു സജീവ ഓപ്പൺ ചെയ്യുന്നുവെന്നും വലതുവശത്തുള്ള സെർവർ ഒരു നിഷ്ക്രിയ ഓപ്പൺ നടത്തുന്നുവെന്നും ഞങ്ങൾ അനുമാനിച്ചു. ക്ലയൻ്റ് സജീവമായ ഒരു ക്ലോസ് ചെയ്യുന്നതായും ഞങ്ങൾ കാണിച്ചു (ഞങ്ങൾ നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, ഏത് പാർട്ടിക്കും ഒരു സജീവ ക്ലോസ് ചെയ്യാൻ കഴിയും).

ഒരു പ്രത്യേക സംസ്ഥാന മാറ്റം സംഭവിക്കുന്നത് എന്തുകൊണ്ടാണെന്ന് മനസിലാക്കാൻ ചിത്രം 18.12-ൽ കാണിച്ചിരിക്കുന്ന സംസ്ഥാന മാറ്റ ഡാറ്റഗ്രാം ഉപയോഗിച്ച് ചിത്രം 18.13-ലെ സംസ്ഥാന മാറ്റങ്ങൾ നിങ്ങൾ കണ്ടെത്തണം.

സ്റ്റാൻഡ്ബൈ സ്റ്റേറ്റ് 2MSL

TIME_WAIT അവസ്ഥയെ ചിലപ്പോൾ 2MSL വെയിറ്റ് സ്റ്റേറ്റ് എന്നും വിളിക്കാറുണ്ട്. ഓരോ നടപ്പാക്കലും പരമാവധി സെഗ്‌മെൻ്റ് ആയുസ്‌ടൈമിനായി ഒരു മൂല്യം തിരഞ്ഞെടുക്കുന്നു (MSL - പരമാവധി സെഗ്‌മെൻ്റ് ലൈഫ് ടൈം). ഈ പരമാവധി സമയംനിരസിക്കപ്പെടുന്നതിന് മുമ്പ് ഒരു സെഗ്‌മെൻ്റ് നെറ്റ്‌വർക്കിൽ എത്രത്തോളം നിലനിൽക്കും. ടിസിപി സെഗ്‌മെൻ്റുകൾ IP ഡാറ്റാഗ്രാമുകളിലൂടെ കൈമാറ്റം ചെയ്യപ്പെടുന്നതിനാൽ ഈ സമയം പരിമിതമാണെന്ന് ഞങ്ങൾക്കറിയാം, കൂടാതെ ഓരോ IP ഡാറ്റാഗ്രാമിനും അതിൻ്റെ ആയുസ്സ് പരിമിതപ്പെടുത്തുന്ന ഒരു TTL ഫീൽഡ് ഉണ്ട്.

RFC 793 [Postel 1981c] MSL 2 മിനിറ്റ് ആയിരിക്കണമെന്ന് വ്യക്തമാക്കുന്നു. IN വ്യത്യസ്ത നടപ്പാക്കലുകൾഈ മൂല്യം 30 സെക്കൻഡ്, 1 മിനിറ്റ് അല്ലെങ്കിൽ 2 മിനിറ്റ് ആണ്.

ഒരു ഐപി ഡാറ്റാഗ്രാമിൻ്റെ ആയുസ്സ് പരിമിതപ്പെടുത്തിയിരിക്കുന്നത് കൈമാറ്റങ്ങളുടെ എണ്ണത്തിനാണ്, ഒരു ടൈമർ വഴിയല്ല.

MSL ഉപയോഗിക്കുമ്പോൾ, ഇനിപ്പറയുന്ന നിയമങ്ങൾ ബാധകമാണ്: TCP ഒരു സജീവ ക്ലോസ് നടത്തുകയും ഒരു അംഗീകാരം (ACK) അടങ്ങുന്ന അവസാന സെഗ്‌മെൻ്റ് അയയ്ക്കുകയും ചെയ്യുമ്പോൾ, രണ്ട് MSL-കൾക്ക് തുല്യമായ കാലയളവിലേക്ക് കണക്ഷൻ TIME_WAIT അവസ്ഥയിൽ നിലനിൽക്കണം. ആദ്യത്തെ ACK നഷ്‌ടപ്പെട്ടാൽ അവസാനത്തെ ACK വീണ്ടും അയയ്‌ക്കാൻ ഇത് TCP-യെ അനുവദിക്കുന്നു (അങ്ങനെയെങ്കിൽ റിമോട്ട് സൈഡ് കാലഹരണപ്പെടുകയും അതിൻ്റെ അവസാന FIN വീണ്ടും സംപ്രേക്ഷണം ചെയ്യുകയും ചെയ്യും).

2MSL കാത്തിരിപ്പിൻ്റെ മറ്റൊരു ഉദ്ദേശം, ഒരു TCP കണക്ഷൻ 2MSL-നായി കാത്തിരിക്കുമ്പോൾ, ആ കണക്ഷനായി അനുവദിച്ചിരിക്കുന്ന സോക്കറ്റ് ജോഡി (ക്ലയൻ്റ് IP വിലാസം, ക്ലയൻ്റ് പോർട്ട് നമ്പർ, സെർവർ IP വിലാസം, സെർവർ പോർട്ട് നമ്പർ) വീണ്ടും ഉപയോഗിക്കാൻ കഴിയില്ല എന്നതാണ്. 2MSL ടൈംഔട്ട് കാലഹരണപ്പെടുമ്പോൾ മാത്രമേ ഈ കണക്ഷൻ വീണ്ടും ഉപയോഗിക്കാൻ കഴിയൂ.

നിർഭാഗ്യവശാൽ, മിക്ക നടപ്പാക്കലുകളും (ബെർക്ക്‌ലി അവയിലൊന്നാണ്) കൂടുതൽ കർശനമായ ആവശ്യകതകൾക്ക് വിധേയമാണ്. ഡിഫോൾട്ടായി, 2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള ഒരു സോക്കറ്റ് ജോഡിയുടെ ലോക്കൽ പോർട്ട് നമ്പറാണ് ആ പോർട്ട് നമ്പർ ആയിരിക്കുന്നിടത്തോളം കാലം ഒരു ലോക്കൽ പോർട്ട് നമ്പർ വീണ്ടും ഉപയോഗിക്കാൻ കഴിയില്ല. പൊതുവായ ആവശ്യകതകളുടെ ഉദാഹരണങ്ങൾ ഞങ്ങൾ ചുവടെ നോക്കും.

ചില നിർവ്വഹണങ്ങളും API-കളും ഈ പരിമിതികളിൽ പ്രവർത്തിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ടൂളുകൾ നൽകുന്നു. സോക്കറ്റ് API ഉപയോഗിച്ച്, SO_REUSEADDR സോക്കറ്റ് ഓപ്ഷൻ വ്യക്തമാക്കാം. ഇത് വിളിക്കുന്നയാളെ സ്വയം ഒരു നമ്പർ നൽകാൻ അനുവദിക്കുന്നു പ്രാദേശിക തുറമുഖംഇത് 2MSL അവസ്ഥയിലാണ്, എന്നിരുന്നാലും 2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള ഒരു കണക്ഷനിൽ ഈ പോർട്ട് നമ്പർ ഉപയോഗിക്കാൻ TCP നിയമങ്ങൾ അനുവദിക്കുന്നില്ലെന്ന് നമുക്ക് കാണാം.

2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള ഒരു കണക്ഷനിൽ എത്തുന്ന കാലതാമസം നേരിടുന്ന ഓരോ സെഗ്‌മെൻ്റും നിരസിക്കപ്പെടും. 2MSL അവസ്ഥയിൽ ഒരു ജോടി സോക്കറ്റുകൾ ഉപയോഗിച്ച് കണക്ഷൻ നിർവചിച്ചിരിക്കുന്നതിനാൽ, നമുക്ക് ഒരു പുതിയ കണക്ഷൻ സ്ഥാപിക്കുന്നത് വരെ ഈ കണക്ഷൻ പുനരുപയോഗിക്കാനാകില്ല. ഒരു പുതിയ കണക്ഷൻ്റെ ഭാഗമായി വൈകി വരുന്ന പാക്കറ്റുകൾ സ്വീകരിക്കുന്നില്ലെന്ന് ഉറപ്പാക്കാനാണ് ഇത് ചെയ്യുന്നത്. (ഒരു ജോടി സോക്കറ്റുകളാണ് ഒരു കണക്ഷനെ നിർവചിച്ചിരിക്കുന്നത്. ഒരു പുതിയ കണക്ഷനെ ആ കണക്ഷൻ്റെ പുനരുദ്ധാരണം അല്ലെങ്കിൽ പുനരുജ്ജീവനം എന്ന് വിളിക്കുന്നു.)

ഞങ്ങൾ ഇതിനകം ചിത്രം 18.13-ൽ കാണിച്ചിരിക്കുന്നതുപോലെ, ക്ലയൻ്റ് സാധാരണയായി ഒരു സജീവ ക്ലോസ് ചെയ്യുകയും TIME_WAIT മോഡിൽ പ്രവേശിക്കുകയും ചെയ്യുന്നു. സെർവർ സാധാരണയായി ഒരു നിഷ്ക്രിയ ഷട്ട്ഡൗൺ നടത്തുന്നു, TIME_WAIT മോഡിലൂടെ കടന്നുപോകുന്നില്ല. ഞങ്ങൾ ക്ലയൻ്റ് അടച്ചുപൂട്ടുകയും ഉടൻ തന്നെ അത് പുനരാരംഭിക്കുകയും ചെയ്താൽ, ഈ പുതിയ ക്ലയൻ്റിന് അതേ പ്രാദേശിക പോർട്ട് നമ്പർ ഉപയോഗിക്കാൻ കഴിയില്ലെന്ന് നമുക്ക് നിഗമനം ചെയ്യാം. ക്ലയൻ്റുകൾ സാധാരണയായി ചലനാത്മകമായി അസൈൻ ചെയ്‌ത പോർട്ടുകൾ ഉപയോഗിക്കുന്നതിനാൽ ഇത് ഒരു പ്രശ്‌നമല്ല, മാത്രമല്ല നിലവിൽ ഏത് ഡൈനാമിക് ആയി അസൈൻ ചെയ്‌ത പോർട്ടാണ് ഉപയോഗത്തിലുള്ളതെന്ന് ശ്രദ്ധിക്കുന്നില്ല.

എന്നിരുന്നാലും, സെർവറുകൾ മുൻകൂട്ടി ഉപയോഗിക്കുന്നതിനാൽ, സെർവറിൻ്റെ വീക്ഷണകോണിൽ നിന്ന് എല്ലാം വ്യത്യസ്തമാണ് പ്രശസ്തമായ തുറമുഖങ്ങൾ. ഒരു സ്ഥാപിത കണക്ഷനുള്ള ഒരു സെർവർ ഞങ്ങൾ ഷട്ട് ഡൗൺ ചെയ്‌ത് അത് ഉടനടി പുനരാരംഭിക്കാൻ ശ്രമിക്കുകയാണെങ്കിൽ, സെർവറിന് അതിൻ്റെ മുമ്പ് അറിയപ്പെട്ടിരുന്ന പോർട്ട് നമ്പർ കണക്ഷൻ്റെ അവസാന പോയിൻ്റായി ഉപയോഗിക്കാൻ കഴിയില്ല, കാരണം ആ പോർട്ട് നമ്പർ 2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള കണക്ഷൻ്റെ ഭാഗമാണ്. . അതിനാൽ, സെർവർ പുനരാരംഭിക്കുന്നതിന് 1 മുതൽ 4 മിനിറ്റ് വരെ എടുത്തേക്കാം.

സോക്ക് പ്രോഗ്രാം ഉപയോഗിച്ച് നിങ്ങൾക്ക് സമാനമായ ഒരു സാഹചര്യം നിരീക്ഷിക്കാൻ കഴിയും. ഞങ്ങൾ സെർവർ ആരംഭിച്ചു, ക്ലയൻ്റിനെ അതിലേക്ക് കണക്റ്റുചെയ്‌ത് സെർവർ ഓഫാക്കി:

സൂര്യൻ % സോക്ക് -വി -എസ് 6666
(ബിഎസ്ഡിയിൽ ക്ലയൻ്റ് ആരംഭിക്കുക, അത് ഈ പോർട്ടിലേക്ക് ബന്ധിപ്പിക്കും)
140.252.13.33.6666 മുതൽ 140.252.13.35.1081-ൽ കണക്ഷൻ
^? സെർവർ ഷട്ട് ഡൗൺ ചെയ്യുന്നതിന് ഇൻ്ററപ്റ്റ് പ്രതീകം നൽകുക
സൂര്യൻ % സോക്ക് -s 6666അതേ പോർട്ടിൽ സെർവർ ഉടൻ പുനരാരംഭിക്കാൻ ശ്രമിക്കുക
പ്രാദേശിക വിലാസം ബന്ധിപ്പിക്കാൻ കഴിയില്ല: വിലാസം ഇതിനകം ഉപയോഗത്തിലാണ്
സൂര്യൻ % നെറ്റ്സ്റ്റാറ്റ്കണക്ഷൻ നില പരിശോധിക്കാൻ ശ്രമിക്കാം
സജീവ ഇൻ്റർനെറ്റ് കണക്ഷനുകൾ
Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)
tcp 0 0 sun.6666 bsdi.1081 TIME_WAIT
നിരവധി വരികൾ ഇല്ലാതാക്കി

ഞങ്ങൾ സെർവർ പുനരാരംഭിക്കാൻ ശ്രമിക്കുമ്പോൾ, പ്രോഗ്രാം ഇതിനകം തന്നെ ഉപയോഗത്തിലായതിനാൽ (2MSL വെയിറ്റ് സ്റ്റേറ്റിൽ) അതിൻ്റെ മുൻകൂട്ടി അറിയാവുന്ന പോർട്ട് നമ്പർ പിടിച്ചെടുക്കാൻ കഴിയില്ലെന്ന് സൂചിപ്പിക്കുന്ന ഒരു പിശക് സന്ദേശം എറിയുന്നു.

കണക്ഷൻ്റെ അവസ്ഥ നോക്കാനും അത് യഥാർത്ഥത്തിൽ TIME_WAIT നിലയിലാണെന്ന് പരിശോധിക്കാനും ഞങ്ങൾ ഉടൻ തന്നെ netstat പ്രവർത്തിപ്പിക്കുന്നു.

സെർവർ പുനരാരംഭിക്കാൻ ശ്രമിക്കുന്നത് തുടരുകയും അത് വിജയിക്കുന്ന സമയം കാണുകയും ചെയ്താൽ, നമുക്ക് 2MSL-ൻ്റെ മൂല്യം കണക്കാക്കാം. SunOS 4.1.3, SVR4, BSD/386, AIX 3.2.2 എന്നിവയ്‌ക്ക്, സെർവർ പുനരാരംഭിക്കാൻ 1 മിനിറ്റ് എടുക്കും, അതായത് MSL 30 സെക്കൻഡ് ആണ്. സോളാരിസ് 2.2-ൽ, ഈ സെർവർ പുനരാരംഭിക്കാൻ 4 മിനിറ്റ് എടുക്കും, അതായത് MSL 2 മിനിറ്റാണ്.

2MSL നിഷ്‌ക്രിയ മോഡിലുള്ള (സാധാരണയായി ക്ലയൻ്റ് ഇത് ചെയ്യില്ല) കണക്ഷൻ്റെ ഭാഗമായ ഒരു പോർട്ട് പിടിച്ചെടുക്കാൻ ക്ലയൻ്റ് ശ്രമിച്ചാൽ, ക്ലയൻ്റ് സൃഷ്ടിച്ച അതേ പിശക് നമുക്ക് കാണാൻ കഴിയും:

സൂര്യൻ % സോക്ക് -വി ബിഎസ്ഡി എക്കോഎക്കോ സെർവറുമായി ബന്ധിപ്പിക്കുന്ന ക്ലയൻ്റ് ഞങ്ങൾ ആരംഭിക്കുന്നു
140.252.13.33.1162 മുതൽ 140.252.13.35.7 വരെ ബന്ധിപ്പിച്ചിരിക്കുന്നു
നീ അവിടെയുണ്ടോഈ വരി പ്രിൻ്റ് ചെയ്യുക
ഹലോ അത് സെർവറിൽ നിന്ന് പ്രതിധ്വനിക്കുന്നു
^ഡിക്ലയൻ്റ് ഓഫ് ചെയ്യാൻ ഫയലിൻ്റെ അവസാന പ്രതീകം നൽകുക
സൂര്യൻ % സോക്ക് -b1162 bsdi എക്കോ
പ്രാദേശിക വിലാസം ബന്ധിപ്പിക്കാൻ കഴിയില്ല: വിലാസം ഇതിനകം ഉപയോഗത്തിലാണ്

ക്ലയൻ്റ് ആദ്യമായി സമാരംഭിച്ചപ്പോൾ, -v ഓപ്ഷൻ വ്യക്തമാക്കിയിരുന്നു, ഇത് ഏത് പ്രാദേശിക പോർട്ട് നമ്പറാണ് ഉപയോഗിക്കുന്നതെന്ന് കാണാൻ നിങ്ങളെ അനുവദിക്കുന്നു (1162). രണ്ടാമത്തെ തവണ ക്ലയൻ്റ് പ്രവർത്തിപ്പിക്കുമ്പോൾ, -b ഓപ്ഷൻ വ്യക്തമാക്കി, അത് ക്ലയൻ്റിനോട് സ്വയം 1162 എന്ന ലോക്കൽ പോർട്ട് നമ്പർ നൽകണമെന്ന് പറയുന്നു. ഞങ്ങൾ പ്രതീക്ഷിച്ചതുപോലെ, ക്ലയൻ്റിന് ഇത് ചെയ്യാൻ കഴിയില്ല, കാരണം ഈ പോർട്ട് നമ്പർ ഒരു കണക്ഷൻ്റെ ഭാഗമാണ്. 2MSL അവസ്ഥയിൽ.

2MSL വെയിറ്റ് സ്റ്റേറ്റിൻ്റെ ഒരു സവിശേഷത ഇവിടെ പരാമർശിക്കേണ്ടതുണ്ട്, അത് ഫയൽ ട്രാൻസ്ഫർ പ്രോട്ടോക്കോളിനെക്കുറിച്ച് സംസാരിക്കുമ്പോൾ ഞങ്ങൾ മടങ്ങും (FTP - ഫയൽ കൈമാറ്റംപ്രോട്ടോക്കോൾ). നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, ഒരു ജോടി സോക്കറ്റുകൾ (ഒരു പ്രാദേശിക IP വിലാസം, ഒരു പ്രാദേശിക പോർട്ട്, ഒരു വിദൂര IP വിലാസം, ഒരു റിമോട്ട് പോർട്ട് എന്നിവ അടങ്ങുന്ന) 2MSL കാത്തിരിപ്പ് നിലയിലാണ്. എന്നിരുന്നാലും, 2MSL മോഡിലുള്ള (സാധാരണയായി SO_REUSEADDR ഓപ്ഷൻ ഉപയോഗിക്കുന്നു) കണക്ഷൻ്റെ ഭാഗമായ ഒരു പോർട്ട് നമ്പർ പുനരുപയോഗിക്കാൻ പല നടപ്പാക്കലുകളും ഒരു പ്രക്രിയയെ അനുവദിക്കുമ്പോൾ, അതേ സോക്കറ്റ് ജോഡിയിലേക്ക് ഒരു പുതിയ കണക്ഷൻ സൃഷ്ടിക്കാൻ TCP അനുവദിച്ചേക്കില്ല. ഇനിപ്പറയുന്ന പരീക്ഷണം ഉപയോഗിച്ച് ഇത് തെളിയിക്കാനാകും:

സൂര്യൻ % സോക്ക് -വി -എസ് 6666പോർട്ട് 6666-ൽ സെർവർ ലിസണിംഗ് ആരംഭിക്കുന്നു
(ഈ പോർട്ടിലേക്ക് ബന്ധിപ്പിക്കുന്ന bsdi-യിൽ ഞങ്ങൾ ക്ലയൻ്റ് സമാരംഭിക്കുന്നു)
140.252.13.33.6666-ൽ 140.252.13.35.1098 മുതൽ കണക്ഷൻ
^? സെർവർ ഷട്ട് ഡൗൺ ചെയ്യുന്നതിന് ഇൻ്ററപ്റ്റ് പ്രതീകം നൽകുക
സൂര്യൻ % സോക്ക്-b6666 bsdi 1098ഞങ്ങൾ പ്രാദേശിക പോർട്ട് 6666 ഉപയോഗിച്ച് ക്ലയൻ്റ് ആരംഭിക്കുന്നു
പ്രാദേശിക വിലാസം ബന്ധിപ്പിക്കാൻ കഴിയില്ല: വിലാസം ഇതിനകം ഉപയോഗത്തിലാണ്
സൂര്യൻ % സോക്ക് -A -b6666 bsdi 1098വീണ്ടും ശ്രമിക്കുക, ഇത്തവണ -A ഓപ്ഷൻ ഉപയോഗിച്ച്
സജീവമായ തുറന്ന പിശക്: വിലാസം ഇതിനകം ഉപയോഗത്തിലാണ്

ഞങ്ങൾ ആദ്യമായി ഞങ്ങളുടെ സോക്ക് പ്രോഗ്രാം പോർട്ട് 6666-ൽ ഒരു സെർവറായി പ്രവർത്തിപ്പിക്കുകയും bsdi ഹോസ്റ്റിൽ നിന്ന് ഒരു ക്ലയൻ്റ് അതിലേക്ക് കണക്റ്റ് ചെയ്യുകയും ചെയ്തു. ക്ലയൻ്റ് ഡൈനാമിക് ആയി അസൈൻ ചെയ്‌ത പോർട്ട് നമ്പർ 1098 ആണ്. ഞങ്ങൾ സെർവർ ഷട്ട് ഡൗൺ ചെയ്തു, അതിനാൽ അത് ഒരു സജീവ ഷട്ട്ഡൗൺ ചെയ്തു. ഈ സാഹചര്യത്തിൽ, സെർവറിലെ 4 പാരാമീറ്ററുകൾ - 140.252.13.33 (പ്രാദേശിക IP വിലാസം), 6666 (പ്രാദേശിക പോർട്ട് നമ്പർ), 140.252.13.35 (റിമോട്ട് IP വിലാസം), 1098 (റിമോട്ട് പോർട്ട് നമ്പർ) എന്നിവ 2MSL അവസ്ഥയിലേക്ക് വരുന്നു.

ലോക്കൽ പോർട്ട് നമ്പർ 6666 വ്യക്തമാക്കിക്കൊണ്ട് ഞങ്ങൾ രണ്ടാം തവണ ഈ പ്രോഗ്രാം ഒരു ക്ലയൻ്റ് ആയി പ്രവർത്തിപ്പിക്കുമ്പോൾ, അത് പോർട്ട് 1098-ലെ bsdi ഹോസ്റ്റിലേക്ക് കണക്റ്റുചെയ്യാൻ ശ്രമിച്ചു. ലോക്കൽ പോർട്ട് 6666 വീണ്ടും ഉപയോഗിക്കാൻ ഞങ്ങൾ ശ്രമിച്ചപ്പോൾ, ഈ പോർട്ട് 2MSL അവസ്ഥയിലായതിനാൽ ഒരു പിശക് സൃഷ്ടിച്ചു. .

ഈ പിശക് ഒഴിവാക്കാൻ, SO_REUSEADDR ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുന്ന -A ഓപ്ഷൻ ഉപയോഗിച്ച് ഞങ്ങൾ പ്രോഗ്രാം വീണ്ടും പ്രവർത്തിപ്പിച്ചു. ഇത് പ്രോഗ്രാമിനെ സ്വയം 6666 എന്ന പോർട്ട് നമ്പർ നൽകാൻ അനുവദിച്ചു, പക്ഷേ പ്രോഗ്രാം സജീവമായി തുറക്കാൻ ശ്രമിച്ചപ്പോൾ ഒരു പിശക് ലഭിച്ചു. പ്രോഗ്രാമിന് സ്വയം പോർട്ട് നമ്പർ 6666 നൽകാമെങ്കിലും, bsdi ഹോസ്റ്റിൽ പോർട്ട് 1098-ലേക്ക് കണക്ഷനുകൾ സൃഷ്ടിക്കാൻ അതിന് കഴിയില്ല, കാരണം ഈ കണക്ഷൻ നിർവചിക്കുന്ന സോക്കറ്റ് ജോഡി 2MSL വെയിറ്റ് സ്റ്റേറ്റിലാണ്.

മറ്റൊരു ഹോസ്റ്റിൽ നിന്ന് ഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ ശ്രമിച്ചാലോ? ആദ്യം, 2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള ഒരു കണക്ഷൻ്റെ ഭാഗമായതിനാൽ, അതിന് ആവശ്യമായ പോർട്ട് (6666) ആയതിനാൽ, -A ഫ്ലാഗ് ഉപയോഗിച്ച് നമ്മൾ സെർവർ പുനരാരംഭിക്കണം:

സൂര്യൻ % സോക്ക് -എ -എസ് 6666പോർട്ട് 6666-ൽ സെർവർ കേൾക്കുന്നത് ആരംഭിക്കുക

തുടർന്ന്, 2MSL കാത്തിരിപ്പ് നില സൂര്യനിൽ അവസാനിക്കുന്നതിന് മുമ്പ്, ഞങ്ങൾ ക്ലയൻ്റ് bsdi-യിൽ ആരംഭിക്കുന്നു:

bsdi % സോക്ക് -b1098 സൂര്യൻ 6666
140.252.13.35.1098 മുതൽ 140.252.13.33.6666 വരെ ബന്ധിപ്പിച്ചിരിക്കുന്നു

നിർഭാഗ്യവശാൽ, ഇത് പ്രവർത്തിക്കുന്നു! ഇത് TCP സ്പെസിഫിക്കേഷൻ്റെ ഒരു പോരായ്മയാണ്, എന്നാൽ മിക്ക ബെർക്ക്ലി നടപ്പിലാക്കലുകളും പിന്തുണയ്ക്കുന്നു. മുമ്പത്തെ കണക്ഷനിൽ ഉപയോഗിച്ച അവസാന സീക്വൻസ് നമ്പറിനേക്കാൾ പുതിയ സീക്വൻസ് നമ്പർ കൂടുതലാണെങ്കിൽ, TIME_WAIT അവസ്ഥയിലുള്ള ഒരു കണക്ഷനുള്ള പുതിയ കണക്ഷൻ അഭ്യർത്ഥനയുടെ വരവ് ഈ നിർവ്വഹണങ്ങൾ അംഗീകരിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, പുതിയ കണക്ഷനുള്ള ISN, മുമ്പത്തെ കണക്ഷനുള്ള അവസാന സീക്വൻസ് നമ്പറായി സജ്ജീകരിച്ചിരിക്കുന്നു പ്ലസ് 128000. RFC 1185-ലേക്കുള്ള അനുബന്ധം ഈ സാങ്കേതികവിദ്യയുടെ സാധ്യമായ ദോഷങ്ങൾ കാണിക്കുന്നു.

എന്നിരുന്നാലും, സെർവർ അത് സജീവമായി അടച്ചിട്ടില്ലെങ്കിൽ, അതേ കണക്ഷൻ വിജയകരമായി പുനഃസ്ഥാപിക്കുന്നതിന് ഒരേ പോർട്ട് നമ്പറുകൾ വീണ്ടും ഉപയോഗിക്കാൻ ക്ലയൻ്റിനെയും സെർവറിനെയും ഈ നടപ്പിലാക്കൽ സവിശേഷത അനുവദിക്കുന്നു. FTP ചർച്ച ചെയ്യുമ്പോൾ 2MSL വെയിറ്റ് സ്റ്റേറ്റിൻ്റെ മറ്റൊരു ഉദാഹരണം നമുക്ക് കാണാം. ഈ അധ്യായവും നോക്കുക.

ശാന്തമായ സമയ ആശയം

2MSL കാത്തിരിപ്പ് നില, മുമ്പത്തെ കണക്ഷനുകളുടേതായ ലേറ്റ് പാക്കറ്റുകൾക്കെതിരെ പരിരക്ഷ നൽകുന്നു, അതിനാൽ അവ ഒരേ പ്രാദേശികവും വിദൂരവുമായ IP വിലാസങ്ങളും പോർട്ട് നമ്പറുകളും ഉപയോഗിക്കുന്ന ഒരു പുതിയ കണക്ഷൻ്റെ ഭാഗമായി വ്യാഖ്യാനിക്കപ്പെടില്ല. എന്നിരുന്നാലും, 2MSL അവസ്ഥയിൽ കണക്ഷനുള്ള ഹോസ്റ്റ് പരാജയപ്പെട്ടിട്ടില്ലെങ്കിൽ മാത്രമേ ഇത് പ്രവർത്തിക്കൂ.

2MSL സ്റ്റേറ്റിലുള്ള പോർട്ടുകളുള്ള ഒരു ഹോസ്റ്റ് തകരാറിലാവുകയും, MSL സമയത്ത് റീബൂട്ട് ചെയ്യുകയും, പരാജയത്തിന് മുമ്പ് 2MSL നിലയിലായിരുന്ന പ്രാദേശിക പോർട്ടുകൾക്ക് സമാനമായ പ്രാദേശിക, റിമോട്ട് IP വിലാസങ്ങളും പോർട്ട് നമ്പറുകളും ഉപയോഗിച്ച് ഉടൻ തന്നെ പുതിയ കണക്ഷനുകൾ സ്ഥാപിക്കുകയും ചെയ്താലോ? ഈ സാഹചര്യത്തിൽ, പരാജയത്തിന് മുമ്പ് നിലവിലുണ്ടായിരുന്ന ഒരു കണക്ഷനിൽ നിന്നുള്ള ലേറ്റ് സെഗ്‌മെൻ്റുകൾ റീബൂട്ടിന് ശേഷം സൃഷ്‌ടിച്ച ഒരു പുതിയ കണക്ഷനുടേതായി തെറ്റായി വ്യാഖ്യാനിക്കപ്പെടാം. റീബൂട്ടിന് ശേഷം ഏത് പ്രാരംഭ സീക്വൻസ് നമ്പർ തിരഞ്ഞെടുത്താലും ഇത് സംഭവിക്കാം.

അത്തരം അനാവശ്യ സാഹചര്യങ്ങളിൽ നിന്ന് പരിരക്ഷിക്കുന്നതിന്, ബൂട്ട് സമയത്തിന് ശേഷം MSL കാലഹരണപ്പെടുന്നതുവരെ TCP പുതിയ കണക്ഷനുകൾ സൃഷ്ടിക്കരുതെന്ന് RFC 793 വ്യക്തമാക്കുന്നു. ഇതിനെ ശാന്തമായ സമയം എന്ന് വിളിക്കുന്നു.

ചില നടപ്പാക്കലുകളിൽ, ഒരു റീബൂട്ടിന് ശേഷമുള്ള MSL സമയത്തേക്കാൾ കൂടുതൽ സമയം ഹോസ്റ്റുകൾ കാത്തിരിക്കുന്നു.

സംസ്ഥാന WAIT_AND_CONFIRMATION_FIN (FIN_WAIT_2)

FIN_WAIT_2 സംസ്ഥാനത്ത് ഞങ്ങൾ FIN അയയ്ക്കുകയും റിമോട്ട് പാർട്ടി അത് അംഗീകരിക്കുകയും ചെയ്യുന്നു. ഞങ്ങൾ പകുതി അടച്ച കണക്ഷൻ നിലയിലല്ലെങ്കിൽ, റിമോട്ട് എൻഡിലുള്ള ആപ്ലിക്കേഷൻ ഫയലിൻ്റെ എൻഡ്-ഓഫ്-ഫയൽ ലഭിച്ചുവെന്ന് തിരിച്ചറിയുകയും കണക്ഷൻ്റെ വശം അടയ്ക്കുകയും ഞങ്ങൾക്ക് ഒരു FIN അയയ്ക്കുകയും ചെയ്യുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിക്കുന്നു. റിമോട്ട് എൻഡിലെ പ്രോസസ്സ് ഈ അടച്ചുപൂട്ടൽ നടത്തുമ്പോൾ മാത്രമേ ഞങ്ങളുടെ അവസാനം FIN_WAIT_2 മോഡിൽ നിന്ന് TIME_WAIT മോഡിലേക്ക് മാറുകയുള്ളൂ.

ഇതിനർത്ഥം കണക്ഷൻ്റെ ഞങ്ങളുടെ വശം ഈ മോഡിൽ എന്നേക്കും നിലനിൽക്കുമെന്നാണ്. വിദൂര വശം ഇപ്പോഴും CLOSE_WAIT നിലയിലാണ്, ആപ്ലിക്കേഷൻ അടയ്ക്കാൻ തീരുമാനിക്കുന്നത് വരെ ആ അവസ്ഥയിൽ ശാശ്വതമായി തുടരാനാകും.

മിക്ക ബെർക്ക്‌ലി നടപ്പിലാക്കലുകളും ഇനിപ്പറയുന്ന രീതിയിൽ FIN_WAIT_2 സംസ്ഥാനത്ത് ഇത്തരത്തിലുള്ള കാത്തിരിപ്പിനെ തടയുന്നു. ആക്റ്റീവ് ക്ലോസ് ചെയ്ത ആപ്ലിക്കേഷൻ ഹാഫ് ക്ലോസിനു പകരം ഫുൾ ക്ലോസ് ചെയ്താൽ, അത് ഡാറ്റ ലഭിക്കാൻ കാത്തിരിക്കുകയാണെന്ന് സൂചിപ്പിക്കുന്നു, അപ്പോൾ ഒരു ടൈമർ സജ്ജീകരിച്ചിരിക്കുന്നു. ഒരു കണക്ഷൻ 10 മിനിറ്റും 75 സെക്കൻഡും നിഷ്ക്രിയമാണെങ്കിൽ, TCP കണക്ഷൻ ക്ലോസ്ഡ് മോഡിൽ സ്ഥാപിക്കുന്നു. അത്തരമൊരു സ്വഭാവം പ്രോട്ടോക്കോൾ സ്പെസിഫിക്കേഷനുമായി പൊരുത്തപ്പെടുന്നില്ലെന്ന് അഭിപ്രായങ്ങൾ പ്രസ്താവിക്കുന്നു.

സെഗ്‌മെൻ്റുകൾ പുനഃസജ്ജമാക്കുക

TCP തലക്കെട്ടിൽ RST എന്ന് വിളിക്കപ്പെടുന്ന ഒരു ബിറ്റ് ഉണ്ടെന്ന് ഞങ്ങൾ സൂചിപ്പിച്ചു, അത് റീസെറ്റ് എന്നതിൻ്റെ അർത്ഥമാണ്. പൊതുവേ, എത്തിച്ചേരുന്ന സെഗ്‌മെൻ്റുകൾ നിർദ്ദിഷ്ട കണക്ഷനിൽ ഉൾപ്പെടുന്നില്ലെങ്കിൽ ഒരു റീസെറ്റ് സിഗ്നൽ TCP അയയ്‌ക്കും. (ഞങ്ങൾ "റഫറൻസ്ഡ് കണക്ഷൻ" എന്ന പദം ഉപയോഗിക്കുന്നു, അതായത് ഒരു ഡെസ്റ്റിനേഷൻ IP വിലാസവും ലക്ഷ്യസ്ഥാന പോർട്ട് നമ്പറും, ഒരു ഉറവിട IP വിലാസവും ഉറവിട പോർട്ട് നമ്പറും മുഖേന തിരിച്ചറിഞ്ഞ കണക്ഷൻ എന്നാണ് അർത്ഥമാക്കുന്നത്. RFC 793-ൽ ഇതിനെ "സോക്കറ്റ്" എന്ന് വിളിക്കുന്നു.)

നിലവിലില്ലാത്ത ഒരു പോർട്ടിൽ കണക്ഷൻ അഭ്യർത്ഥന

ഒരു കണക്ഷൻ അഭ്യർത്ഥന വരുമ്പോൾ, ഡെസ്റ്റിനേഷൻ പോർട്ടിൽ ശ്രവിക്കുന്ന പ്രക്രിയ ഇല്ലാതിരിക്കുമ്പോഴാണ് റീസെറ്റ് ഉണ്ടാകുന്ന ഏറ്റവും സാധാരണമായ കേസ്. UDP-യുടെ കാര്യത്തിൽ, നമ്മൾ അധ്യായം 6-ൽ കണ്ടതുപോലെ, ഉപയോഗിക്കാത്ത ഡെസ്റ്റിനേഷൻ പോർട്ടിൽ ഒരു ഡാറ്റഗ്രാം വന്നാൽ, ഒരു ICMP പോർട്ട് അൺറീച്ച് ചെയ്യാവുന്ന പിശക് സൃഷ്ടിക്കപ്പെടുന്നു. പകരം TCP റീസെറ്റ് ഉപയോഗിക്കുന്നു.

ഞങ്ങൾ ഒരു ലളിതമായ ഉദാഹരണം നൽകും ടെൽനെറ്റ് ഉപയോഗിക്കുന്നുക്ലയൻ്റ്, ലക്ഷ്യസ്ഥാനത്ത് ഉപയോഗിക്കാത്ത ഒരു പോർട്ട് നമ്പർ വ്യക്തമാക്കുന്നു:

bsdi % ടെൽനെറ്റ് svr4 20000പോർട്ട് 20000 ഉപയോഗിക്കുന്നില്ല
140.252.13.34 ശ്രമിക്കുന്നു...
ടെൽനെറ്റ്: റിമോട്ട് ഹോസ്റ്റിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല: കണക്ഷൻ നിരസിച്ചു

ഒരു പിശക് സന്ദേശം ഉടൻ തന്നെ ടെൽനെറ്റ് ക്ലയൻ്റിലേക്ക് റിപ്പോർട്ട് ചെയ്യുന്നു. ഈ കമാൻഡിന് അനുയോജ്യമായ പാക്കറ്റ് എക്സ്ചേഞ്ച് ചിത്രം 18.14 കാണിക്കുന്നു.

1 0.0 bsdi.1087 > svr4.20000: S 297416193:297416193(0)
4096 വിജയിച്ചു
2 0.003771 (0.0038) svr4.20000 > bsdi.1087: R 0:0 (0) ack 297416194 win 0

ചിത്രം 18.14 നിലവിലില്ലാത്ത ഒരു പോർട്ടിലേക്ക് ഒരു കണക്ഷൻ തുറക്കാൻ ശ്രമിക്കുമ്പോൾ ഒരു റീസെറ്റ് സൃഷ്ടിക്കുന്നു.

ഈ ചിത്രത്തിൽ നമ്മൾ കൂടുതൽ വിശദമായി നോക്കേണ്ട മൂല്യങ്ങൾ റീസെറ്റിലെ സീക്വൻസ് നമ്പർ ഫീൽഡും അക്നോളജ്മെൻ്റ് നമ്പർ ഫീൽഡുമാണ്. വരുന്ന സെഗ്‌മെൻ്റിൽ അക്‌നോളജ്‌മെൻ്റ് (ACK) ബിറ്റ് സജ്ജീകരിച്ചിട്ടില്ലാത്തതിനാൽ, റീസെറ്റ് സീക്വൻസ് നമ്പർ 0 ആയും അക്‌നോളജ്‌മെൻ്റ് നമ്പർ ഇൻകമിംഗ് ഇനീഷ്യൽ സീക്വൻസ് നമ്പറിലേക്കും (ISN) സെഗ്‌മെൻ്റിലെ ഡാറ്റാ ബൈറ്റുകളുടെ എണ്ണത്തിലേക്കും സജ്ജീകരിച്ചിരിക്കുന്നു. വരുന്ന സെഗ്‌മെൻ്റിൽ യഥാർത്ഥ ഡാറ്റ ഇല്ലെങ്കിലും, SYN ബിറ്റ് യുക്തിസഹമായി സീക്വൻസ് നമ്പർ സ്‌പെയ്‌സിൽ 1 ബൈറ്റ് ഉൾക്കൊള്ളുന്നു; അതിനാൽ, ഈ ഉദാഹരണത്തിൽ, പുനഃസജ്ജീകരണത്തിലെ അക്നോളജ്മെൻ്റ് നമ്പർ ISN എന്നതിലും ഡാറ്റ ദൈർഘ്യം (0) കൂടാതെ ഒരു SYN ബിറ്റും ആയി സജ്ജീകരിച്ചിരിക്കുന്നു.

വിച്ഛേദിക്കൽ

ഈ അധ്യായത്തിലെ വിഭാഗത്തിൽ നാം അത് കണ്ടു സാധാരണ രീതിഒരു കക്ഷികളിൽ ഒരാൾക്ക് FIN അയയ്‌ക്കുന്നതാണ് കണക്ഷൻ അവസാനിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന രീതി. മുമ്പ് ക്യൂവിലുള്ള എല്ലാ ഡാറ്റയും അയച്ചതിന് ശേഷമാണ് FIN അയയ്‌ക്കുന്നത്, സാധാരണയായി ഡാറ്റാ നഷ്‌ടമൊന്നും സംഭവിക്കാത്തതിനാൽ ഇതിനെ ചിലപ്പോൾ ഒരു ഓർഡർലി റിലീസ് എന്ന് വിളിക്കുന്നു. എന്നിരുന്നാലും, FIN-ന് പകരം ഒരു റീസെറ്റ് അയച്ചുകൊണ്ട് കണക്ഷൻ അവസാനിപ്പിക്കാൻ സാധിക്കും. ഇതിനെ ചിലപ്പോൾ അബോർട്ടീവ് റിലീസ് എന്ന് വിളിക്കുന്നു.

ഇത്തരത്തിലുള്ള കണക്ഷൻ അവസാനിപ്പിക്കൽ ആപ്ലിക്കേഷന് രണ്ട് ഓപ്ഷനുകൾ നൽകുന്നു: (1) ക്യൂവിലെ ഏതെങ്കിലും ഡാറ്റ നഷ്‌ടപ്പെടുകയും ഒരു റീസെറ്റ് ഉടനടി അയയ്‌ക്കുകയും ചെയ്യും, (2) RST സ്വീകരിക്കുന്ന കക്ഷിക്ക് റിമോട്ട് പാർട്ടി കണക്ഷൻ അവസാനിപ്പിച്ചുവെന്ന് പറയാനാകും. അത് സാധാരണഗതിയിൽ അടയ്ക്കുന്നു. ആപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്ന ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിംഗ് ഇൻ്റർഫേസ് (API) ഒരു സാധാരണ ഷട്ട്ഡൗണിന് പകരം അത്തരമൊരു റീസെറ്റ് സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു മാർഗം നൽകണം.

നമ്മുടെ സോക്ക് പ്രോഗ്രാം ഉപയോഗിച്ച് ഇത്തരമൊരു ഇടവേള സംഭവിക്കുമ്പോൾ എന്താണ് സംഭവിക്കുന്നതെന്ന് നമുക്ക് കാണാൻ കഴിയും. ലിംഗർ ഓൺ ക്ലോസ് സോക്കറ്റ് ഓപ്ഷൻ (SO_LINGER) ഉപയോഗിച്ച് സോക്കറ്റ്സ് API ഈ കഴിവ് നൽകുന്നു. ഞങ്ങൾ -L ഓപ്‌ഷൻ 0-ൻ്റെ കാലതാമസത്തോടെ വ്യക്തമാക്കി. സാധാരണ FIN-ന് പകരം, കണക്ഷൻ അടയ്ക്കുന്നതിന് ഒരു റീസെറ്റ് അയയ്‌ക്കുമെന്നാണ് ഇതിനർത്ഥം. ഞങ്ങൾ svr4-ലെ സോക്ക് പ്രോഗ്രാമിൻ്റെ സെർവർ പതിപ്പിലേക്ക് കണക്റ്റുചെയ്യും:

bsdi % സോക്ക് -L0 svr4 8888ഇതാണ് ക്ലയൻ്റ്; സെർവർ അടുത്തതായി കാണിക്കുന്നു
ഹലോ വേൾഡ്റിമോട്ട് എൻഡിലേക്ക് അയയ്ക്കുന്ന ഒരു വരി നൽകുക
^ഡിക്ലയൻ്റ് ഓഫ് ചെയ്യാൻ ഫയലിൻ്റെ അവസാന പ്രതീകം നൽകുക

ഈ ഉദാഹരണത്തിനുള്ള tcpdump കമാൻഡിൻ്റെ ഔട്ട്പുട്ട് ചിത്രം 18.15 കാണിക്കുന്നു. (ഞങ്ങളുടെ യുക്തിയെ ബാധിക്കാത്തതിനാൽ ഈ ചിത്രത്തിലെ എല്ലാ വിൻഡോ ഡിക്ലറേഷനുകളും ഞങ്ങൾ നീക്കംചെയ്തു.)

1 0.0 bsdi.1099 > svr4.8888: S 671112193:671112193(0)

2 0.004975 (0.0050) svr4.8888 > bsdi.1099: S 3224959489:3224959489(0)
എക്ക് 671112194
3 0.006656 (0.0017) bsdi.1099 > svr4.8888: . എക്ക് 1
4 4.833073 (4.8264) bsdi.1099 > svr4.8888: P 1:14 (13) ack 1
5 5.026224 (0.1932) svr4.8888 > bsdi.1099: . എക്ക് 14
6 9.527634 (4.5014) bsdi.1099 > svr4.8888: R 14:14 (0) ack 1

ചിത്രം 18.15 FIN-ന് പകരം റീസെറ്റ് (RST) ഉപയോഗിച്ച് ഒരു കണക്ഷൻ അവസാനിപ്പിക്കുന്നു.

1-3 വരികൾ സാധാരണ കണക്ഷൻ സജ്ജീകരണം കാണിക്കുന്നു. ലൈൻ 4 ഞങ്ങൾ പ്രിൻ്റ് ചെയ്‌ത ഡാറ്റയുടെ സ്‌ട്രിംഗ് അയയ്‌ക്കുന്നു (12 പ്രതീകങ്ങളും യുണിക്‌സ് ന്യൂലൈനും), കൂടാതെ ഡാറ്റ ലഭിച്ചതായി ലൈൻ 5 ന് ഒരു അംഗീകാരം ലഭിക്കും.

ക്ലയൻ്റ് ഷട്ട് ഡൗൺ ചെയ്യാൻ ഞങ്ങൾ ഉപയോഗിച്ച എൻഡ്-ഓഫ്-ഫയൽ (കൺട്രോൾ-ഡി) ഇൻപുട്ടുമായി ലൈൻ 6 യോജിക്കുന്നു. ഞങ്ങൾ ഒരു സാധാരണ ക്ലോസ് (കമാൻഡ് ലൈൻ ഓപ്ഷൻ -L0) പകരം ഒരു ഇടവേള വ്യക്തമാക്കിയതിനാൽ, bsdi-യിലെ TCP സാധാരണ FIN-ന് പകരം RST അയയ്ക്കും. RST സെഗ്‌മെൻ്റിൽ സീക്വൻസ് നമ്പറും സ്ഥിരീകരണ നമ്പറും അടങ്ങിയിരിക്കുന്നു. RST സെഗ്‌മെൻ്റ് റിമോട്ട് എൻഡിൽ നിന്ന് ഒരു പ്രതികരണം പ്രതീക്ഷിക്കുന്നില്ല എന്നതും ശ്രദ്ധിക്കുക - അതിൽ ഒരു അംഗീകാരവും അടങ്ങിയിട്ടില്ല. റീസെറ്റ് സ്വീകർത്താവ് കണക്ഷൻ അവസാനിപ്പിക്കുകയും കണക്ഷൻ അവസാനിപ്പിച്ചതായി ആപ്ലിക്കേഷനെ അറിയിക്കുകയും ചെയ്യുന്നു.

അത്തരമൊരു എക്സ്ചേഞ്ച് ഉപയോഗിച്ച് സെർവറിൽ നിന്ന് ഞങ്ങൾക്ക് ഇനിപ്പറയുന്ന പിശക് ലഭിക്കും:

svr4% സോക്ക് -s 8888ഒരു സെർവറായി പ്രവർത്തിപ്പിക്കുക, പോർട്ട് 8888 ശ്രദ്ധിക്കുക
ഹലോ, വേൾഡ് ഇതാണ് ക്ലയൻ്റ് അയച്ചത്
വായന പിശക്: പിയർ മുഖേന കണക്ഷൻ പുനഃസജ്ജമാക്കുന്നു

ഈ സെർവർ നെറ്റ്‌വർക്കിൽ നിന്ന് വായിക്കുകയും അതിന് ലഭിക്കുന്നതെല്ലാം സ്റ്റാൻഡേർഡ് ഔട്ട്‌പുട്ടിലേക്ക് പകർത്തുകയും ചെയ്യുന്നു. സാധാരണയായി അത് അതിൻ്റെ TCP-യിൽ നിന്ന് ഒരു എൻഡ്-ഓഫ്-ഫയൽ ചിഹ്നം ലഭിച്ചതിന് ശേഷം പുറത്തുകടക്കുന്നു, എന്നിരുന്നാലും RST വന്നപ്പോൾ അതിന് ഒരു പിശക് ലഭിച്ചതായി ഇവിടെ കാണാം. പിശക് ഞങ്ങൾ പ്രതീക്ഷിച്ചതാണ്: കണക്ഷൻ പങ്കാളികളിൽ ഒരാൾ കണക്ഷൻ അടച്ചു.

ഒരു ഹാഫ്-ഓപ്പൺ കണക്ഷൻ നിർവചിക്കുന്നു

ഒരു വശം അടയ്ക്കുകയോ മറുവശത്തെ അറിയിക്കാതെ കണക്ഷൻ അവസാനിപ്പിക്കുകയോ ചെയ്താൽ TCP കണക്ഷൻ പകുതി തുറന്നതായി കണക്കാക്കുന്നു. രണ്ട് ആതിഥേയരിൽ ഒരാൾ പരാജയപ്പെട്ടാൽ എപ്പോൾ വേണമെങ്കിലും ഇത് സംഭവിക്കാം. കുറച്ച് സമയത്തേക്ക് പകുതി തുറന്ന കണക്ഷനിലൂടെ ഡാറ്റ ട്രാൻസ്മിറ്റ് ചെയ്യാനുള്ള ശ്രമങ്ങളൊന്നും ഉണ്ടാകില്ല എന്നതിനാൽ, റിമോട്ട് പാർട്ടി പരാജയപ്പെട്ടുവെന്ന് നിർണ്ണയിക്കുന്നത് വരെ ഒരു കക്ഷി പ്രവർത്തിക്കും.

പാതി തുറന്ന കണക്ഷൻ ഉണ്ടാകാനുള്ള മറ്റൊരു കാരണം, ക്ലയൻ്റ് ആപ്ലിക്കേഷൻ ഷട്ട് ഡൗൺ ചെയ്ത് കമ്പ്യൂട്ടർ ഷട്ട് ഡൗൺ ചെയ്യുന്നതിന് പകരം ക്ലയൻ്റ് ഹോസ്റ്റ് പവർഡൗൺ ചെയ്തു എന്നതാണ്. ഉദാഹരണത്തിന്, ഒരു പിസിയിൽ ഒരു ടെൽനെറ്റ് ക്ലയൻ്റ് സമാരംഭിക്കുമ്പോൾ ഇത് സംഭവിക്കുന്നു, കൂടാതെ ഉപയോക്താക്കൾ പ്രവൃത്തി ദിവസത്തിൻ്റെ അവസാനം കമ്പ്യൂട്ടർ ഓഫാക്കുമ്പോൾ. പിസി ഓഫാക്കിയിരിക്കുമ്പോൾ ഡാറ്റയൊന്നും കൈമാറുന്നില്ലെങ്കിൽ, ക്ലയൻ്റ് അപ്രത്യക്ഷമായതായി സെർവർ ഒരിക്കലും അറിയുകയില്ല. അടുത്ത ദിവസം രാവിലെ ഉപയോക്താവ് വരുമ്പോൾ, അവൻ്റെ പിസി ഓണാക്കി ഒരു പുതിയ ടെൽനെറ്റ് ക്ലയൻ്റ് ആരംഭിക്കുമ്പോൾ, സെർവർ ഹോസ്റ്റിൽ ഒരു പുതിയ സെർവർ ആരംഭിക്കുന്നു. ഇക്കാരണത്താൽ, സെർവർ ഹോസ്റ്റിൽ ധാരാളം ഓപ്പൺ TCP കണക്ഷനുകൾ പ്രത്യക്ഷപ്പെടാം. (ഒരു ടിസിപി കണക്ഷൻ്റെ ഒരറ്റം അപ്രത്യക്ഷമായെന്ന് കണ്ടെത്താനാകുന്ന ഒരു മാർഗം ഞങ്ങൾ കാണും. ഇത് ടിസിപി "കീപാലീവ്" ഓപ്ഷൻ ഉപയോഗിച്ചാണ് ചെയ്യുന്നത്.)

പകുതി തുറന്ന കണക്ഷൻ നമുക്ക് എളുപ്പത്തിൽ സൃഷ്ടിക്കാൻ കഴിയും. ഞങ്ങൾ ടെൽനെറ്റ് ക്ലയൻ്റ് bsdi-യിൽ സമാരംഭിക്കുകയും svr4-ലെ ഡിസ്‌കാർഡ് സെർവറുമായി ബന്ധിപ്പിക്കുകയും ചെയ്യുന്നു. ഞങ്ങൾ ഒരു വരി നൽകി അത് എങ്ങനെ പോകുന്നു എന്ന് കാണുന്നതിന് tcpdump ഉപയോഗിക്കുന്നു, തുടർന്ന് സെർവർ ഹോസ്റ്റിൽ നിന്ന് ഇഥർനെറ്റ് കേബിൾ വിച്ഛേദിച്ച് അത് പുനരാരംഭിക്കുക. ഇത് ചെയ്യുന്നതിലൂടെ, സെർവർ ഹോസ്റ്റിൻ്റെ പരാജയം ഞങ്ങൾ അനുകരിക്കുന്നു. (ഓപ്പൺ കണക്ഷനിൽ FIN അയയ്ക്കുന്നത് തടയാൻ സെർവർ റീബൂട്ട് ചെയ്യുന്നതിന് മുമ്പ് ഞങ്ങൾ ഇഥർനെറ്റ് കേബിൾ വിച്ഛേദിച്ചു, ചില ടിസിപി മൊഡ്യൂളുകൾ ഷട്ട് ഡൗൺ ചെയ്യുമ്പോൾ ഇത് ചെയ്യുന്നു.) സെർവർ റീബൂട്ട് ചെയ്തതിന് ശേഷം ഞങ്ങൾ കേബിൾ വീണ്ടും കണക്റ്റ് ചെയ്യുകയും ക്ലയൻ്റിലേക്ക് മറ്റൊരു ലൈൻ അയയ്ക്കാൻ ശ്രമിക്കുകയും ചെയ്തു. സെർവർ. സെർവർ റീബൂട്ട് ചെയ്‌തതിനാലും റീബൂട്ടിന് മുമ്പ് നിലവിലുണ്ടായിരുന്ന എല്ലാ കണക്ഷൻ ഡാറ്റയും നഷ്‌ടമായതിനാലും, അതിന് കണക്ഷനുകളെക്കുറിച്ച് ഒന്നും അറിയില്ല, വരുന്ന സെഗ്‌മെൻ്റുകൾ ഏത് കണക്ഷനാണ് ഉള്ളതെന്ന് അറിയില്ല. ഈ സാഹചര്യത്തിൽ, സ്വീകരിക്കുന്ന TCP വശം ഒരു റീസെറ്റ് ഉപയോഗിച്ച് പ്രതികരിക്കുന്നു.

bsdi % ടെൽനെറ്റ് svr4 നിരസിക്കുകക്ലയൻ്റ് ലോഞ്ച്
140.252.13.34 ശ്രമിക്കുന്നു...
svr4-ലേക്ക് ബന്ധിപ്പിച്ചു.
എസ്കേപ്പ് പ്രതീകം "^]" ആണ്.
ഹേയ്, അവിടെയുണ്ടോഈ ലൈൻ സാധാരണയായി അയയ്ക്കുന്നു
ഈ സമയത്ത് ഞങ്ങൾ സെർവർ ഹോസ്റ്റ് റീബൂട്ട് ചെയ്തു
മറ്റൊരു വരിഈ സ്ഥലത്ത് ഒരു പുനഃസജ്ജീകരണം നടത്തി
വിദേശ ഹോസ്റ്റ് കണക്ഷൻ അടച്ചു.

ഈ ഉദാഹരണത്തിനുള്ള tcpdump ഔട്ട്പുട്ട് ചിത്രം 18.16 കാണിക്കുന്നു. (ഞങ്ങളുടെ യുക്തിയെ ബാധിക്കാത്തതിനാൽ, വിൻഡോ ഡിക്ലറേഷനുകൾ, സേവന തരം വിവരങ്ങൾ, എംഎസ്എസ് ഡിക്ലറേഷനുകൾ എന്നിവ ഔട്ട്പുട്ടിൽ നിന്ന് ഞങ്ങൾ നീക്കംചെയ്തു.)

1 0.0 bsdi.1102 > svr4. നിരസിക്കുക: S 1591752193:1591752193(0)
2 0.004811 (0.0048) svr4.discard > bsdi.1102: S 26368001:26368001(0)
എക്ക് 1591752194
3 0.006516 (0.0017) bsdi.1102 > svr4.discard: . എക്ക് 1

4 5.167679 (5.1612) bsdi.1102 > svr4. discard: P 1:11 (10) ack 1
5 5.201662 (0.0340) svr4.discard > bsdi.1102: . എക്ക് 11

6 194.909929 (189.7083) bsdi.1102 > svr4. discard: P 11:25 (14) ack 1
7 194.914957 (0.0050) arp ഹൂ-ഹസ് bsdi ടെൽ svr4
8 194.915678 (0.0007) arp reply bsdi is-at 0:0:c0:6f:2d:40
9 194.918225 (0.0025) svr4.discard > bsdi.1102: R 26368002:26368002(0)

ചിത്രം 18.16 പകുതി തുറന്ന കണക്ഷനുള്ള ഒരു ഡാറ്റ സെഗ്‌മെൻ്റിൻ്റെ വരവിന് പ്രതികരണമായി പുനഃസജ്ജമാക്കുക.

1-3 വരികൾ സാധാരണ കണക്ഷൻ സ്ഥാപനം നടത്തുന്നു. വരി 4-ൽ, നിരസിച്ച സെർവറിലേക്ക് "ഹായ് ദേ" എന്ന സ്ട്രിംഗ് അയയ്‌ക്കുന്നു (ഇത് ഏകദേശം "ഹേയ്, അവിടെ" എന്ന് വിവർത്തനം ചെയ്യാം) വരി 5-ൽ ഒരു സ്ഥിരീകരണം ലഭിക്കുന്നു.

ഈ സമയത്ത് ഞങ്ങൾ svr4-ൽ നിന്ന് ഇഥർനെറ്റ് കേബിൾ വിച്ഛേദിക്കുകയും അത് റീബൂട്ട് ചെയ്യുകയും കേബിൾ വീണ്ടും ബന്ധിപ്പിക്കുകയും ചെയ്തു. മുഴുവൻ നടപടിക്രമവും ഏകദേശം 190 സെക്കൻഡ് എടുത്തു. പിന്നെ ഞങ്ങൾ പ്രിൻ്റ് ചെയ്തു അടുത്ത വരിക്ലയൻ്റിലുള്ള ഇൻപുട്ട് ("മറ്റൊരു ലൈൻ"), ഞങ്ങൾ റിട്ടേൺ അമർത്തുമ്പോൾ, ലൈൻ സെർവറിലേക്ക് അയച്ചു (ചിത്രം 18.16 ലെ വരി 6). അതേ സമയം, സെർവറിൽ നിന്ന് ഒരു പ്രതികരണം ലഭിച്ചു, എന്നിരുന്നാലും, സെർവർ റീബൂട്ട് ചെയ്തതിനാൽ, അതിൻ്റെ ARP കാഷെ ശൂന്യമാണ്, അതിനാൽ 7, 8 വരികളിൽ ഞങ്ങൾ ARP അഭ്യർത്ഥനയും പ്രതികരണവും കാണുന്നു. തുടർന്ന് 9 വരിയിൽ ഒരു റീസെറ്റ് അയച്ചു. ക്ലയൻ്റിന് ഒരു റീസെറ്റ് ലഭിക്കുകയും റിമോട്ട് ഹോസ്റ്റ് കണക്ഷൻ അവസാനിപ്പിച്ചതായി റിപ്പോർട്ട് ചെയ്യുകയും ചെയ്തു. ( അവസാന സന്ദേശംടെൽനെറ്റ് ക്ലയൻ്റിൽനിന്നുള്ള ഔട്ട്‌പുട്ട് കഴിയുന്നത്ര വിവരദായകമല്ല.)

ഒരേസമയം തുറക്കൽ

ഒരേ സമയം രണ്ട് ആപ്ലിക്കേഷനുകൾ സജീവമായി തുറക്കുന്നത് സാധ്യമാണ്. ഓരോ ഭാഗത്തുനിന്നും ഒരു SYN അയയ്‌ക്കണം, ഈ SYN-കൾ നെറ്റ്‌വർക്കിലൂടെ പരസ്പരം സഞ്ചരിക്കണം. ഇതിന് ഓരോ വശത്തും മറുവശത്ത് അറിയാവുന്ന ഒരു പോർട്ട് നമ്പർ ഉണ്ടായിരിക്കണം. ഇതിനെ ഒരേസമയം ഓപ്പൺ എന്ന് വിളിക്കുന്നു.

ഉദാഹരണത്തിന്, ലോക്കൽ പോർട്ട് 7777 ഉള്ള ഹോസ്റ്റ് എയിലെ ഒരു ആപ്ലിക്കേഷൻ, ഹോസ്റ്റ് ബിയുടെ പോർട്ട് 8888-ലേക്ക് സജീവമായി തുറക്കുന്നു. ലോക്കൽ പോർട്ട് 8888 ഉള്ള ഹോസ്റ്റ് ബിയിലെ ഒരു ആപ്ലിക്കേഷൻ, ഹോസ്റ്റ് എയുടെ പോർട്ട് 7777-ലേക്ക് സജീവമായി തുറക്കുന്നു.

ഇത് ഹോസ്റ്റ് എയിൽ നിന്ന് ഒരു ടെൽനെറ്റ് ക്ലയൻ്റിനെ ഹോസ്റ്റ് ബിയിലെ ടെൽനെറ്റ് സെർവറിലേക്ക് ബന്ധിപ്പിക്കുന്നതിന് തുല്യമല്ല, അതേസമയം ഹോസ്റ്റ് ബിയിൽ നിന്നുള്ള ടെൽനെറ്റ് ക്ലയൻ്റ് ഹോസ്റ്റ് എയിലെ ടെൽനെറ്റ് സെർവറിലേക്ക് കണക്റ്റുചെയ്യുന്നു. ഈ സാഹചര്യത്തിൽ, രണ്ട് ടെൽനെറ്റ് സെർവറുകളും ഒരു നിഷ്ക്രിയ ഓപ്പണാണ് ചെയ്യുന്നത്. ഒരു സജീവമായ ഒന്ന്, അതേസമയം ടെൽനെറ്റ് ക്ലയൻ്റുകൾ റിമോട്ട് ടെൽനെറ്റ് സെർവറുകളിലേക്ക് മുൻകൂട്ടി അറിയാവുന്ന പോർട്ടുകൾക്ക് പകരം ഡൈനാമിക് ആയി അസൈൻ ചെയ്ത പോർട്ട് നമ്പറുകൾ സ്വയം നിയോഗിക്കുന്നു.

ഒരേസമയം ഓപ്പണിംഗുകൾ കൈകാര്യം ചെയ്യാൻ ടിസിപി പ്രത്യേകം രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു, ഇത് രണ്ടിനേക്കാൾ ഒരു കണക്ഷനിലേക്ക് നയിക്കുന്നു. (ഒഎസ്ഐ ട്രാൻസ്പോർട്ട് ലെയർ പോലെയുള്ള മറ്റ് പ്രോട്ടോക്കോൾ കുടുംബങ്ങളിൽ, ഇത് ഒന്നിന് പകരം രണ്ട് കണക്ഷനുകൾ സൃഷ്ടിക്കുന്നു.)

ഒരേസമയം കണ്ടെത്തൽ സംഭവിക്കുമ്പോൾ, പ്രോട്ടോക്കോൾ അവസ്ഥയിലെ മാറ്റങ്ങൾ ചിത്രം 18.13-ൽ കാണിച്ചിരിക്കുന്നതിൽ നിന്ന് വ്യത്യസ്തമാണ്. രണ്ട് അറ്റങ്ങളും ഒരേ സമയം SYN അയയ്ക്കുന്നു, SYN_SENT അവസ്ഥയിലേക്ക് പ്രവേശിക്കുന്നു. ഓരോ അറ്റത്തും SYN ലഭിക്കുമ്പോൾ, സംസ്ഥാനം SYN_RECEIVED (SYN_RCVD) എന്നതിലേക്ക് മാറുന്നു (ചിത്രം 18.12 കാണുക), കൂടാതെ ഓരോ അറ്റവും SYN സ്വീകരിച്ചുവെന്ന അംഗീകാരത്തോടെ SYN വീണ്ടും അയയ്ക്കുന്നു. ഓരോ അറ്റത്തിനും ഒരു SYN-ഉം ACK-ഉം ലഭിക്കുമ്പോൾ, സംസ്ഥാനം എസ്റ്റാബ്ലിഷ്ഡ് ആയി മാറുന്നു. സംസ്ഥാന മാറ്റങ്ങൾ ചിത്രം 18.17 ൽ കാണിച്ചിരിക്കുന്നു.

ചിത്രം 18.17 ഒരേസമയം തുറക്കുമ്പോൾ സെഗ്‌മെൻ്റുകളുടെ കൈമാറ്റം.

ഒരേസമയം തുറക്കുന്നതിന് നാല് സെഗ്‌മെൻ്റുകളുടെ കൈമാറ്റം ആവശ്യമാണ്, "മൂന്ന് ഹാൻഡ്‌ഷേക്ക്" എന്നതിനേക്കാൾ ഒന്ന്. ഞങ്ങൾ ഒരു അറ്റത്തെ ക്ലയൻ്റ് എന്നും മറ്റേതിനെ സെർവർ എന്നും വിളിക്കുന്നില്ല എന്നതും ശ്രദ്ധിക്കുക, കാരണം ഈ സാഹചര്യത്തിൽ രണ്ടും ക്ലയൻ്റും സെർവറും ആയി പ്രവർത്തിക്കുന്നു.

ഒരേസമയം തുറക്കുന്നത് സാധ്യമാണ്, പക്ഷേ ഇത് വളരെ ബുദ്ധിമുട്ടാണ്. SYN-കൾ പരസ്പരം ഓവർലാപ്പ് ചെയ്യുന്ന തരത്തിൽ ഇരുവശങ്ങളും ഏകദേശം ഒരേ സമയം ആരംഭിക്കണം. ഈ സാഹചര്യത്തിൽ, കണക്ഷനിലെ രണ്ട് പങ്കാളികൾക്കിടയിലുള്ള ദീർഘമായ മടക്ക സമയം സഹായിക്കും, ഇത് SYN ഓവർലാപ്പ് ചെയ്യാൻ അനുവദിക്കുന്നു. ഇത് നേടുന്നതിന്, കണക്ഷനിലെ ഒരു കക്ഷിയായി ഞങ്ങൾ ഹോസ്റ്റ് bsdi ഉം മറ്റൊന്നായി ഹോസ്റ്റ് vangogh.cs.berkeley.edu ഉം ഉപയോഗിക്കുന്നു. അവയ്ക്കിടയിൽ ഒരു ഡയൽ-അപ്പ് SLIP ചാനൽ ഉള്ളതിനാൽ, SYN ഓവർലാപ്പ് ചെയ്യാൻ അനുവദിക്കുന്നതിന് റിട്ടേൺ സമയം വളരെ വലുതായിരിക്കണം (നൂറു മില്ലിസെക്കൻഡ്).

ഒരു അവസാനം (bsdi) സ്വയം ലോക്കൽ പോർട്ട് 8888 (കമാൻഡ് ലൈൻ ഓപ്ഷൻ -b) നൽകുകയും മറ്റ് ഹോസ്റ്റിൻ്റെ പോർട്ട് 7777-ലേക്ക് സജീവമായി തുറക്കുകയും ചെയ്യുന്നു:

bsdi % sock -v -b8888 vangogh.cs.berkeley.edu 7777
140.252.13.35.8888 മുതൽ 128.32.130.2.7777 വരെ ബന്ധിപ്പിച്ചിരിക്കുന്നു
TCP_MAXSEG = 512
ഹലോ വേൾഡ്ഈ വരി നൽകുക
ഹായ്, ഈ വരി മറ്റേ അറ്റത്ത് അച്ചടിച്ചു
പിയർ വഴി കണക്ഷൻ അടച്ചു, ഇത് FIN ലഭിച്ചപ്പോഴുള്ള ഔട്ട്‌പുട്ടാണ്

മറ്റേ അറ്റം ഏകദേശം ഒരേ സമയത്താണ് ആരംഭിച്ചത്, അത് സ്വയം 7777 എന്ന പ്രാദേശിക പോർട്ട് നമ്പർ നൽകുകയും പോർട്ട് 8888 ലേക്ക് സജീവമായി തുറക്കുകയും ചെയ്തു:

വാൻഗോഗ് % sock -v -b7777 bsdi.tuc.noao.edu 8888
128.32.130.2.7777 മുതൽ 140.252.13.35.8888 വരെ ബന്ധിപ്പിച്ചിരിക്കുന്നു
TCP_MAXSEG = 512
ഹലോ, വേൾഡ് ഇത് മറ്റേ അറ്റത്ത് പ്രവേശിച്ചു
ഹായ് അവിടെഞങ്ങൾ ഈ വരി അച്ചടിച്ചു
^ഡിതുടർന്ന് ഫയലിൻ്റെ അവസാന പ്രതീകമായ EOF നൽകി

ഞങ്ങൾ -v ഫ്ലാഗ് ഇൻ വ്യക്തമാക്കി കമാൻഡ് ലൈൻകണക്ഷനുകളുടെ ഓരോ അറ്റത്തിലുമുള്ള IP വിലാസങ്ങളും പോർട്ട് നമ്പറുകളും പരിശോധിക്കുന്നതിനുള്ള സോക്ക് പ്രോഗ്രാം. ഈ ഫ്ലാഗ് കണക്ഷൻ്റെ ഓരോ അറ്റത്തും ഉപയോഗിക്കുന്ന MSS പ്രിൻ്റ് ചെയ്യുന്നു. ഓരോ അറ്റത്തും ഞങ്ങൾ ഒരു വരി ഇൻപുട്ടായി പ്രിൻ്റ് ചെയ്യുകയും ചെയ്തു, അത് റിമോട്ട് എൻഡിലേക്ക് അയയ്ക്കുകയും രണ്ട് ഹോസ്റ്റുകളും പരസ്പരം "കാണുന്നു" എന്ന് ഉറപ്പാക്കാൻ അവിടെ പ്രിൻ്റ് ചെയ്യുകയും ചെയ്തു.

ഈ കണക്ഷനുള്ള സെഗ്മെൻ്റ് എക്സ്ചേഞ്ച് ചിത്രം 18.18 കാണിക്കുന്നു. (4.4BSD പ്രവർത്തിക്കുന്ന vangogh-ൽ നിന്ന് വന്ന യഥാർത്ഥ SYN-കളിൽ പ്രത്യക്ഷപ്പെട്ട ചില പുതിയ TCP ഓപ്ഷനുകൾ ഞങ്ങൾ നീക്കംചെയ്തു. ഈ പുതിയ ഓപ്‌ഷനുകൾ ഈ അധ്യായത്തിൻ്റെ ഒരു വിഭാഗത്തിൽ ഞങ്ങൾ വിവരിക്കും.) രണ്ട് SYN-കൾ (വരി 1 ഉം 2 ഉം) ശ്രദ്ധിക്കുക. ACK ഉള്ള രണ്ട് SYN പിന്തുടരുന്നു (വരികൾ 3 ഉം 4 ഉം). ഈ സാഹചര്യത്തിൽ, ഒരേസമയം തുറക്കൽ സംഭവിക്കുന്നു.

വരി 6-ലെ സ്ഥിരീകരണത്തോടെ bsdi-യിൽ നിന്ന് vangogh-ലേക്ക് പോകുന്ന "ഹലോ, വേൾഡ്" എന്ന സ്ട്രിംഗ് ലൈൻ 5 കാണിക്കുന്നു. 7 ഉം 8 ഉം വരികൾ മറ്റൊരു ദിശയിലേക്ക് പോകുന്ന "ആൻഡ് ഹായ് ദേർ" എന്ന സ്ട്രിംഗുമായി യോജിക്കുന്നു. 9-12 വരികൾ ഒരു സാധാരണ കണക്ഷൻ ക്ലോഷർ കാണിക്കുന്നു.

മിക്ക ബെർക്ക്‌ലി നടപ്പിലാക്കലുകളും കൺകറൻ്റ് ഓപ്പണിംഗിനെ ശരിയായി പിന്തുണയ്ക്കുന്നില്ല. ഈ സിസ്റ്റങ്ങളിൽ, നിങ്ങൾക്ക് SYN-കൾ ഓവർലാപ്പ് ചെയ്യാൻ കഴിയുമെങ്കിൽ, നിങ്ങൾ രണ്ട് ദിശകളിലേക്കും ഓരോ SYN-ഉം ACK-ഉം ഉള്ള സെഗ്‌മെൻ്റുകൾ കൈമാറ്റം ചെയ്യുന്നു. മിക്ക നടപ്പാക്കലുകളും എല്ലായ്പ്പോഴും SYN_SENT അവസ്ഥയിൽ നിന്ന് ചിത്രം 18.12-ൽ കാണിച്ചിരിക്കുന്ന SYN_RCVD അവസ്ഥയിലേക്ക് പരിവർത്തനം ചെയ്യുന്നില്ല.

1 0.0 bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
4096 വിജയിച്ചു
2 0.213782 (0.2138) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
8192 വിജയിക്കുക
3 0.215399 (0.0016) bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
ack 1058199042 വിൻ 4096

4 0.340405 (0.1250) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
91904002 വിജയി 8192

5 5.633142 (5.2927) bsdi.8888 > vangogh.7777: P 1:14 (13) ack 1 win 4096
6 6.100366 (0.4672) vangogh.7777 > bsdi.8888: . ack 14 വിജയി 8192

7 9.640214 (3.5398) vangogh.7777 > bsdi.8888: P 1:14 (13) ack 14 win 8192
8 9.796417 (0.1562) bsdi.8888 > vangogh.7777: . ack 14 വിജയം 4096

9 13.060395 (3.2640) vangogh.7777 > bsdi.8888: F 14:14 (0) ack 14 win 8192
10 13.061828 (0.0014) bsdi.8888 > vangogh.7777: . AC 15 വിജയം 4096
11 13.079769 (0.0179) bsdi.8888 > vangogh.7777: F 14:14 (0) ack 15 win 4096
12 13.299940 (0.2202) vangogh.7777 > bsdi.8888: . 8192 ലേക്ക് 15 വിജയിച്ചു

ചിത്രം 18.18 ഒരേസമയം തുറക്കുമ്പോൾ സെഗ്മെൻ്റ് എക്സ്ചേഞ്ച്.

ഒരേസമയം അടച്ചുപൂട്ടൽ

ഞങ്ങൾ നേരത്തെ പറഞ്ഞതുപോലെ, ഒരു വശത്ത് (പലപ്പോഴും, പക്ഷേ എല്ലായ്പ്പോഴും അല്ല, ക്ലയൻ്റ് സൈഡ്) ഒരു സജീവ ക്ലോസ് നടത്തുകയും ആദ്യത്തെ FIN അയയ്ക്കുകയും ചെയ്യുന്നു. ടിസിപി ഒരേസമയം അടയ്ക്കാൻ അനുവദിക്കുന്നതിനാൽ, രണ്ട് പാർട്ടികൾക്കും സജീവമായ ഒരു ക്ലോസ് നടത്താനും സാധിക്കും.

ചിത്രം 18.12 അനുസരിച്ച്, രണ്ട് അറ്റങ്ങളും സ്ഥാപിതമായ അവസ്ഥയിൽ നിന്ന് FIN_WAIT_1 അവസ്ഥയിലേക്കുള്ള പരിവർത്തനം, ആപ്ലിക്കേഷൻ അടയ്‌ക്കാനുള്ള സിഗ്നലുകൾ നൽകുമ്പോൾ. അതേ സമയം, ഇരുവരും FIN അയയ്‌ക്കുന്നു, അത് നെറ്റ്‌വർക്കിൽ എവിടെയെങ്കിലും കണ്ടെത്തിയേക്കാം. FIN ലഭിക്കുമ്പോൾ, ഓരോ അവസാനവും FIN_WAIT_1 അവസ്ഥയിൽ നിന്ന് ക്ലോസിംഗ് അവസ്ഥയിലേക്ക് മാറുകയും ഓരോ അറ്റത്തുനിന്നും ഒരു അന്തിമ ACK അയയ്ക്കുകയും ചെയ്യുന്നു. ഓരോ അറ്റത്തിനും അന്തിമ ACK ലഭിക്കുമ്പോൾ, അവസ്ഥ TIME_WAIT ആയി മാറുന്നു. ചിത്രം 18.19 സംസ്ഥാന മാറ്റങ്ങൾ കാണിക്കുന്നു.

ചിത്രം 18.19 ഒരേസമയം അടയ്ക്കുമ്പോൾ സെഗ്‌മെൻ്റുകളുടെ കൈമാറ്റം.

ഒരേസമയം അടച്ചുപൂട്ടുമ്പോൾ, സാധാരണ അടച്ചുപൂട്ടലിൻ്റെ അതേ എണ്ണം പാക്കറ്റുകൾ കൈമാറ്റം ചെയ്യപ്പെടുന്നു.

TCP തലക്കെട്ടിൽ ഓപ്ഷനുകൾ () അടങ്ങിയിരിക്കാം. യഥാർത്ഥ TCP സ്പെസിഫിക്കേഷനിൽ നിർവചിച്ചിരിക്കുന്ന ഓപ്ഷനുകൾ ഇവയാണ്: ഓപ്‌ഷൻ ലിസ്റ്റിൻ്റെ അവസാനം, പ്രവർത്തനമില്ല, കൂടാതെ പരമാവധി സെഗ്‌മെൻ്റ് വലുപ്പം. ഞങ്ങളുടെ ഉദാഹരണങ്ങളിൽ മിക്കവാറും എല്ലാ SYN സെഗ്‌മെൻ്റിലും MSS ഓപ്ഷൻ ഞങ്ങൾ കണ്ടു.

RFC 1323 പോലെയുള്ള പുതിയ RFC-കൾ അധിക TCP ഓപ്ഷനുകൾ നിർവചിക്കുന്നു, അവയിൽ മിക്കതും പിന്നീടുള്ള നടപ്പിലാക്കലുകളിൽ മാത്രമേ കാണപ്പെടുകയുള്ളൂ. (ഇൽ ഞങ്ങൾ പുതിയ ഓപ്ഷനുകൾ വിവരിക്കും.) ചിത്രം 18.20 നിലവിലെ TCP ഓപ്ഷനുകളുടെ ഫോർമാറ്റ് കാണിക്കുന്നു - RFC 793, RFC 1323 എന്നിവയിൽ വിവരിച്ചവ.

ചിത്രം 18.20 TCP ഓപ്ഷനുകൾ.

ഓരോ ഓപ്ഷനും ഒരു 1-ബൈറ്റ് തരം (തരം) ഉപയോഗിച്ച് ആരംഭിക്കുന്നു, ഇത് ഓപ്ഷൻ്റെ തരം സൂചിപ്പിക്കുന്നു. 0 ഉം 1 ഉം ഉള്ള ഓപ്‌ഷനുകൾ 1 ബൈറ്റ് ഉൾക്കൊള്ളുന്നു. മറ്റ് ഓപ്ഷനുകൾക്ക് ടൈപ്പ് ബൈറ്റിനെ പിന്തുടരുന്ന (ലെൻ) ബൈറ്റുകളുടെ ദൈർഘ്യമുണ്ട്. തരവും നീളമുള്ള ബൈറ്റുകളും ഉൾപ്പെടെ മൊത്തം നീളമാണ് നീളം.

4 ബൈറ്റുകളുടെ ഗുണിതമായിരിക്കേണ്ട ഫീൽഡുകൾ പൂരിപ്പിക്കാൻ അയയ്ക്കുന്നയാളെ അനുവദിക്കുന്നതിന് ഒരു നോ ഓപ്പറേഷൻ (NOP) ഓപ്ഷൻ ചേർത്തു. ഞങ്ങൾ ഒരു 4.4BSD സിസ്റ്റത്തിൽ നിന്ന് ഒരു TCP കണക്ഷൻ സ്ഥാപിക്കുകയാണെങ്കിൽ, tcpdump ഉപയോഗിച്ച് പ്രാരംഭ SYN സെഗ്‌മെൻ്റിൽ ഇനിപ്പറയുന്ന ഓപ്ഷനുകൾ കാണാൻ കഴിയും:

MSS ഓപ്ഷൻ 512 ആയി സജ്ജീകരിച്ചിരിക്കുന്നു, തുടർന്ന് NOP, തുടർന്ന് വിൻഡോ സൈസ് ഓപ്ഷൻ. 3-ബൈറ്റ് വിൻഡോ സൈസ് ഓപ്‌ഷൻ 4 ബൈറ്റിലേക്ക് പാഡ് ചെയ്യാൻ ആദ്യത്തെ NOP ഓപ്ഷൻ ഉപയോഗിക്കുന്നു. അതുപോലെ, 10-ബൈറ്റ് ടൈംസ്റ്റാമ്പ് ഓപ്‌ഷനുമുമ്പ് 12 ബൈറ്റുകൾ ഉൾക്കൊള്ളാൻ രണ്ട് NOP-കൾ ഉണ്ടായിരിക്കും.

4, 5, 6, 7 തരം ഉള്ള മറ്റ് നാല് ഓപ്ഷനുകളെ സെലക്ടീവ് ACK ഓപ്ഷനുകൾ എന്നും എക്കോ ഓപ്ഷനുകൾ എന്നും വിളിക്കുന്നു. ചിത്രം 18.20-ൽ ഞങ്ങൾ അവ കാണിച്ചിട്ടില്ല, കാരണം എക്കോ ഓപ്‌ഷനു പകരം ഒരു ടൈംസ്റ്റാമ്പ് ഓപ്‌ഷൻ നൽകിയിട്ടുണ്ട്, കൂടാതെ തിരഞ്ഞെടുത്ത ACK-കൾ, നിലവിൽ നിർവചിച്ചിരിക്കുന്നത് പോലെ, ഇപ്പോഴും ചർച്ചയിലാണ്, അവ RFC 1323-ൽ ഉൾപ്പെടുത്തിയിട്ടില്ല. T/TCP നിർദ്ദേശം എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. TCP ഇടപാടുകൾക്കായി (അധ്യായം 24-ൻ്റെ വിഭാഗം) 11, 12, 13 എന്നിവയ്ക്ക് തുല്യമായ തരങ്ങളുള്ള മൂന്ന് ഓപ്ഷനുകൾ കൂടി വ്യക്തമാക്കുന്നു.

ഒരു ടിസിപി സെർവർ നടപ്പിലാക്കൽ

അധ്യായം 1 വിഭാഗത്തിൽ, മിക്ക TCP സെർവറുകളും ഒരേസമയം ഉണ്ടെന്ന് ഞങ്ങൾ പറഞ്ഞു. ഒരു പുതിയ കണക്ഷൻ സ്ഥാപിക്കുന്നതിനുള്ള അഭ്യർത്ഥന സെർവറിൽ എത്തുമ്പോൾ, അത് കണക്ഷൻ സ്വീകരിക്കുകയും പുതിയ ക്ലയൻ്റിനു സേവനം നൽകുന്ന ഒരു പുതിയ പ്രക്രിയ ആരംഭിക്കുകയും ചെയ്യുന്നു. ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തെ ആശ്രയിച്ച്, ഒരു പുതിയ സെർവർ സൃഷ്ടിക്കുന്നതിന് വ്യത്യസ്ത രീതികൾ ഉപയോഗിക്കുന്നു. Unix സിസ്റ്റങ്ങളിൽ, ഫോർക്ക് ഫംഗ്ഷൻ ഉപയോഗിച്ച് ഒരു പുതിയ പ്രക്രിയ സൃഷ്ടിക്കപ്പെടുന്നു.

കൺകറൻ്റ് സെർവറുകളുമായി ടിസിപി എങ്ങനെ ഇടപെടുന്നു എന്ന് നമ്മൾ ചർച്ച ചെയ്യേണ്ടതുണ്ട്. ഇനിപ്പറയുന്ന ചോദ്യത്തിന് ഉത്തരം നൽകാൻ ഞാൻ ആഗ്രഹിക്കുന്നു: ഒരു ക്ലയൻ്റിൽ നിന്ന് ഒരു പുതിയ കണക്ഷനായി സെർവറിന് ഒരു അഭ്യർത്ഥന ലഭിക്കുമ്പോൾ പോർട്ട് നമ്പറുകൾ എങ്ങനെയാണ് പ്രോസസ്സ് ചെയ്യുന്നത്, ഒരേ സമയം ഒന്നിലധികം കണക്ഷൻ അഭ്യർത്ഥനകൾ വന്നാൽ എന്ത് സംഭവിക്കും?

TCP സെർവർ പോർട്ട് നമ്പറുകൾ

ടിസിപി പോർട്ട് നമ്പറുകൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നുവെന്ന് ഏതെങ്കിലും ടിസിപി സെർവർ പരിശോധിച്ച് നമുക്ക് പറയാൻ കഴിയും. netstat കമാൻഡ് ഉപയോഗിച്ച് നമുക്ക് ഒരു ടെൽനെറ്റ് സെർവർ നോക്കാം. സജീവമല്ലാത്ത സിസ്റ്റങ്ങൾക്കുള്ളതാണ് ഇനിപ്പറയുന്ന ഔട്ട്പുട്ട് ടെൽനെറ്റ് കണക്ഷനുകൾ. (ടെൽനെറ്റ് സെർവർ കാണിക്കുന്നത് ഒഴികെയുള്ള എല്ലാ വരികളും ഞങ്ങൾ നീക്കംചെയ്തു.)

സൂര്യൻ % netstat -a -n -f inet
സജീവ ഇൻ്റർനെറ്റ് കണക്ഷനുകൾ (സെർവറുകൾ ഉൾപ്പെടെ)
Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)
tcp 0 0 *.23 *.* കേൾക്കുക

എസ്റ്റാബ്ലിഷ്ഡ് സ്റ്റേറ്റിൽ മാത്രമല്ല, എല്ലാ നെറ്റ്‌വർക്ക് എൻഡ്‌പോയിൻ്റുകളിലും The -a ഫ്ലാഗ് റിപ്പോർട്ട് ചെയ്യുന്നു. വിലാസങ്ങളെ പേരുകളാക്കി മാറ്റുന്നതിന് DNS ഉപയോഗിക്കുന്നതിന് പകരം -n ഫ്ലാഗ് IP വിലാസങ്ങൾ സംഖ്യാ ദശാംശ നൊട്ടേഷനിൽ പ്രിൻ്റ് ചെയ്യുന്നു, കൂടാതെ സേവന നാമങ്ങൾ അച്ചടിക്കുന്നതിന് പകരം സംഖ്യാ പോർട്ട് നമ്പറുകൾ (ഉദാഹരണത്തിന് 23) പ്രിൻ്റ് ചെയ്യുന്നു (ഈ സാഹചര്യത്തിൽ ടെൽനെറ്റ്). -f inet ഓപ്ഷൻ TCP, UDP എൻഡ് പോയിൻ്റുകൾ മാത്രമേ റിപ്പോർട്ട് ചെയ്യുന്നുള്ളൂ.

പ്രാദേശിക വിലാസം *.23 ആയി ഔട്ട്പുട്ട് ചെയ്യുന്നു, ഇവിടെ നക്ഷത്രചിഹ്നത്തെ സാധാരണയായി വൈൽഡ്കാർഡ് അല്ലെങ്കിൽ മെറ്റാക്യാരാക്റ്റർ എന്ന് വിളിക്കുന്നു. ഏത് പ്രാദേശിക ഇൻ്റർഫേസിൽ നിന്നും ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന (SYN) സ്വീകരിക്കപ്പെടും എന്നാണ് ഇതിനർത്ഥം. ഒരു ഹോസ്റ്റിന് ഒന്നിലധികം ഇൻ്റർഫേസുകൾ ഉണ്ടെങ്കിൽ, ഞങ്ങൾക്ക് ഒരു നിർദ്ദിഷ്ട IP വിലാസം പ്രാദേശിക IP വിലാസമായി (ഹോസ്റ്റിൻ്റെ IP വിലാസങ്ങളിൽ ഒന്ന്) വ്യക്തമാക്കാം, കൂടാതെ ആ ഇൻ്റർഫേസിൽ നിന്ന് സ്വീകരിക്കുന്ന കണക്ഷൻ അഭ്യർത്ഥനകൾ മാത്രമേ സേവനം നൽകൂ. (ഇത് എങ്ങനെയെന്ന് ഈ വിഭാഗത്തിൽ പിന്നീട് നമുക്ക് കാണാം.) പ്രാദേശിക പോർട്ട് 23 ആണ്, ഇത് ടെൽനെറ്റിന് അറിയപ്പെടുന്ന പോർട്ട് ആണ്.

റിമോട്ട് വിലാസം *.* ആയി കാണിക്കുന്നു, അതിനർത്ഥം വിദൂര IP വിലാസവും റിമോട്ട് പോർട്ട് നമ്പറും ഇതുവരെ അറിയപ്പെട്ടിട്ടില്ല, കാരണം എൻഡ് പോയിൻ്റ് LISTEN നിലയിലായതിനാൽ കണക്ഷൻ അഭ്യർത്ഥന വരുന്നതിനായി കാത്തിരിക്കുന്നു.

ഇപ്പോൾ ഞങ്ങൾ സ്ലിപ്പ് ഹോസ്റ്റിൽ (140.252.13.65) ഒരു ടെൽനെറ്റ് ക്ലയൻ്റ് ആരംഭിക്കുകയാണ്, അത് ഈ സെർവറിലേക്ക് ബന്ധിപ്പിക്കും. netstat കമാൻഡിൽ നിന്നുള്ള ഔട്ട്പുട്ടിൻ്റെ അനുബന്ധ വരികൾ ഇതാ:


tcp 0 0 140.252.13.33.23 140.252.13.65.1029 സ്ഥാപിച്ചു
tcp 0 0 *.23 *.* കേൾക്കുക

പോർട്ട് 23-ൻ്റെ ആദ്യ വരി സ്ഥാപിച്ച കണക്ഷൻ(സ്ഥാപിതമായി). ഈ കണക്ഷനായി, ലോക്കൽ, റിമോട്ട് വിലാസങ്ങളുടെ നാല് ഘടകങ്ങളും പൂരിപ്പിച്ചിരിക്കുന്നു: പ്രാദേശിക ഐപി വിലാസവും പോർട്ട് നമ്പറും, റിമോട്ട് ഐപി വിലാസവും പോർട്ട് നമ്പറും. കണക്ഷൻ അഭ്യർത്ഥന വന്ന ഇൻ്റർഫേസുമായി പ്രാദേശിക IP വിലാസം യോജിക്കുന്നു (ഇഥർനെറ്റ് ഇൻ്റർഫേസ്, 140.252.13.33).

എൻഡ് പോയിൻ്റ് LISTEN അവസ്ഥയിൽ തുടർന്നു. ഭാവിയിൽ വരുന്ന കണക്ഷൻ അഭ്യർത്ഥനകൾ സ്വീകരിക്കാൻ കൺകറൻ്റ് സെർവർ ഉപയോഗിക്കുന്ന അവസാന പോയിൻ്റാണിത്. ഈ സാഹചര്യത്തിൽ, ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന വന്ന് സ്വീകരിക്കുമ്പോൾ, കേർണലിൽ വസിക്കുന്ന ടിസിപി മൊഡ്യൂൾ സ്ഥാപിതമായ അവസ്ഥയിൽ ഒരു പുതിയ എൻഡ് പോയിൻ്റ് സൃഷ്ടിച്ചു. സ്ഥാപിത നിലയിലുള്ള ഒരു കണക്ഷൻ്റെ പോർട്ട് നമ്പർ മാറിയിട്ടില്ല എന്നതും ശ്രദ്ധിക്കുക: ഇത് 23 ആണ്, LISTEN അവസ്ഥയിലുള്ള ഒരു എൻഡ് പോയിൻ്റിന് സമാനമാണ്.

ഇപ്പോൾ ഞങ്ങൾ അതേ ക്ലയൻ്റിൽനിന്ന് (സ്ലിപ്പ്) ഈ സെർവറിലേക്ക് മറ്റൊരു ടെൽനെറ്റ് ക്ലയൻ്റ് ആരംഭിക്കുകയാണ്. netstat കമാൻഡിൽ നിന്നുള്ള അനുബന്ധ ഔട്ട്പുട്ട് ഇതുപോലെ കാണപ്പെടും:

Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 സ്ഥാപിച്ചു
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 സ്ഥാപിച്ചു
tcp 0 0 *.23 *.* കേൾക്കുക

ഇപ്പോൾ നമ്മൾ ഒരേ ഹോസ്റ്റിൽ നിന്ന് ഒരേ സെർവറിലേക്ക് രണ്ട് സ്ഥാപിതമായ (സ്ഥാപിതമായ) കണക്ഷനുകൾ കാണുന്നു. രണ്ടിനും പ്രാദേശിക പോർട്ട് നമ്പർ 23 ആണ്. റിമോട്ട് പോർട്ട് നമ്പറുകൾ വ്യത്യസ്‌തമായതിനാൽ ഇത് ടിസിപിക്ക് പ്രശ്‌നമല്ല. ഓരോ ടെൽനെറ്റ് ക്ലയൻ്റും ചലനാത്മകമായി അസൈൻ ചെയ്‌ത പോർട്ട് ഉപയോഗിക്കുന്നതിനാൽ അവ വ്യത്യസ്തമായിരിക്കണം, കൂടാതെ ചലനാത്മകമായി അസൈൻ ചെയ്‌ത പോർട്ടിൻ്റെ നിർവചനത്തിൽ നിന്ന് ഹോസ്റ്റിൽ (സ്ലിപ്പ്) നിലവിൽ ഉപയോഗത്തിലില്ലാത്ത ഒരു പോർട്ട് മാത്രമേ ഡൈനാമിക് ആയി അസൈൻ ചെയ്യാൻ കഴിയൂ എന്ന് ഞങ്ങൾക്കറിയാം.

ഈ ഉദാഹരണം കാണിക്കുന്നത് ടിസിപി ഇൻകമിംഗ് സെഗ്‌മെൻ്റുകൾ നാല് മൂല്യങ്ങളും ഉപയോഗിച്ച് ഡെമൾട്ടിപ്ലെക്‌സ് ചെയ്യുന്നു, അവ പ്രാദേശികവും വിദൂര വിലാസങ്ങൾ: ലക്ഷ്യസ്ഥാന IP വിലാസം, ലക്ഷ്യസ്ഥാന പോർട്ട് നമ്പർ, ഉറവിട IP വിലാസം, ഉറവിട പോർട്ട് നമ്പർ. ഡെസ്റ്റിനേഷൻ പോർട്ട് നമ്പർ മാത്രം നോക്കി ഇൻകമിംഗ് സെഗ്‌മെൻ്റ് ഏത് പ്രക്രിയയാണ് സ്വീകരിച്ചതെന്ന് TCP-ക്ക് നിർണ്ണയിക്കാൻ കഴിയില്ല. കൂടാതെ, LISTEN അവസ്ഥയിലുള്ള പോർട്ട് 23-ലെ മൂന്ന് എൻഡ് പോയിൻ്റുകളിൽ ഒന്ന് മാത്രമേ ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥനകൾ സ്വീകരിക്കുകയുള്ളൂ. എസ്റ്റാബ്ലിഷ്ഡ് സ്റ്റേറ്റിലെ എൻഡ്‌പോയിൻ്റുകൾക്ക് SYN സെഗ്‌മെൻ്റുകൾ സ്വീകരിക്കാൻ കഴിയില്ല, കൂടാതെ ലിസ്‌റ്റൻ അവസ്ഥയിലെ ഒരു എൻഡ് പോയിൻ്റിന് ഡാറ്റ സെഗ്‌മെൻ്റുകൾ സ്വീകരിക്കാനും കഴിയില്ല.

ഇപ്പോൾ ഞങ്ങൾ സോളാരിസ് ഹോസ്റ്റിൽ നിന്ന് മറ്റൊരു ടെൽനെറ്റ് ക്ലയൻ്റ് ആരംഭിക്കുന്നു, അത് ഇഥർനെറ്റിലൂടെയല്ല, സൂര്യനിൽ നിന്ന് SLIP ചാനലിലൂടെ കടന്നുപോകും.

Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)
tcp 0 0 140.252.1.29.23 140.252.1.32.34603 സ്ഥാപിച്ചു
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 സ്ഥാപിച്ചു
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 സ്ഥാപിച്ചു
tcp 0 0 *.23 *.* കേൾക്കുക

ആദ്യമായി സ്ഥാപിതമായ (സ്ഥാപിതമായ) കണക്ഷനുള്ള പ്രാദേശിക IP വിലാസം ഇപ്പോൾ മൾട്ടി-ഇൻ്റർഫേസ് ഹോസ്റ്റ് സൺ (140.252.1.29)-ലെ SLIP ചാനൽ ഇൻ്റർഫേസിൻ്റെ വിലാസവുമായി പൊരുത്തപ്പെടുന്നു.

പ്രാദേശിക ഐപി വിലാസങ്ങൾ പരിമിതപ്പെടുത്തുന്നു

സെർവർ അതിൻ്റെ പ്രാദേശിക IP വിലാസങ്ങളായി വൈൽഡ്കാർഡുകൾ ഉപയോഗിക്കാത്തപ്പോൾ എന്ത് സംഭവിക്കുമെന്ന് നമുക്ക് നോക്കാം, പകരം ഒരു പ്രത്യേക പ്രാദേശിക ഇൻ്റർഫേസ് വിലാസത്തിലേക്ക് സജ്ജീകരിക്കുന്നു. ഒരു സെർവറായി ഉപയോഗിക്കുമ്പോൾ ഞങ്ങളുടെ സോക്ക് പ്രോഗ്രാമിന് ഒരു ഐപി വിലാസം (അല്ലെങ്കിൽ ഹോസ്റ്റ്നാമം) നൽകിയാൽ, ആ ഐപി വിലാസം ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിൻ്റെ പ്രാദേശിക ഐപി വിലാസമായി മാറുന്നു. ഉദാഹരണത്തിന്

സൂര്യൻ % സോക്ക് -s 140.252.1.29 8888

SLIP ഇൻ്റർഫേസിൽ (140.252.1.29) വരുന്ന കണക്ഷനുകളിലേക്ക് മാത്രം ഈ സെർവറിനെ പരിമിതപ്പെടുത്തുന്നു. netstat കമാൻഡ് ഔട്ട്പുട്ട് ഇനിപ്പറയുന്നവ കാണിക്കും:

Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)

സോളാരിസ് ഹോസ്റ്റിൽ നിന്നുള്ള ഒരു SLIP ചാനൽ വഴി ഞങ്ങൾ ഈ സെർവറിലേക്ക് കണക്റ്റുചെയ്യുകയാണെങ്കിൽ, അത് പ്രവർത്തിക്കും.

Proto Recv-Q അയയ്ക്കുക-Q പ്രാദേശിക വിലാസം വിദേശ വിലാസം (സംസ്ഥാനം)
tcp 0 0 140.252.1.29.8888 140.252.1.32.34614 സ്ഥാപിച്ചു
tcp 0 0 140.252.1.29.8888 *.* കേൾക്കുക

എന്നിരുന്നാലും, ഞങ്ങൾ ഹോസ്റ്റിൽ നിന്ന് ഇഥർനെറ്റ് (140.252.13) വഴി ഈ സെർവറിലേക്ക് കണക്റ്റുചെയ്യാൻ ശ്രമിക്കുകയാണെങ്കിൽ, കണക്ഷൻ അഭ്യർത്ഥന TCP മൊഡ്യൂൾ സ്വീകരിക്കില്ല. നമ്മൾ tcpdump ഉപയോഗിച്ച് നോക്കുകയാണെങ്കിൽ, ചിത്രം 18.21-ൽ കാണിച്ചിരിക്കുന്നതുപോലെ, SYN-ൽ ഒരു RST പ്രതികരണം ലഭിക്കുന്നത് കാണാം.

1 0.0 bsdi.1026 > sun.8888: S 3657920001:3657920001(0)
4096 വിജയിച്ചു
2 0.000859 (0.0009) sun.8888 > bsdi.1026: R 0:0 (0) ack 3657920002 win 0

ചിത്രം 18.21 സെർവറിൻ്റെ പ്രാദേശിക IP വിലാസത്തെ അടിസ്ഥാനമാക്കി കണക്ഷൻ അഭ്യർത്ഥനകൾ പരിമിതപ്പെടുത്തുന്നു.

സെർവറിൽ പ്രവർത്തിക്കുന്ന ഒരു ആപ്ലിക്കേഷൻ ഒരിക്കലും ഒരു കണക്ഷൻ അഭ്യർത്ഥന കാണില്ല - ആപ്ലിക്കേഷൻ വ്യക്തമാക്കിയ പ്രാദേശിക IP വിലാസത്തെ അടിസ്ഥാനമാക്കി കേർണലിലെ TCP മൊഡ്യൂളാണ് നിയന്ത്രണം നടപ്പിലാക്കുന്നത്.

വിദൂര ഐപി വിലാസ നിയന്ത്രണം

അധ്യായം 11 വിഭാഗത്തിൽ, നിർദ്ദിഷ്ട പ്രാദേശിക ഐപി വിലാസത്തിനും പോർട്ട് നമ്പറിനും പുറമെ ഒരു യുഡിപി സെർവറിന് വിദൂര ഐപി വിലാസവും പോർട്ട് നമ്പറും നിർണ്ണയിക്കാൻ കഴിയുമെന്ന് ഞങ്ങൾ കണ്ടു. RFC 793-ൽ വ്യക്തമാക്കിയിട്ടുള്ള ഇൻ്റർഫേസ് ഫംഗ്‌ഷനുകൾ, പൂർണ്ണമായി വ്യക്തമാക്കിയ റിമോട്ട് സോക്കറ്റ് (അങ്ങനെയെങ്കിൽ ഒരു നിർദ്ദിഷ്ട ക്ലയൻ്റിൽ നിന്നുള്ള ഒരു സജീവ ഓപ്പൺ അഭ്യർത്ഥന പ്രതീക്ഷിക്കുന്നു) അല്ലെങ്കിൽ ഒരു വ്യക്തമാക്കാത്ത റിമോട്ട് സോക്കറ്റ് (ഇതിൽ നിന്ന് ഒരു കണക്ഷൻ അഭ്യർത്ഥന) അടിസ്ഥാനമാക്കി ഒരു നിഷ്ക്രിയ ഓപ്പൺ നടത്താൻ സെർവറിനെ അനുവദിക്കുന്നു. ഏതെങ്കിലും ക്ലയൻ്റ് പ്രതീക്ഷിക്കുന്നു).

നിർഭാഗ്യവശാൽ, മിക്ക API-കളും അത്തരം കഴിവുകൾ നൽകുന്നില്ല. സെർവർ റിമോട്ട് സോക്കറ്റ് അനിയന്ത്രിതമായി വിടണം, ഒരു കണക്ഷൻ വരുന്നതിനായി കാത്തിരിക്കുക, തുടർന്ന് ക്ലയൻ്റിൻറെ IP വിലാസവും പോർട്ട് നമ്പറും പരിശോധിക്കുക.

ചിത്രം 18.22 മൂന്ന് തരത്തിലുള്ള വിലാസങ്ങളും ഒരു TCP സെർവറിന് സ്വയം സജ്ജമാക്കാൻ കഴിയുന്ന വിലാസ-ടു-പോർട്ട് ബന്ധങ്ങളും കാണിക്കുന്നു. എല്ലാ സാഹചര്യങ്ങളിലും, സെർവറിൻ്റെ അറിയപ്പെടുന്ന പോർട്ട് ആണ് lport, ലോക്കൽ ഇൻ്റർഫേസിൻ്റെ ഐപി വിലാസം ലോക്കൽ ഐപി ആയിരിക്കണം. പട്ടികയിൽ മൂന്ന് വരികൾ ദൃശ്യമാകുന്ന ക്രമം, ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന സ്വീകരിക്കുന്ന ലോക്കൽ എൻഡ്‌പോയിൻ്റിനെ നിർണ്ണയിക്കാൻ TCP മൊഡ്യൂൾ ശ്രമിക്കുന്ന ക്രമവുമായി പൊരുത്തപ്പെടുന്നു. പട്ടികയുടെ ആദ്യ വരി (പിന്തുണയുണ്ടെങ്കിൽ) ആദ്യം പരീക്ഷിച്ചു, തുടർന്ന് ശേഷിക്കുന്ന സ്പെസിഫിക്കേഷനുകൾ (വൈൽഡ്കാർഡുകളായി വ്യക്തമാക്കിയ IP വിലാസങ്ങളുള്ള അവസാന വരി) അവസാനമായി പരീക്ഷിച്ചു.

ചിത്രം 18.22 ടിസിപി സെർവറിനായുള്ള ലോക്കൽ, റിമോട്ട് ഐപി വിലാസങ്ങളും പോർട്ട് നമ്പറുകളും വ്യക്തമാക്കുന്നു.

ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന ക്യൂ

ഒരു കൺകറൻ്റ് സെർവർ ഓരോ ക്ലയൻ്റിനും സേവനം നൽകുന്ന ഒരു പുതിയ പ്രക്രിയ ആരംഭിക്കുന്നു, അതിനാൽ അടുത്ത ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന കൈകാര്യം ചെയ്യാൻ ലിസണിംഗ് സെർവർ എപ്പോഴും തയ്യാറായിരിക്കണം. മത്സരാധിഷ്ഠിത സെർവറുകൾ ഉപയോഗിക്കുന്നതിൻ്റെ പ്രധാന കാരണം ഇതാണ്. എന്നിരുന്നാലും, ലിസണിംഗ് സെർവർ ഒരു പുതിയ പ്രോസസ്സ് സൃഷ്‌ടിക്കുന്നതുപോലെയോ അല്ലെങ്കിൽ ഓപ്പറേറ്റിംഗ് സിസ്റ്റം മറ്റൊരു ഉയർന്ന മുൻഗണനയുള്ള പ്രോസസ്സ് പ്രോസസ്സ് ചെയ്യുന്ന തിരക്കിലായിരിക്കുമ്പോഴോ ഒന്നിലധികം കണക്ഷൻ അഭ്യർത്ഥനകൾ വരാൻ സാധ്യതയുണ്ട്. ലിസണിംഗ് ആപ്ലിക്കേഷൻ തിരക്കിലായിരിക്കുമ്പോൾ ഈ ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥനകൾ TCP എങ്ങനെയാണ് കൈകാര്യം ചെയ്യുന്നത്?

ബെർക്ക്ലി നടപ്പിലാക്കലുകൾ ഇനിപ്പറയുന്ന നിയമങ്ങൾ ഉപയോഗിക്കുന്നു.

  1. ഓരോ ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിനും ടിസിപിക്ക് അംഗീകരിക്കാൻ കഴിയുന്ന കണക്ഷനുകളുടെ ഒരു നിശ്ചിത ദൈർഘ്യമുള്ള ക്യൂ ഉണ്ട് ("മൂന്ന് തവണ ഹാൻഡ്‌ഷേക്ക്" പൂർത്തിയായി) എന്നാൽ ഇതുവരെ ആപ്ലിക്കേഷൻ അംഗീകരിച്ചിട്ടില്ല. ഒരു ടിസിപി കണക്ഷൻ സ്വീകരിക്കുന്നതും ഒരു ക്യൂവിൽ സ്ഥാപിക്കുന്നതും ആ ക്യൂവിൽ നിന്നുള്ള കണക്ഷനുകൾ സ്വീകരിക്കുന്ന ആപ്ലിക്കേഷനും തമ്മിൽ വേർതിരിച്ചറിയാൻ ശ്രദ്ധിക്കുക.
  2. ആപ്ലിക്കേഷൻ ഈ ക്യൂവിനുള്ള ഒരു പരിധി അല്ലെങ്കിൽ പരിധി വ്യക്തമാക്കുന്നു, ഇതിനെ സാധാരണയായി ബാക്ക്ലോഗ് എന്ന് വിളിക്കുന്നു. ഈ പരിധി 0 മുതൽ 5 വരെയുള്ള ശ്രേണിയിലായിരിക്കണം. (മിക്ക ആപ്ലിക്കേഷനുകളും പരമാവധി മൂല്യം 5 വ്യക്തമാക്കുന്നു.)
  3. ഒരു കണക്ഷൻ അഭ്യർത്ഥന (SYN സെഗ്‌മെൻ്റ്) എത്തുമ്പോൾ, ആ ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിനായി നിലവിൽ ക്യൂ ചെയ്‌തിരിക്കുന്ന കണക്ഷനുകളുടെ നിലവിലെ എണ്ണം ടിസിപി നോക്കുന്നു, അത് കണക്ഷൻ സ്വീകരിക്കാനാകുമോ എന്ന് നിർണ്ണയിക്കുന്നു. ബാക്ക്‌ലോഗ് മൂല്യം ആയിരിക്കുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിക്കുന്നു അപേക്ഷയിൽ വ്യക്തമാക്കിയത്, പരമാവധി ആയിരിക്കും, അതായത്, ഈ പോയിൻ്റിനായുള്ള പരമാവധി എണ്ണം കണക്ഷനുകൾ ക്യൂ ചെയ്യാൻ അനുവദിച്ചിരിക്കുന്നു, ഇത് വളരെ ലളിതമല്ലെങ്കിലും. പരമ്പരാഗത ബെർക്ക്‌ലി സിസ്റ്റങ്ങളിലും സോളാരിസ് 2.2-ലും ക്യൂവുചെയ്യാനാകുന്ന ബാക്ക്‌ലോഗ് മൂല്യവും യഥാർത്ഥ പരമാവധി എണ്ണം കണക്ഷനുകളും തമ്മിലുള്ള ബന്ധം ചിത്രം 18.23 കാണിക്കുന്നു.

    ബാക്ക്ലോഗ് മൂല്യം

    പരമാവധി തുകക്യൂവിലുള്ള കണക്ഷനുകൾ

    പരമ്പരാഗത ബിഎസ്ഡി

    ചിത്രം 18.23 ഒരു ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിനായി അംഗീകൃത കണക്ഷനുകളുടെ പരമാവധി എണ്ണം.

    ഈ ബാക്ക്‌ലോഗ് മൂല്യം ഒരൊറ്റ ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിനായി ക്യൂ ചെയ്‌തിരിക്കുന്ന പരമാവധി കണക്ഷനുകളെ മാത്രമേ സൂചിപ്പിക്കുന്നുള്ളൂവെന്ന് ഓർക്കുക, ഇവയെല്ലാം ഇതിനകം തന്നെ ടിസിപി അംഗീകരിച്ചു, കൂടാതെ ആപ്ലിക്കേഷൻ സ്വീകരിക്കാൻ കാത്തിരിക്കുകയാണ്. ബാക്ക്‌ലോഗ് മൂല്യം സിസ്റ്റത്തിന് സ്ഥാപിക്കാൻ കഴിയുന്ന പരമാവധി കണക്ഷനുകളിലോ ഒരു കൺകറൻ്റ് സെർവറിന് സേവിക്കാൻ കഴിയുന്ന ക്ലയൻ്റുകളുടെ എണ്ണത്തിലോ ഒരു സ്വാധീനവും ചെലുത്തുന്നില്ല.

    ഈ കണക്കിലെ സോളാരിസിൻ്റെ മൂല്യങ്ങൾ നമ്മൾ പ്രതീക്ഷിക്കുന്നത് തന്നെയാണ്. BSD-യുടെ പരമ്പരാഗത മൂല്യങ്ങൾ (ചില അജ്ഞാതമായ കാരണങ്ങളാൽ) ബാക്ക്‌ലോഗ് മൂല്യം 3-നെ 2 പ്ലസ് 1 കൊണ്ട് ഹരിച്ചതിന് തുല്യമാണ്.

  4. ഒരു പുതിയ കണക്ഷനായി നൽകിയിരിക്കുന്ന ലിസണിംഗ് എൻഡ് പോയിൻ്റിനായി ക്യൂവിൽ ഇടമുണ്ടെങ്കിൽ (ചിത്രം 18.23 കാണുക), TCP ഘടകം ഇൻകമിംഗ് SYN അംഗീകരിക്കുകയും (ACK) കണക്ഷൻ സ്ഥാപിക്കുകയും ചെയ്യുന്നു. ലിസണിംഗ് എൻഡ്‌പോയിൻ്റുള്ള സെർവർ ആപ്ലിക്കേഷൻ "മൂന്ന് തവണ ഹാൻഡ്‌ഷെക്കിൻ്റെ" മൂന്നാം സെഗ്‌മെൻ്റ് ലഭിക്കുന്നതുവരെ ഈ പുതിയ കണക്ഷൻ കാണില്ല. പകരമായി, പുതിയ കണക്ഷനെ കുറിച്ച് സെർവർ ആപ്ലിക്കേഷനെ അറിയിക്കുന്നതിന് മുമ്പ്, ക്ലയൻ്റിൻ്റെ സജീവമായ ഓപ്പൺ വിജയകരമായി പൂർത്തിയാകുമ്പോൾ, ഡാറ്റ സ്വീകരിക്കാൻ സെർവർ തയ്യാറാണെന്ന് ക്ലയൻ്റ് പരിഗണിച്ചേക്കാം. (ഇത് സംഭവിക്കുകയാണെങ്കിൽ, ടിസിപി സെർവർ ഇൻകമിംഗ് ഡാറ്റയെ ക്യൂവിൽ നിർത്തും.)
  5. ഒരു പുതിയ കണക്ഷൻ ക്യൂവുചെയ്യാൻ മതിയായ ഇടമില്ലെങ്കിൽ, TCP സ്വീകരിച്ച SYN അവഗണിക്കുന്നു. പ്രതികരണമായി ഒന്നും അയച്ചിട്ടില്ല (ആർഎസ്ടി സെഗ്മെൻ്റ് പോലും അയച്ചിട്ടില്ല). ലിസണിംഗ് സെർവറിന് ഇതിനകം തന്നെ സ്വീകാര്യമായ ചില കണക്ഷനുകൾ സ്വീകരിക്കാൻ വിസമ്മതിക്കുന്നില്ലെങ്കിൽ, ക്യൂവിൽ കപ്പാസിറ്റി നിറഞ്ഞു, ക്ലയൻ്റിൻറെ സജീവമായ ഓപ്പൺ കാലഹരണപ്പെടും.

സോക്ക് പ്രോഗ്രാം ഉപയോഗിച്ച് നമുക്ക് ഈ സ്ക്രിപ്റ്റ് കാണാൻ കഴിയും. ഏതെങ്കിലും കണക്ഷൻ അഭ്യർത്ഥന സ്വീകരിക്കുന്നതിന് മുമ്പ്, ഒരു ലിസണിംഗ് എൻഡ്‌പോയിൻ്റ് സൃഷ്‌ടിച്ചതിന് ശേഷം താൽക്കാലികമായി നിർത്താൻ പറയുന്ന ഒരു പുതിയ ഓപ്‌ഷൻ ( -O) ഉപയോഗിച്ച് ഇത് പ്രവർത്തിപ്പിക്കാം. ഈ താൽക്കാലികമായി നിർത്തുമ്പോൾ ഞങ്ങൾ ഒന്നിലധികം ക്ലയൻ്റുകൾ ആരംഭിക്കുകയാണെങ്കിൽ, അംഗീകൃത കണക്ഷനുകൾ ക്യൂ ചെയ്യാൻ സെർവർ നിർബന്ധിതരാകും, കൂടാതെ tcpdump കമാൻഡ് ഉപയോഗിച്ച് എന്താണ് സംഭവിക്കുന്നതെന്ന് ഞങ്ങൾ കാണും.

bsdi % sock -s -v -q1 -O30 5555

-q1 ഓപ്ഷൻ ലിസണിംഗ് എൻഡ്‌പോയിൻ്റിൻ്റെ ബാക്ക്‌ലോഗ് 1 ആയി സജ്ജീകരിക്കുന്നു, ഇത് ഒരു പരമ്പരാഗത ബിഎസ്‌ഡി സിസ്റ്റത്തിൽ രണ്ട് കണക്ഷൻ അഭ്യർത്ഥനകളുമായി പൊരുത്തപ്പെടും (ചിത്രം 18.23). -O30 ഓപ്‌ഷൻ, ക്ലയൻ്റിൽ നിന്ന് ഏതെങ്കിലും കണക്ഷൻ സ്വീകരിക്കുന്നതിന് മുമ്പ് പ്രോഗ്രാമിനെ 30 സെക്കൻഡ് "ഉറങ്ങാൻ" ഇടയാക്കുന്നു. ക്യൂവിൽ നിറയുന്ന കുറച്ച് ക്ലയൻ്റുകൾ ആരംഭിക്കാൻ ഇത് ഞങ്ങൾക്ക് 30 സെക്കൻഡ് നൽകുന്നു. ആതിഥേയ സൂര്യനിൽ ഞങ്ങൾ നാല് ക്ലയൻ്റുകളെ ആരംഭിക്കുന്നു.

ചിത്രം 18.24 tcpdump പ്രോഗ്രാമിൻ്റെ ഔട്ട്‌പുട്ട് കാണിക്കുന്നു, ഈ ഔട്ട്‌പുട്ട് ആദ്യത്തെ ക്ലയൻ്റിൽ നിന്നുള്ള ആദ്യത്തെ SYN-ൽ ആരംഭിക്കുന്നു. (ഞങ്ങൾ വിൻഡോ സൈസ് ഡിക്ലറേഷനുകളും എംഎസ്എസ് ഡിക്ലറേഷനുകളും നീക്കംചെയ്‌തു. ഒരു ടിസിപി കണക്ഷൻ സ്ഥാപിക്കുമ്പോൾ ക്ലയൻ്റ് പോർട്ട് നമ്പറുകളും ഞങ്ങൾ ബോൾഡായി ഹൈലൈറ്റ് ചെയ്തിട്ടുണ്ട് - "മൂന്ന് തവണ ഹാൻഡ്‌ഷേക്ക്".)

പോർട്ട് 1090-ൽ നിന്ന് വരുന്ന ക്ലയൻ്റിൽനിന്നുള്ള ആദ്യ കണക്ഷൻ അഭ്യർത്ഥന TCP മൊഡ്യൂളിന് ലഭിക്കുന്നു (സെഗ്‌മെൻ്റുകൾ 1-3). പോർട്ട് 1091-ലെ ക്ലയൻ്റിൽ നിന്നുള്ള രണ്ടാമത്തെ കണക്ഷൻ അഭ്യർത്ഥനയും TCP മൊഡ്യൂൾ (സെഗ്‌മെൻ്റുകൾ 4-6) സ്വീകരിക്കുന്നു. സെർവർ ആപ്ലിക്കേഷൻ ഇപ്പോഴും ഉറങ്ങുകയാണ്, കണക്ഷനുകളൊന്നും സ്വീകരിച്ചിട്ടില്ല. എല്ലാം ചെയ്തത് കേർണലിലെ TCP മൊഡ്യൂൾ ആണ്. രണ്ട് ക്ലയൻ്റുകൾ സജീവമായ ഒരു ഓപ്പണിംഗ് വിജയകരമായി നടത്തി എന്നതും ശ്രദ്ധിക്കേണ്ടതാണ്, അതായത്, "മൂന്ന് തവണ ഹാൻഡ്‌ഷേക്ക്" വിജയകരമായി പൂർത്തിയാക്കി.

1 0.0 സൂര്യൻ. 1090 > bsdi.7777: S 1617152000:1617152000(0)
2 0.002310 (0.0023) bsdi.7777 > സൂര്യൻ. 1090 : എസ് 4164096001:4164096001(0)
3 0.003098 (0.0008) സൂര്യൻ. 1090 > bsdi.7777: . എക്ക് 1617152001
എക്ക് 1
4 4.291007 (4.2879) സൂര്യൻ. 1091 > bsdi.7777: S 1617792000:1617792000(0)
5 4.293349 (0.0023) bsdi.7777 > സൂര്യൻ. 1091 : എസ് 4164672001:4164672001(0)
എക്ക് 1617792001
6 4.294167 (0.0008) സൂര്യൻ. 1091 > bsdi.7777: . എക്ക് 1
7 7.131981 (2.8378) സൂര്യൻ.1092 >
8 10.556787 (3.4248) sun.1093 > bsdi.7777: S 1618688000:1618688000(0)
9 12.695916 (2.1391) sun.1092 > bsdi.7777: S 1618176000:1618176000(0)
10 16.195772 (3.4999) സൂര്യൻ.1093 >
11 24.695571 (8.4998) sun.1092 > bsdi.7777: S 1618176000:1618176000(0)
12 28.195454 (3.4999) സൂര്യൻ. 1093 > bsdi.7777: S 1618688000:1618688000(0)
13 28.197810 (0.0024) bsdi.7777 > സൂര്യൻ. 1093 : എസ് 4167808001:4167808001(0)
14 28.198639 (0.0008) സൂര്യൻ. 1093 > bsdi.7777: . ack 1618688001
എക്ക് 1
15 48.694931 (20.4963) സൂര്യൻ. 1092 > bsdi.7777: S 1618176000:1618176000(0)
16 48.697292 (0.0024) bsdi.7777 > സൂര്യൻ. 1092 : എസ് 4170496001:4170496001(0)
എക്ക് 1618176001
17 48.698145 (0.0009) സൂര്യൻ. 1092 > bsdi.7777: . എക്ക് 1

ചിത്രം 18.24 ബാക്ക്‌ലോഗ് ഉപയോഗിക്കുന്നതിനുള്ള ഒരു ഉദാഹരണത്തിനായി tcpdump-ൽ നിന്നുള്ള ഔട്ട്‌പുട്ട്.

സെഗ്‌മെൻ്റ് 7-ലും (പോർട്ട് 1092) നാലാമത്തേതും സെഗ്‌മെൻ്റ് 8-ലും (പോർട്ട് 1093) ഒരു മൂന്നാം ക്ലയൻ്റ് ആരംഭിക്കാൻ ഞങ്ങൾ ശ്രമിച്ചു. രണ്ട് SYN-കളും TCP അവഗണിച്ചു, കാരണം ആ ശ്രവണ എൻഡ് പോയിൻ്റിൻ്റെ ക്യൂ നിറഞ്ഞു. രണ്ട് ക്ലയൻ്റുകളും സെഗ്‌മെൻ്റുകൾ 9, 10, 11, 12, 15 സെഗ്‌മെൻ്റുകളിൽ അവരുടെ SYN-കൾ വീണ്ടും സംപ്രേഷണം ചെയ്തു. സെർവറിൻ്റെ 30-സെക്കൻഡ് താൽക്കാലികമായി നിർത്തിയതിനാൽ സെർവർ രണ്ട് കണക്ഷനുകൾ ഉപേക്ഷിച്ചതിനാൽ നാലാമത്തെ ക്ലയൻ്റിൻറെ മൂന്നാമത്തെ റീട്രാൻസ്മിഷൻ അംഗീകരിച്ചു (സെഗ്‌മെൻ്റുകൾ 12-14). ക്യൂ ക്ലിയർ ചെയ്യുന്നു. (ഇത് സംഭവിച്ചതിൻ്റെ കാരണം, ഈ കണക്ഷൻ 28.19-ന് സെർവർ സ്വീകരിച്ചതാണ്, അല്ലാതെ 30-ൽ കൂടുതലുള്ള സമയത്തല്ല; ആദ്യത്തെ ക്ലയൻ്റ് ആരംഭിക്കാൻ കുറച്ച് സെക്കൻഡുകൾ എടുത്തതിനാലാണ് ഇത് സംഭവിച്ചത് [സെഗ്മെൻ്റ് 1, ഔട്ട്പുട്ടിൽ ആരംഭിക്കുന്ന സമയം] സെർവർ ആരംഭിച്ചതിന് ശേഷം.) മൂന്നാമത്തെ ക്ലയൻ്റിൻറെ നാലാമത്തെ റീട്രാൻസ്മിഷനും ലഭിച്ചു (സെഗ്‌മെൻ്റുകൾ 15-17). 30-സെക്കൻഡ് താൽക്കാലികമായി നിർത്തുന്നതിന് ഇടയിലുള്ള സമയത്തിൻ്റെ യാദൃശ്ചികത കാരണം മൂന്നാമത്തെ ക്ലയൻ്റിൻ്റെ (പോർട്ട് 1092) കണക്ഷന് മുമ്പ് നാലാമത്തെ ക്ലയൻ്റിൻറെ (പോർട്ട് 1093) കണക്ഷൻ സെർവർ സ്വീകരിച്ചു. പുനഃസംപ്രേക്ഷണംകക്ഷി.

FIFO (ഫസ്റ്റ് ഇൻ, ഫസ്റ്റ് ഔട്ട്) തത്വമനുസരിച്ച്, സ്വീകാര്യമായ കണക്ഷനുകളുടെ ക്യൂ ആപ്ലിക്കേഷൻ പ്രോസസ്സ് ചെയ്യുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിക്കാം. അതിനാൽ, 1090, 1091 പോർട്ടുകളിൽ TCP ഒരു അപേക്ഷ സ്വീകരിച്ച ശേഷം, പോർട്ട് 1090-ലും പിന്നീട് 1091-ൽ ഒരു കണക്ഷനും ലഭിക്കുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിക്കുന്നു. എന്നിരുന്നാലും, മിക്ക ബെർക്ക്‌ലി നടപ്പിലാക്കലുകളിലും ഒരു ബഗ് ഉണ്ട്, അത് LIFO ഓർഡർ ഉപയോഗിക്കുന്നതിന് കാരണമാകുന്നു. (അവസാനം അകത്ത്, ആദ്യം പുറത്ത്). ഈ ബഗ് പരിഹരിക്കാൻ നിർമ്മാതാക്കൾ പലതവണ ശ്രമിച്ചുവെങ്കിലും SunOS 4.1.3 പോലുള്ള സിസ്റ്റങ്ങളിൽ ഇത് ഇപ്പോഴും നിലവിലുണ്ട്.

ക്യൂ നിറഞ്ഞിരിക്കുമ്പോൾ TCP ഇൻകമിംഗ് SYN അവഗണിക്കുകയും ഒരു പിശക് കാരണം RST ഉപയോഗിച്ച് പ്രതികരിക്കാതിരിക്കുകയും ചെയ്യുന്നു. ആപ്ലിക്കേഷനോ ഓപ്പറേറ്റിംഗ് സിസ്റ്റമോ തിരക്കിലായതിനാൽ സാധാരണയായി ക്യൂ നിറഞ്ഞിരിക്കുന്നു, അതിനാൽ അപ്ലിക്കേഷന് ഇൻകമിംഗ് കണക്ഷനുകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. ചുരുങ്ങിയ സമയത്തിനുള്ളിൽ ഈ അവസ്ഥ മാറാം. എന്നിരുന്നാലും, TCP സെർവർ ഒരു പുനഃസജ്ജീകരണത്തോടെ പ്രതികരിച്ചാൽ, ക്ലയൻ്റ് സജീവമായ തുറക്കൽ തടസ്സപ്പെടും (സെർവർ ആരംഭിച്ചിട്ടില്ലെങ്കിൽ ഇത് കൃത്യമായി സംഭവിക്കും). SYN അവഗണിക്കപ്പെട്ടതിനാൽ, ഒരു പുതിയ കണക്ഷനായി ക്യൂവിൽ ഇടമുണ്ടാകുമെന്ന പ്രതീക്ഷയിൽ, TCP ക്ലയൻ്റ് പിന്നീട് SYN വീണ്ടും സംപ്രേക്ഷണം ചെയ്യാൻ നിർബന്ധിതരാകും.

ഈ അവസരത്തിൽ ഒന്ന് കൂടി ചർച്ച ചെയ്യേണ്ടത് ആവശ്യമാണ് പ്രധാനപ്പെട്ട വിശദാംശങ്ങൾ, ഇത് മിക്കവാറും എല്ലാ TCP/IP നടപ്പിലാക്കലുകളിലും ഉണ്ട്. ക്യൂവിൽ ഇടമുണ്ടെങ്കിൽ, ടിസിപി ഒരു ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന (SYN) സ്വീകരിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, അഭ്യർത്ഥന ആരിൽ നിന്നാണ് വന്നതെന്ന് അപ്ലിക്കേഷന് കാണാൻ കഴിയില്ല (ഉറവിട ഐപി വിലാസവും ഉറവിട പോർട്ട് നമ്പറും). ഇത് ടിസിപിക്ക് ആവശ്യമില്ല, ഇത് നടപ്പിലാക്കുന്നതിൽ ഉപയോഗിക്കുന്ന ഒരു പൊതു സാങ്കേതികത മാത്രമാണ്. TLI (അധ്യായം 1-ൻ്റെ വിഭാഗം) പോലുള്ള ഒരു API, ഒരു കണക്ഷൻ അഭ്യർത്ഥന വന്നതായി ഒരു അപ്ലിക്കേഷനെ അറിയിക്കുകയും കണക്ഷൻ സ്വീകരിക്കണോ വേണ്ടയോ എന്ന് തിരഞ്ഞെടുക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുകയും ചെയ്യുന്നുവെങ്കിൽ, TCP ഉപയോഗിക്കുമ്പോൾ അത് ആപ്ലിക്കേഷനോട് പറയുമ്പോൾ അങ്ങനെയാണ്. ഒരു കണക്ഷൻ ഇപ്പോൾ എത്തിയിരിക്കുന്നു, വാസ്തവത്തിൽ TCP ഇതിനകം തന്നെ "മൂന്ന് തവണ ഹാൻഡ്‌ഷേക്ക്" പൂർത്തിയാക്കി! മറ്റ് ഗതാഗത പാളികളിൽ എത്തിച്ചേരുന്നതും സ്വീകരിച്ചതുമായ കണക്ഷനുകൾ തമ്മിൽ വേർതിരിച്ചറിയാൻ കഴിയും (OSI ഗതാഗത പാളി), എന്നിരുന്നാലും TCP ഈ സവിശേഷത നൽകുന്നില്ല.

സോളാരിസ് 2.2 ഒരു ഇൻകമിംഗ് കണക്ഷൻ അഭ്യർത്ഥന സ്വീകരിക്കുന്നതിൽ നിന്ന് ടിസിപിയെ തടയുന്ന ഒരു ഓപ്ഷൻ നൽകുന്നു (ആപ്ലിക്കേഷൻ സെക്ഷനിലെ tcp_eager_listeners E-ലെ).

ഈ സ്വഭാവം അർത്ഥമാക്കുന്നത് ടിസിപി സെർവറിന് ഒരു സജീവ ക്ലയൻ്റ് തുറക്കുന്നത് തടസ്സപ്പെടുത്താൻ കഴിയില്ല എന്നാണ്. ഒരു പുതിയ ക്ലയൻ്റിൽ നിന്നുള്ള ഒരു കണക്ഷൻ സെർവർ ആപ്ലിക്കേഷനിൽ എത്തുമ്പോൾ, TCP "ത്രീ-വേ ഹാൻഡ്‌ഷേക്ക്" ഇതിനകം പൂർത്തിയായി കൂടാതെ ക്ലയൻ്റിൻ്റെ സജീവ കണ്ടെത്തൽ വിജയകരമായി പൂർത്തീകരിച്ചു. സെർവർ പിന്നീട് ക്ലയൻ്റിൻ്റെ ഐപി വിലാസവും പോർട്ട് നമ്പറും നോക്കി, ആ ക്ലയൻ്റ് സെർവ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നില്ലെന്ന് തീരുമാനിക്കുകയാണെങ്കിൽ, എല്ലാ സെർവറുകൾക്കും കണക്ഷൻ ക്ലോസ് ചെയ്യാം (അത് ഒരു FIN അയയ്‌ക്കും) അല്ലെങ്കിൽ കണക്ഷൻ റീസെറ്റ് ചെയ്യാം (അത് ഒരു RST അയയ്‌ക്കും) . എന്തായാലും, സജീവമായ ഓപ്പണിംഗ് പൂർത്തിയായതിനാൽ സെർവറിൽ എല്ലാം ശരിയാണെന്ന് ക്ലയൻ്റ് അനുമാനിക്കും, കൂടാതെ, ഒരുപക്ഷേ, സെർവറിലേക്ക് ഒരു തരത്തിലുള്ള അഭ്യർത്ഥന ഇതിനകം അയച്ചിട്ടുണ്ട്.

ഹ്രസ്വമായ നിഗമനങ്ങൾ

TCP ഉപയോഗിച്ച് രണ്ട് പ്രക്രിയകൾ ആശയവിനിമയം നടത്തുന്നതിന് മുമ്പ്, അവ പരസ്പരം ഒരു ബന്ധം സ്ഥാപിക്കണം. അവ തമ്മിലുള്ള ജോലി പൂർത്തിയാകുമ്പോൾ, ബന്ധം തകർക്കണം. "ത്രീ-ഹോപ്പ് ഹാൻഡ്‌ഷേക്ക്" ഉപയോഗിച്ച് ഒരു കണക്ഷൻ എങ്ങനെ സ്ഥാപിക്കപ്പെടുന്നുവെന്നും ഫോർ-ഹോപ്പ് ഹാൻഡ്‌ഷേക്ക് ഉപയോഗിച്ച് അത് എങ്ങനെ തകർക്കപ്പെടുന്നുവെന്നും ഈ അധ്യായം വിശദീകരിക്കുന്നു.

TCP തലക്കെട്ടിലെ എല്ലാ ഫീൽഡുകളും കാണിക്കാൻ ഞങ്ങൾ tcpdump ഉപയോഗിച്ചു. ഒരു സ്ഥാപിത കണക്ഷൻ എങ്ങനെ കാലഹരണപ്പെടും, ഒരു കണക്ഷൻ എങ്ങനെ പുനഃസജ്ജമാക്കാം, പകുതി-ഓപ്പൺ കണക്ഷന് എന്ത് സംഭവിക്കും, കൂടാതെ TCP എങ്ങനെയാണ് പകുതി-ക്ലോസ്ഡ് മോഡ്, ഒരേസമയം തുറക്കുന്നതും ഒരേസമയം അടയ്ക്കുന്നതും നൽകുന്നത് എന്നിവയും ഞങ്ങൾ പരിശോധിച്ചു.

ടിസിപിയുടെ പ്രവർത്തനം മനസിലാക്കാൻ, ടിസിപിയുടെ അടിസ്ഥാന ഡയഗ്രം പരിഗണിക്കേണ്ടത് ആവശ്യമാണ്. ഒരു കണക്ഷൻ എങ്ങനെ സ്ഥാപിക്കുകയും അവസാനിപ്പിക്കുകയും ചെയ്യുന്നു, ഈ പ്രക്രിയയിൽ സംസ്ഥാനത്ത് എന്ത് മാറ്റങ്ങളാണ് സംഭവിക്കുന്നതെന്ന് ഞങ്ങൾ പോയിൻ്റ് ബൈ പോയിൻ്റ് പരിശോധിച്ചു. ടിസിപി സെർവറുകൾ എങ്ങനെ ടിസിപി കണക്ഷനുകൾ സ്ഥാപിക്കുന്നുവെന്നും ഞങ്ങൾ പരിശോധിച്ചു.

ടിസിപി കണക്ഷനുകൾ 4 പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് അദ്വിതീയമായി തിരിച്ചറിയുന്നു: പ്രാദേശിക ഐപി വിലാസം, പ്രാദേശിക പോർട്ട് നമ്പർ, റിമോട്ട് ഐപി വിലാസം, റിമോട്ട് പോർട്ട് നമ്പർ. കണക്ഷൻ തകരാറിലാണെങ്കിൽ, ഒരു വശം ഇപ്പോഴും കണക്ഷൻ ഓർത്തിരിക്കണം, ഈ സാഹചര്യത്തിൽ TIME_WAIT മോഡ് പ്രാബല്യത്തിലാണെന്ന് ഞങ്ങൾ പറയുന്നു. ഈ നടപ്പാക്കലിനായി അംഗീകരിച്ച എംഎസ്എൽ സമയത്തിൻ്റെ ഇരട്ടി കാലഹരണപ്പെട്ടതിന് ശേഷം, ഈ മോഡിൽ പ്രവേശിച്ച് ഈ പാർട്ടിക്ക് ഒരു സജീവ ഓപ്പൺ നടത്താൻ കഴിയുമെന്ന് നിയമം പറയുന്നു.

വ്യായാമങ്ങൾ

  1. പ്രാരംഭ സീക്വൻസ് നമ്പർ (ISN) സാധാരണയായി 1 ആയി സജ്ജീകരിക്കുകയും ഓരോ പകുതി സെക്കൻഡിലും 64000 വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നുവെന്നും ഓരോ തവണയും സജീവമായി തുറക്കുമെന്നും ഞങ്ങൾ വിഭാഗത്തിൽ പറഞ്ഞു. ഇതിനർത്ഥം ISN-ലെ ഏറ്റവും കുറഞ്ഞ പ്രാധാന്യമുള്ള മൂന്ന് അക്കങ്ങൾ എല്ലായ്പ്പോഴും 001 ആയിരിക്കും. എന്നിരുന്നാലും, ചിത്രം 18.3-ൽ, ഓരോ ദിശയ്ക്കും ഈ ഏറ്റവും കുറഞ്ഞ മൂന്ന് അക്കങ്ങൾ 521 ആണ്. ഇത് എങ്ങനെ സംഭവിച്ചു?
  2. ചിത്രം 18.15 ൽ, ഞങ്ങൾ 12 പ്രതീകങ്ങൾ അച്ചടിച്ചു, പക്ഷേ TCP 13 ബൈറ്റുകൾ അയച്ചതായി കണ്ടു. ചിത്രം 18.16 ൽ, ഞങ്ങൾ 8 പ്രതീകങ്ങൾ അച്ചടിച്ചു, പക്ഷേ TCP അയച്ചത് 10 ബൈറ്റുകൾ. എന്തുകൊണ്ടാണ് ആദ്യ കേസിൽ 1 ബൈറ്റും രണ്ടാമത്തേതിൽ 2 ബൈറ്റും ചേർത്തത്?
  3. പകുതി തുറന്ന കണക്ഷനും പകുതി അടച്ച കണക്ഷനും തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?
  4. ഞങ്ങൾ സോക്ക് പ്രോഗ്രാം ഒരു സെർവറായി ആരംഭിക്കുകയും തുടർന്ന് അതിൻ്റെ പ്രവർത്തനത്തെ തടസ്സപ്പെടുത്തുകയും ചെയ്താൽ (അതിലേക്ക് ക്ലയൻ്റുകളൊന്നും ബന്ധിപ്പിച്ചിട്ടില്ലെങ്കിൽ), ഞങ്ങൾക്ക് ഉടൻ തന്നെ സെർവർ പുനരാരംഭിക്കാം. ഇത് 2MSL കാത്തിരിപ്പ് നിലയിലായിരിക്കില്ല എന്നാണ് ഇതിനർത്ഥം. ഒരു സംസ്ഥാന പരിവർത്തന ഡയഗ്രം അനുസരിച്ച് ഇത് വിശദീകരിക്കുക.
  5. 2MSL വെയിറ്റ് സ്റ്റേറ്റിൽ പോർട്ട് ഒരു കണക്ഷൻ്റെ ഭാഗമാകുമ്പോൾ ഒരു ക്ലയൻ്റിന് അതേ ലോക്കൽ പോർട്ട് നമ്പർ വീണ്ടും ഉപയോഗിക്കാൻ കഴിയില്ലെന്ന് വിഭാഗത്തിൽ ഞങ്ങൾ കാണിച്ചു. എന്നിരുന്നാലും, ടൈം സെർവറിലേക്ക് കണക്റ്റുചെയ്യുന്ന ഒരു ക്ലയൻ്റ് ആയി സോക്ക് പ്രോഗ്രാം തുടർച്ചയായി രണ്ടുതവണ പ്രവർത്തിപ്പിക്കുകയാണെങ്കിൽ, നമുക്ക് അതേ പ്രാദേശിക പോർട്ട് നമ്പർ ഉപയോഗിക്കാം. കൂടാതെ, 2MSL വെയിറ്റ് സ്റ്റേറ്റിലുള്ള ഒരു പുതിയ കണക്ഷൻ നമുക്ക് സൃഷ്ടിക്കാൻ കഴിയും. ഇത് എങ്ങനെ സംഭവിക്കുന്നു?

    സൂര്യൻ % സോക്ക് -വി ബിഎസ്ഡി പകൽ സമയം

    ബുധൻ ജൂലൈ 7 07:54:51 1993
    പിയർ വഴി കണക്ഷൻ അടച്ചു

    സൂര്യൻ % sock -v -b1163 bsdi പകൽ സമയം പുനരുപയോഗംഅതേ പ്രാദേശിക പോർട്ട് നമ്പർ
    140.252.13.33.1163 മുതൽ 140.252.13.35.13 വരെ ബന്ധിപ്പിച്ചു
    ബുധൻ ജൂലൈ 7 07:55:01 1993
    പിയർ വഴി കണക്ഷൻ അടച്ചു

  6. വിഭാഗത്തിൻ്റെ അവസാനം, ഞങ്ങൾ FIN_WAIT_2 അവസ്ഥ വിവരിച്ചപ്പോൾ, ഏകദേശം 11 മിനിറ്റിന് ശേഷം ആപ്ലിക്കേഷൻ പൂർണ്ണമായ ഷട്ട്ഡൗൺ (പകുതി അടച്ചിട്ടില്ല) പൂർത്തിയാക്കിയാൽ, മിക്ക നിർവ്വഹണങ്ങളും ഈ അവസ്ഥയിൽ നിന്ന് CLOSED അവസ്ഥയിലേക്ക് കണക്ഷൻ നീക്കുമെന്ന് ഞങ്ങൾ പ്രസ്താവിച്ചു. മറുവശം (CLOSE_WAIT അവസ്ഥയിൽ) ക്ലോസ് ചെയ്യുന്നതിന് 12 മിനിറ്റ് കാത്തിരിക്കുകയാണെങ്കിൽ (അതിൻ്റെ FIN അയയ്ക്കുന്നു), FIN-നോടുള്ള പ്രതികരണമായി അതിൻ്റെ TCP-ന് എന്ത് ലഭിക്കും?
  7. ഒരു ടെലിഫോൺ സംഭാഷണത്തിലെ ഏത് കക്ഷിയാണ് സജീവമായ ഓപ്പണിംഗ്, ഏത് നിഷ്ക്രിയ ഓപ്പണിംഗ് ചെയ്യുന്നു? ഒരേസമയം തുറക്കൽ സാധ്യമാണോ? ഒരേ സമയം അടയ്ക്കാൻ കഴിയുമോ?
  8. ചിത്രം 18.6-ൽ ഞങ്ങൾ ARP അഭ്യർത്ഥനയോ ARP പ്രതികരണമോ കണ്ടില്ല. എന്നിരുന്നാലും, svr4 ഹോസ്റ്റിൻ്റെ ഹാർഡ്‌വെയർ വിലാസം bsdi ARP കാഷെയിലായിരിക്കണം. ഈ ഇനം ARP കാഷെയിൽ ഇല്ലെങ്കിൽ ഈ ചിത്രത്തിൽ എന്ത് മാറ്റമുണ്ടാകും?
  9. tcpdump കമാൻഡിൽ നിന്നുള്ള ഇനിപ്പറയുന്ന ഔട്ട്പുട്ട് വിശദീകരിക്കുക. ചിത്രം 18.13-മായി താരതമ്യം ചെയ്യുക.

    1 0.0 solaris.32990 > bsdi.discard: S 40140288:40140288 (0)
    8760 വിജയിക്കുക
    2 0.003295 (0.0033) bsdi.discard > solaris.32990: S 4208081409:4208081409 (0)
    ack 40140289 വിജയി 4096

    3 0.419991 (0.4167) solaris.32990 > bsdi.discard: P 1:257 (256) ack 1 win 9216
    4 0.449852 (0.0299) solaris.32990 > bsdi.discard: F 257:257 (0) ack 1 win 9216
    5 0.451965 (0.0021) bsdi.discard > solaris.32990: . 258 വിജയം 3840
    6 0.464569 (0.0126) bsdi.discard > solaris.32990: F 1:1 (0) ack 258 win 4096
    7 0.720031 (0.2555) സോളാരിസ്.32990 > bsdi.discard: . ack 2 വിജയം 9216

  10. എന്തുകൊണ്ട് ചിത്രം 18.4-ലെ സെർവർ, ക്ലയൻ്റിൻറെ FIN-ലേക്ക് ACK-യെ അതിൻ്റെ സ്വന്തം FIN-മായി സംയോജിപ്പിക്കില്ല, അതുവഴി സെഗ്‌മെൻ്റുകളുടെ എണ്ണം മൂന്നായി കുറയ്ക്കുന്നു?
  11. ചിത്രം 18.16 ൽ, RST സീക്വൻസ് നമ്പർ 26368002 ആയിരിക്കുന്നത് എന്തുകൊണ്ട്?
  12. എന്നോട് പറയൂ, TCP-ൻ്റെ MTU-നുള്ള ലിങ്ക് ലെയറിലേക്കുള്ള അഭ്യർത്ഥന ലെയറിംഗിൻ്റെ തത്വത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണോ?
  13. പോർട്ട് നമ്പർ അടിസ്ഥാനമാക്കി demultiplexed TCP ലക്ഷ്യസ്ഥാനങ്ങൾ. അതു ശരിയാണോ?

ട്രാൻസ്മിഷൻ കൺട്രോൾ പ്രോട്ടോക്കോൾ (TCP) ആണ് പ്രധാനം നെറ്റ്‌വർക്ക് പ്രോട്ടോക്കോളുകൾഇൻ്റർനെറ്റ്, TCP/IP നെറ്റ്‌വർക്കുകളിലും സബ്‌നെറ്റുകളിലും ഡാറ്റാ ട്രാൻസ്മിഷൻ നിയന്ത്രിക്കാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു.

1) നമുക്ക് OSI മോഡൽ ഓർക്കാം


OSI മോഡലിൽ TCP യുടെ സ്ഥാനം 4, 5 ലെയറുകളാൽ ഉൾക്കൊള്ളുന്നു:

ഒരു ഡാറ്റ സ്ട്രീം നൽകുന്ന ഒരു ഗതാഗത സംവിധാനമാണ് TCP, കൂടെ പ്രീ-ഇൻസ്റ്റലേഷൻബന്ധങ്ങൾ,ഇക്കാരണത്താൽ, ലഭിച്ച ഡാറ്റയുടെ വിശ്വാസ്യതയിൽ ഇത് ആത്മവിശ്വാസം നൽകുന്നു, ഡാറ്റ നഷ്‌ടപ്പെടുമ്പോൾ ഡാറ്റയ്‌ക്കായി ആവർത്തിച്ചുള്ള അഭ്യർത്ഥന നടത്തുകയും ഒരേ പാക്കേജിൻ്റെ രണ്ട് പകർപ്പുകൾ ലഭിക്കുമ്പോൾ തനിപ്പകർപ്പ് ഇല്ലാതാക്കുകയും ചെയ്യുന്നു. യുഡിപിയിൽ നിന്ന് വ്യത്യസ്തമായി, ഇത് കൈമാറ്റം ചെയ്യപ്പെടുന്ന ഡാറ്റയുടെ സമഗ്രത ഉറപ്പുനൽകുകയും കൈമാറ്റത്തിൻ്റെ ഫലങ്ങൾ അയച്ചയാളെ അറിയിക്കുകയും ചെയ്യുന്നു.


ടിസിപി നടപ്പിലാക്കൽ സാധാരണയായി ഒഎസ് കേർണലിലാണ് നിർമ്മിച്ചിരിക്കുന്നത്, എന്നിരുന്നാലും ആപ്ലിക്കേഷൻ സന്ദർഭത്തിൽ ടിസിപി നടപ്പിലാക്കലുകളും ഉണ്ട്.

കമ്പ്യൂട്ടറിൽ നിന്ന് കമ്പ്യൂട്ടറിലേക്ക് ഇൻ്റർനെറ്റ് വഴി കൈമാറ്റം ചെയ്യുമ്പോൾ, ടിസിപി ഇവ രണ്ടിനുമിടയിലുള്ള മുകളിലെ പാളിയിൽ പ്രവർത്തിക്കുന്നു അവസാന സംവിധാനങ്ങൾ, ഉദാഹരണത്തിന്, ഒരു ബ്രൗസറും ഒരു വെബ് സെർവറും. ചില കമ്പ്യൂട്ടറിലെ ഒരു പ്രോഗ്രാമിൽ നിന്ന് മറ്റൊരു കമ്പ്യൂട്ടറിലെ മറ്റൊരു പ്രോഗ്രാമിലേക്ക് ബൈറ്റുകളുടെ ഒരു സ്ട്രീം TCP വിശ്വസനീയമായി കൈമാറുന്നു. ഇമെയിൽ, ഫയൽ പങ്കിടൽ പ്രോഗ്രാമുകൾ TCP ഉപയോഗിക്കുന്നു.
TCP മോണിറ്ററുകൾ =

  1. സന്ദേശ ദൈർഘ്യം
  2. സന്ദേശമയയ്ക്കൽ വേഗത
  3. നെറ്റ്‌വർക്ക് ട്രാഫിക്.

TCP തലക്കെട്ട് ഘടന:


അല്ലെങ്കിൽ നിങ്ങൾക്ക് ഈ ഗ്ലാമർ ചിത്രം പഠിക്കാം:

പതാകകൾ:

ക്രമസംഖ്യ

സീക്വൻസ് നമ്പർ രണ്ട് ഉദ്ദേശ്യങ്ങൾ നിറവേറ്റുന്നു:

SYN ഫ്ലാഗ് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഇത് സീക്വൻസ് നമ്പറിൻ്റെ പ്രാരംഭ മൂല്യമാണ് - ISN (ഇനിഷ്യൽ സീക്വൻസ് നമ്പർ), കൂടാതെ അടുത്ത പാക്കറ്റിൽ കൈമാറുന്ന ഡാറ്റയുടെ ആദ്യ ബൈറ്റിന് ISN + 1 ന് തുല്യമായ ഒരു സീക്വൻസ് നമ്പർ ഉണ്ടായിരിക്കും.
അല്ലെങ്കിൽ, SYN സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, തന്നിരിക്കുന്ന പാക്കറ്റിൽ ട്രാൻസ്മിറ്റ് ചെയ്ത ഡാറ്റയുടെ ആദ്യ ബൈറ്റിന് ഈ സീക്വൻസ് നമ്പർ ഉണ്ട്.

ഒരു ടിസിപി സ്ട്രീം സാധാരണയായി ഈ ഫീൽഡിൻ്റെ വ്യത്യസ്ത അവസ്ഥകളുടെ എണ്ണത്തേക്കാൾ ദൈർഘ്യമേറിയതാകുമെന്നതിനാൽ, സീക്വൻസ് നമ്പറുള്ള എല്ലാ പ്രവർത്തനങ്ങളും മോഡുലോ 2^32 നടത്തണം. ഇത് ടിസിപിയുടെ ഉപയോഗത്തിന് ഒരു പ്രായോഗിക പരിമിതി നൽകുന്നു. ട്രാൻസ്ഫർ വേഗതയാണെങ്കിൽ ആശയവിനിമയ സംവിധാനം MSL (പരമാവധി സെഗ്‌മെൻ്റ് ലൈഫ്‌ടൈം) സമയത്ത് സീക്വൻസ് നമ്പർ ഓവർഫ്ലോ ആകും, തുടർന്ന് സ്ട്രീമിൻ്റെ വിവിധ ഭാഗങ്ങളിൽ പെട്ട ഒരേ നമ്പറുള്ള രണ്ട് സെഗ്‌മെൻ്റുകൾ നെറ്റ്‌വർക്കിൽ ദൃശ്യമാകുകയും റിസീവറിന് തെറ്റായ ഡാറ്റ ലഭിക്കുകയും ചെയ്യും.
സ്ഥിരീകരണ നമ്പർ

ACK ഫ്ലാഗ് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, അടുത്ത തവണ സ്വീകർത്താവ് പ്രതീക്ഷിക്കുന്ന സീക്വൻസ് നമ്പർ ഈ ഫീൽഡിൽ അടങ്ങിയിരിക്കുന്നു. ഈ സെഗ്‌മെൻ്റ് രസീതിൻ്റെ സ്ഥിരീകരണമായി അടയാളപ്പെടുത്തുന്നു.
ഡാറ്റ ഓഫ്സെറ്റ്

ഈ ഫീൽഡ് 4-ബൈറ്റ് (4-ഒക്ടെറ്റ്) വാക്കുകളിൽ TCP പാക്കറ്റ് ഹെഡറിൻ്റെ വലുപ്പം വ്യക്തമാക്കുന്നു. കുറഞ്ഞ വലിപ്പം 5 വാക്കുകളും പരമാവധി 15 ഉം ആണ്, അതായത് യഥാക്രമം 20, 60 ബൈറ്റുകൾ. TCP തലക്കെട്ടിൻ്റെ ആരംഭത്തിൽ നിന്നാണ് ഓഫ്സെറ്റ് കണക്കാക്കുന്നത്.
സംവരണം ചെയ്തു

ഭാവിയിലെ ഉപയോഗത്തിനായി റിസർവ് ചെയ്ത (6 ബിറ്റുകൾ) പൂജ്യമായി സജ്ജീകരിക്കണം. ഇതിൽ രണ്ടെണ്ണം (5ഉം 6ഉം) ഇതിനകം നിർവചിക്കപ്പെട്ടിട്ടുണ്ട്:

CWR (തിരക്ക് ജാലകം കുറച്ചു) - തിരക്കുള്ള വിൻഡോ കുറച്ച ഫീൽഡ് - ECE ഫ്ലാഗ് സെറ്റ് (RFC 3168) ഉള്ള ഒരു പാക്കറ്റ് ലഭിച്ചുവെന്ന് സൂചിപ്പിക്കുന്നതിന് അയച്ചയാൾ ഫ്ലാഗ് സജ്ജീകരിച്ചു.
ECE (ECN-Echo) - ECN എക്കോ ഫീൽഡ് - ഈ നോഡിന് ECN (സ്‌പഷ്‌ടമായ തിരക്ക് അറിയിപ്പ്) പ്രാപ്‌തമാണെന്നും നെറ്റ്‌വർക്ക് തിരക്കിനെക്കുറിച്ച് (RFC 3168) അയച്ചയാളെ സൂചിപ്പിക്കാൻ കഴിയുമെന്നും സൂചിപ്പിക്കുന്നു.

പതാകകൾ (നിയന്ത്രണ ബിറ്റുകൾ)

ഈ ഫീൽഡിൽ 6 ബിറ്റ് ഫ്ലാഗുകൾ അടങ്ങിയിരിക്കുന്നു:

URG - അടിയന്തിര പോയിൻ്റർ ഫീൽഡ് പ്രധാനമാണ്
ACK - അംഗീകാര ഫീൽഡ് പ്രധാനമാണ്
PSH - (ഇംഗ്ലീഷ് പുഷ് ഫംഗ്‌ഷൻ) സ്വീകരിക്കുന്ന ബഫറിൽ ശേഖരിച്ച ഡാറ്റ ഉപയോക്തൃ ആപ്ലിക്കേഷനിലേക്ക് തള്ളാൻ സ്വീകർത്താവിനോട് നിർദ്ദേശിക്കുന്നു.
RST - കണക്ഷനുകൾ അവസാനിപ്പിക്കുക, ബഫർ പുനഃസജ്ജമാക്കുക (ബഫർ ക്ലിയറിംഗ്) (eng. കണക്ഷൻ പുനഃസജ്ജമാക്കുക)
SYN - സീക്വൻസ് നമ്പറുകൾ സമന്വയിപ്പിക്കുക
FIN (ഇംഗ്ലീഷ് ഫൈനൽ, ബിറ്റ്) - ഫ്ലാഗ്, സജ്ജീകരിക്കുമ്പോൾ, കണക്ഷൻ അവസാനിപ്പിക്കുന്നതിനെ സൂചിപ്പിക്കുന്നു (കണക്ഷൻ അവസാനിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന ഇംഗ്ലീഷ് FIN ബിറ്റ്).

അയയ്ക്കുന്നയാൾ സ്വീകരിക്കാൻ തയ്യാറുള്ള ഡാറ്റയുടെ വലുപ്പം ബൈറ്റുകളിൽ വ്യക്തമാക്കുന്ന ഒരു നമ്പർ ഈ ഫീൽഡിൽ അടങ്ങിയിരിക്കുന്നു.

പ്രോട്ടോക്കോളിൻ്റെ മെക്കാനിസം

പ്രോട്ടോക്കോളിൻ്റെ മെക്കാനിസം

പരമ്പരാഗത ബദലുകളിൽ നിന്ന് വ്യത്യസ്തമായി, UDP, ഉടൻ തന്നെ പാക്കറ്റുകൾ കൈമാറാൻ തുടങ്ങും, ഡാറ്റ കൈമാറുന്നതിന് മുമ്പ് സൃഷ്ടിക്കേണ്ട കണക്ഷനുകൾ TCP സ്ഥാപിക്കുന്നു. ഒരു TCP കണക്ഷനെ 3 ഘട്ടങ്ങളായി തിരിക്കാം:

  1. ഒരു കണക്ഷൻ സ്ഥാപിക്കുന്നു
  2. ഡാറ്റ കൈമാറ്റം
  3. കണക്ഷൻ അവസാനിപ്പിക്കുന്നു

ഈ ബന്ധത്തിൽ, നമുക്ക് TCP സെഷൻ അവസ്ഥകളെക്കുറിച്ച് സംസാരിക്കാം:

TCP സെഷൻ പ്രസ്താവിക്കുന്നു: