Подешавање TCP везе
Када прегледамо веб, шаљемо имејл или играмо онлајн игру, често не размишљамо о сложеној мрежној вези која стоји иза тога. Међутим, управо су ти наизглед мали кораци они који обезбеђују стабилну комуникацију између нас и сервера. Један од најважнијих корака је подешавање TCP везе, а срж тога је тросмерно руковање.
Овај чланак ће детаљно размотрити принцип, процес и значај тросмерног руковања. Корак по корак, објаснићемо зашто је тросмерно руковање потребно, како обезбеђује стабилност и поузданост везе и колико је важно за пренос података. Дубљим разумевањем тросмерног руковања, стећи ћемо боље разумевање основних механизама мрежне комуникације и јаснији увид у поузданост TCP веза.
TCP процес тросмерног рукохватања и прелази стања
TCP је транспортни протокол оријентисан на конекцију, који захтева успостављање везе пре преноса података. Овај процес успостављања везе се врши тросмерним рукостискањем.
Хајде да детаљније погледамо TCP пакете који се шаљу у свакој вези.
У почетку, и клијент и сервер су ЗАТВОРЕНИ. Прво, сервер активно слуша на порту и налази се у стању СЛУШАЊА, што значи да сервер мора бити покренут. Затим, клијент је спреман да почне да приступа веб страници. Потребно је да успостави везу са сервером. Формат првог пакета за повезивање је следећи:
Када клијент покрене везу, генерише случајни почетни секвенцијални број (client_isn) и поставља га у поље „Секвенцијални број“ TCP заглавља. Истовремено, клијент поставља позицију SYN заставице на 1 да би назначио да је одлазни пакет SYN пакет. Клијент назначује да жели да успостави везу са сервером слањем првог SYN пакета серверу. Овај пакет не садржи податке апликацијског слоја (то јест, послате податке). У овом тренутку, статус клијента је означен као SYN-SENT.
Када сервер прими SYN пакет од клијента, он насумично иницијализује свој серијски број (server_isn), а затим ставља тај број у поље „Серијски број“ TCP заглавља. Затим, сервер уноси client_isn + 1 у поље „Број потврде“ и поставља и SYN и ACK битове на 1. Коначно, сервер шаље пакет клијенту, који не садржи податке апликацијског слоја (нити податке које сервер треба да пошаље). У овом тренутку, сервер је у SYN-RCVD стању.
Када клијент прими пакет од сервера, потребно је да изврши следеће оптимизације да би одговорио на коначни пакет одговора: Прво, клијент поставља ACK бит TCP заглавља пакета одговора на 1; Друго, клијент уноси вредност server_isn + 1 у поље „Потврди број одговора“; Коначно, клијент шаље пакет серверу. Овај пакет може да носи податке од клијента до сервера. Након завршетка ових операција, клијент ће ући у стање УСПОСТАВЉЕНО.
Када сервер прими одговорни пакет од клијента, он такође прелази у стање ESTABLISHED.
Као што можете видети из горе наведеног процеса, приликом извођења тросмерног руковања, треће руковање може да носи податке, али прва два руковања нису. Ово је питање које се често поставља у интервјуима. Када се тросмерно руковање заврши, обе стране улазе у стање УСПОСТАВЉЕНО, што указује да је веза успешно успостављена, у ком тренутку клијент и сервер могу почети да шаљу податке једни другима.
Зашто три руковања? Не два пута, четири пута?
Уобичајени одговор је: „Зато што тросмерно руковање гарантује могућност примања и слања.“ Овај одговор је тачан, али је само површински разлог, не истиче главни разлог. У наставку ћу анализирати разлоге за тросмерно руковање са три аспекта како бисмо продубили наше разумевање овог питања.
Тросмерно руковање може ефикасно избећи иницијализацију историјски понављаних веза (главни разлог)
Тросмерно руковање гарантује да су обе стране добиле поуздан почетни секвенцијални број.
Тросмерно руковање избегава расипање ресурса.
Разлог 1: Избегавајте историјске дуплиране спојеве
Укратко, главни разлог за тросмерно руковање јесте избегавање забуне изазване старом дуплираном иницијализацијом везе. У сложеном мрежном окружењу, пренос пакета података се не шаље увек одредишном хосту у складу са наведеним временом, а стари пакети података могу први стићи до одредишног хоста због загушења мреже и других разлога. Да би се то избегло, TCP користи тросмерно руковање за успостављање везе.
Када клијент шаље више SYN пакета за успостављање везе узастопно, у ситуацијама као што је загушење мреже, може доћи до следећег:
1- Стари SYN пакети стижу на сервер пре најновијих SYN пакета.
2- Сервер ће одговорити клијенту SYN + ACK пакетом након што прими стари SYN пакет.
3- Када клијент прими SYN + ACK пакет, он утврђује да је веза историјска веза (истекао је редни број или је истекло време) према сопственом контексту, а затим шаље RST пакет серверу да би прекинуо везу.
Код двосмерног руковања, не постоји начин да се утврди да ли је тренутна веза историјска веза. Тросмерно руковање омогућава клијенту да утврди да ли је тренутна веза историјска веза на основу контекста када је спреман да пошаље трећи пакет:
1- Ако је у питању историјска веза (истекао је редни број или је истекло време), пакет послат трећим рукостискањем је RST пакет за прекид историјске везе.
2- Ако није у питању историјска веза, пакет послат трећи пут је ACK пакет и две стране које комуницирају успешно успостављају везу.
Стога је главни разлог зашто TCP користи тросмерно руковање тај што иницијализује везу како би спречио историјске везе.
Разлог 2: Синхронизација почетних секвенцијалних бројева обе стране
Обе стране TCP протокола морају да одржавају редни број, што је кључни фактор за обезбеђивање поузданог преноса. Редни бројеви играју важну улогу у TCP везама. Они раде следеће:
Пријемник може елиминисати дуплиране податке и осигурати тачност података.
Пријемник може примати пакете по редоследу секвенцијалног броја како би се осигурао интегритет података.
● Редни број може идентификовати пакет података који је примила друга страна, омогућавајући поуздан пренос података.
Стога, након успостављања TCP везе, клијент шаље SYN пакете са почетним редним бројем и захтева од сервера да одговори ACK пакетом који указује на успешан пријем клијентовог SYN пакета. Затим, сервер шаље SYN пакет са почетним редним бројем клијенту и чека да клијент одговори, једном за свагда, како би се осигурало да су почетни редни бројеви поуздано синхронизовани.
Иако је четворосмерно руковање такође могуће за поуздану синхронизацију почетних секвенцијалних бројева обе стране, други и трећи корак могу се комбиновати у један корак, што резултира тросмерним руковањем. Међутим, два руковања могу гарантовати само да ће друга страна успешно примити почетни секвенцијални број једне стране, али не постоји гаранција да ће почетни секвенцијални број обе стране бити потврђен. Стога је тросмерно руковање најбољи избор како би се осигурала стабилност и поузданост TCP веза.
Разлог 3: Избегавајте расипање ресурса
Ако постоји само „двоструко руковање“, када је клијентов SYN захтев блокиран у мрежи, клијент не може да прими ACK пакет који је послао сервер, па ће SYN бити поново послат. Међутим, пошто нема трећег руковања, сервер не може да утврди да ли је клијент примио ACK потврду за успостављање везе. Стога, сервер може проактивно да успостави везу само након што прими сваки SYN захтев. То доводи до следећег:
Расипање ресурса: Ако је SYN захтев клијента блокиран, што доводи до поновљеног преноса више SYN пакета, сервер ће успоставити више редундантних неважећих веза након пријема захтева. То доводи до непотребног расипања ресурса сервера.
Задржавање порука: Због недостатка трећег рукостискања, сервер нема начина да сазна да ли је клијент исправно примио ACK потврду за успостављање везе. Као резултат тога, ако се поруке заглаве у мрежи, клијент ће стално слати SYN захтеве, што ће узроковати да сервер стално успоставља нове везе. Ово ће повећати загушење мреже и кашњење и негативно утицати на укупне перформансе мреже.
Стога, како би се осигурала стабилност и поузданост мрежне везе, TCP користи тросмерно руковање да би успоставио везу и избегао појаву ових проблема.
Резиме
TheМрежни брокер пакетаУспостављање TCP везе се врши тросмерним руковањем. Током тросмерног руковања, клијент прво шаље пакет са SYN заставицом серверу, што указује да жели да успостави везу. Након што прими захтев од клијента, сервер одговара пакетом са SYN и ACK заставицама клијенту, што указује да је захтев за повезивање прихваћен, и шаље свој почетни секвенцијални број. На крају, клијент одговара ACK заставицом серверу како би назначио да је веза успешно успостављена. Дакле, две стране су у УСПОСТАВЉЕНОМ стању и могу почети да шаљу податке једна другој.
Генерално, процес тросмерног рукостискања за успостављање TCP везе је дизајниран да осигура стабилност и поузданост везе, избегне забуну и губљење ресурса због историјских веза и осигура да обе стране могу да примају и шаљу податке.
Време објаве: 08.01.2025.