Поставување на TCP конекција
Кога прелистуваме на интернет, испраќаме е-пошта или играме онлајн игра, честопати не размислуваме за сложената мрежна врска зад неа. Сепак, токму овие навидум мали чекори обезбедуваат стабилна комуникација помеѓу нас и серверот. Еден од најважните чекори е поставувањето на TCP конекцијата, а суштината на ова е тринасочното ракување.
Оваа статија детално ќе го разгледа принципот, процесот и важноста на тринасочното ракување. Чекор по чекор, ќе објасниме зошто е потребно тринасочното ракување, како обезбедува стабилност и сигурност на врската и колку е важно за пренос на податоци. Со подлабоко разбирање на тринасочното ракување, ќе стекнеме подобро разбирање за основните механизми на мрежната комуникација и појасен поглед на доверливоста на TCP конекциите.
TCP Процес на тринасочно ракување и транзиции на состојби
TCP е транспортен протокол ориентиран кон поврзување, кој бара воспоставување врска пред пренос на податоци. Овој процес на воспоставување врска се врши со тринасочно ракување.
Да ги погледнеме подетално TCP пакетите што се испраќаат во секоја врска.
Првично, и клиентот и серверот се ЗАТВОРЕНИ. Прво, серверот активно слуша на порта и е во состојба LISTEN, што значи дека серверот мора да се стартува. Следно, клиентот е подготвен да започне со пристап до веб-страницата. Треба да воспостави врска со серверот. Форматот на првиот пакет за поврзување е како што следува:
Кога клиентот иницира врска, тој генерира случаен почетен секвенционен број (client_isn) и го става во полето „Секвенциски број“ на насловот на TCP. Во исто време, клиентот ја поставува позицијата на знаменцето SYN на 1 за да покаже дека појдовниот пакет е SYN пакет. Клиентот покажува дека сака да воспостави врска со серверот со испраќање на првиот SYN пакет на серверот. Овој пакет не содржи податоци за апликацискиот слој (т.е. испратени податоци). Во овој момент, статусот на клиентот е означен како SYN-SENT.
Кога серверот добива SYN пакет од клиентот, тој случајно го иницијализира сопствениот сериски број (server_isn) и потоа го става тој број во полето „Serial number“ на насловот TCP. Следно, серверот внесува client_isn + 1 во полето „Број за потврда“ и ги поставува битовите SYN и ACK на 1. да испрати). Во овој момент, серверот е во состојба SYN-RCVD.
Откако клиентот ќе го прими пакетот од серверот, треба да ги изврши следните оптимизации за да одговори на пакетот за конечни одговори: Прво, клиентот го поставува битот ACK од насловот TCP на пакетот за одговор на 1; Второ, клиентот ја внесува вредноста server_isn + 1 во полето „Потврди го бројот на одговорот“; Конечно, клиентот го испраќа пакетот до серверот. Овој пакет може да пренесува податоци од клиентот до серверот. По завршувањето на овие операции, клиентот ќе влезе во ESTABLISHED состојба.
Штом серверот ќе го прими пакетот за одговор од клиентот, тој исто така се префрла во ESTABLISHED состојба.
Како што можете да видите од горенаведениот процес, при изведување на тринасочно ракување, на третото ракување му е дозволено да пренесува податоци, но првите две ракувања не се. Ова е прашање кое често се поставува на интервјуа. Штом ќе заврши тринасочното ракување, двете страни влегуваат во ESTABLISHED состојба, што покажува дека врската е успешно воспоставена, во тој момент клиентот и серверот можат да почнат да испраќаат податоци еден на друг.
Зошто три ракувања? Не два пати, четири пати?
Вообичаениот одговор е: „Бидејќи тринасочното ракување гарантира способност за примање и испраќање“. Овој одговор е точен, но тоа е само површинската причина, не ја наведува главната причина. Во продолжение ќе ги анализирам причините за тројното ракување од три аспекти за да го продлабочиме нашето разбирање за ова прашање.
Тринасочното ракување може ефективно да ја избегне иницијализацијата на историски повторените врски (главната причина)
Тринасочното ракување гарантира дека двете страни добиле сигурен почетен секвенционен број.
Тринасочното ракување избегнува трошење ресурси.
Причина 1: Избегнувајте историски двојни спојувања
Накратко, главната причина за тринасочното ракување е да се избегне забуна предизвикана од старата иницијализација на дупликат конекцијата. Во сложено мрежно опкружување, преносот на пакети со податоци не се испраќа секогаш до одредишниот хост во согласност со одреденото време, а старите пакети со податоци може да пристигнат први до одредишниот домаќин поради застојот на мрежата и други причини. За да се избегне ова, TCP користи тринасочно ракување за да ја воспостави врската.
Кога клиентот испраќа повеќе пакети за воспоставување на SYN конекција последователно, во ситуации како што е застојот на мрежата, може да се случи следново:
1- Старите SYN пакети пристигнуваат на серверот пред најновите SYN пакети.
2- Серверот ќе му одговори на клиентот пакет SYN + ACK откако ќе го прими стариот SYN пакет.
3- Кога клиентот ќе го прими пакетот SYN + ACK, тој одредува дека врската е историска врска (секвенцискиот број е истечен или истек на време) според сопствениот контекст, а потоа го испраќа RST пакетот до серверот за да ја прекине врската.
Со поврзување со две ракувања, не постои начин да се утврди дали моменталната врска е историска врска. Тринасочното ракување му овозможува на клиентот да одреди дали моменталната врска е историска врска врз основа на контекстот кога е подготвен да го испрати третиот пакет:
1- Ако се работи за историска врска (секвенцискиот број е истечен или истек на време), пакетот испратен од третото ракување е RST пакет за да се прекине историската врска.
2- Доколку не е историска врска, пакетот испратен по трет пат е ACK пакет и двете страни кои комуницираат успешно ја воспоставуваат врската.
Затоа, главната причина што TCP го користи тринасочното ракување е тоа што ја иницијализира врската за да спречи историски врски.
Причина 2: Да се синхронизираат почетните секвентни броеви на двете страни
Двете страни на протоколот TCP мора да одржуваат низа број, што е клучен фактор за да се обезбеди сигурен пренос. Секвенциските броеви играат важна улога во TCP врските. Тие го прават следново:
Приемникот може да елиминира дупликат податоци и да ја обезбеди точноста на податоците.
Приемникот може да прима пакети по редослед на секвенцискиот број за да обезбеди интегритет на податоците.
l Секвенцискиот број може да го идентификува пакетот податоци што е примен од другата страна, овозможувајќи сигурен пренос на податоци.
Затоа, по воспоставувањето на TCP конекција, клиентот испраќа SYN пакети со почетниот секвенционен број и бара од серверот да одговори со ACK пакет што покажува успешен прием на SYN пакетот на клиентот. Потоа, серверот го испраќа пакетот SYN со почетниот секвенциски број до клиентот и чека клиентот да одговори, еднаш засекогаш, за да се осигура дека првичните секвенци броеви се сигурно синхронизирани.
Иако четиринасочното ракување е исто така можно за сигурно синхронизирање на почетните секвентни броеви на двете страни, вториот и третиот чекор може да се комбинираат во еден чекор, што резултира со тринасочно ракување. Сепак, двете ракувања можат само да гарантираат дека иницијалниот број на секвенца на едната страна е успешно примен од другата страна, но не постои гаранција дека првичниот секвенционен број на двете страни може да се потврди. Затоа, тринасочното ракување е најдобриот избор за да се обезбеди стабилност и доверливост на TCP конекциите.
Причина 3: Избегнувајте трошење ресурси
Ако има само „две ракување“, кога барањето за SYN на клиентот е блокирано во мрежата, клиентот не може да го прими пакетот ACK испратен од серверот, па SYN ќе биде повторно испратен. Меѓутоа, бидејќи нема трето ракување, серверот не може да одреди дали клиентот добил потврда ACK за воспоставување на врската. Затоа, серверот може проактивно да воспостави врска само откако ќе го прими секое барање за SYN. Ова води до следново:
Трошење ресурси: Ако барањето SYN на клиентот е блокирано, што резултира со повторен пренос на повеќе SYN пакети, серверот ќе воспостави повеќе непотребни неважечки врски по добивањето на барањето. Ова води до непотребно трошење на ресурсите на серверот.
Задржување на пораката: Поради недостаток на трето ракување, серверот нема начин да знае дали клиентот правилно ја примил потврдата ACK за воспоставување на врската. Како резултат на тоа, ако пораките се заглават во мрежата, клиентот ќе продолжи да испраќа SYN барања одново и одново, предизвикувајќи серверот постојано да воспоставува нови врски. Ова ќе го зголеми застојот и одложувањето на мрежата и негативно ќе влијае на севкупните перформанси на мрежата.
Затоа, со цел да се обезбеди стабилност и сигурност на мрежната врска, TCP користи тринасочно ракување за да ја воспостави врската за да избегне појава на овие проблеми.
Резиме
НаБрокер за мрежни пакетиВоспоставувањето на TCP конекцијата се врши со тринасочно ракување. За време на тринасочното ракување, клиентот прво испраќа пакет со знаменцето SYN до серверот, што покажува дека сака да воспостави врска. По добивањето на барањето од клиентот, серверот одговара на пакет со знаменца SYN и ACK на клиентот, означувајќи дека барањето за поврзување е прифатено и испраќа свој првичен секвенционен број. Конечно, клиентот одговара со ознака ACK на серверот за да покаже дека врската е успешно воспоставена. Така, двете страни се во ВОСТАВЕНА состојба и можат да почнат да испраќаат податоци една на друга.
Општо земено, процесот на тринасочно ракување за воспоставување на TCP конекција е дизајниран да обезбеди стабилност и доверливост на врската, да избегне забуна и губење на ресурсите во однос на историските врски и да гарантира дека двете страни се способни да примаат и испраќаат податоци.
Време на објавување: Јан-08-2025