Асноўныя таямніцы сеткавых пакетаў брокера TCP Connections: Demystified Неабходнасць патройнага поціску рукі

Налада злучэння TCP
Калі мы праглядаем Інтэрнэт, адпраўляем электронную пошту альбо гуляем у інтэрнэт -гульню, мы часта не думаем пра складаную сеткавую сувязь, якая стаіць за ёй. Аднак менавіта гэтыя, здавалася б, невялікія крокі забяспечваюць стабільную сувязь паміж намі і серверам. Адзін з найважнейшых этапаў-гэта ўстаноўка злучэння TCP, і ядро ​​гэтага-трохбаковы поціск рукі.

У гэтым артыкуле падрабязна разглядаюцца прынцып, працэс і важнасць трохбаковага поціску рукі. Крок за крокам мы растлумачым, чаму патрэбны трохбаковы поціск рукі, як гэта забяспечвае стабільнасць і надзейнасць падключэння, і наколькі важна для перадачы дадзеных. З больш глыбокім разуменнем трохбаковага поціску рукі мы атрымаем лепшае разуменне асноўных механізмаў сеткавай сувязі і больш выразнае ўяўленне пра надзейнасць злучэнняў TCP.

TCP трохбаковае працэс поціску рукі і дзяржаўныя пераходы
TCP-гэта арыентаваны на злучэнне пратакол транспарціроўкі, які патрабуе стварэння злучэння перад перадачай дадзеных. Гэты працэс стварэння сувязі ажыццяўляецца трохбаковым поціскам рукі.

 TCP трохбаковы поціск рукі

Давайце ўважліва разгледзім пакеты TCP, якія адпраўляюцца ў кожнае злучэнне.

Першапачаткова і кліент, і сервер зачынены. Па -першае, сервер актыўна слухае порт і знаходзіцца ў стане праслухоўвання, а гэта азначае, што сервер павінен быць запушчаны. Далей кліент гатовы пачаць атрымліваць доступ да вэб -старонкі. Гэта павінна ўсталяваць сувязь з серверам. Фармат першага пакета злучэння выглядае наступным чынам:

 Сін пакет

Калі кліент ініцыюе злучэнне, ён генеруе выпадковы пачатковы нумар паслядоўнасці (client_isn) і змяшчае яго ў поле "Нумар паслядоўнасці" загалоўка TCP. У той жа час кліент усталёўвае становішча сцяга SYN да 1, каб паказаць, што выходны пакет - гэта пакет SYN. Кліент паказвае, што ён хоча ўсталяваць злучэнне з серверам, адправіўшы першы пакет SYN на сервер. Гэты пакет не ўтрымлівае дадзеныя ўзроўню прыкладання (гэта значыць, дасыланыя дадзеныя). У гэты момант статус кліента адзначаны як SYN-SENT.

SYN+ACK пакет

Калі сервер атрымлівае пакет SYN ад кліента, ён выпадкова ініцыялізуе свой уласны паслядоўны нумар (Server_ISN), а потым змяшчае гэты нумар у поле "Серыйны нумар" загалоўка TCP. Далей сервер уваходзіць у client_isn + 1 у полі "Нумар пацверджання" і ўсталёўвае як біты SYN, так і ACK на 1. Нарэшце, сервер адпраўляе пакет кліенту, які не змяшчае дадзеных, якія не змяшчаюць прыкладанняў (і ніякіх дадзеных для сервера для адпраўкі). У гэты час сервер знаходзіцца ў стане SYN-RCVD.

Пакет ACK

Пасля таго, як кліент атрымлівае пакет з сервера, ён павінен выканаць наступныя аптымізацыі, каб адказаць на канчатковы пакет адказаў: па -першае, кліент усталёўвае біт ACK загалоўка TCP пакета адказаў на 1; Па -другое, кліент уводзіць значэнне server_isn + 1 у поле "Пацвердзіць нумар адказу"; Нарэшце, кліент адпраўляе пакет на сервер. Гэты пакет можа пераносіць дадзеныя ад кліента на сервер. Пасля завяршэння гэтых аперацый кліент увойдзе ў усталяваны стан.

Пасля таго, як сервер атрымлівае ад кліента пакет адказаў, ён таксама пераходзіць у створаны стан.

Як вы бачыце з вышэйзгаданага працэсу, пры выкананні трохбаковага поціску рукі, трэці поціск рукі можа пераносіць дадзеныя, але першыя дзве поціскі рук не з'яўляюцца. Гэта пытанне, якое часта задаюць у інтэрв'ю. Пасля таго, як трохбаковы поціск рукі завершаны, абодва бакі ўваходзяць у усталяваны стан, паказваючы, што злучэнне паспяхова ўстаноўлена, і ў гэты момант кліент і сервер могуць пачаць адпраўляць дадзеныя адзін аднаму.

Чаму тры поціску рукі? Не два разы, чатыры разы?
Агульны адказ: "Таму што трохбаковы поціск рукі гарантуе магчымасць атрымліваць і адпраўляць". Гэты адказ правільны, але гэта толькі павярхоўная прычына, не ставіць асноўную прычыну. Далей я прааналізую прычыны патройнага поціску рукі з трох аспектаў, каб паглыбіць наша разуменне гэтага пытання.

Трохбаковы поціск рукі можа эфектыўна пазбегнуць ініцыялізацыі гістарычна паўторных злучэнняў (галоўная прычына)
Трохбаковы поціск рукі гарантуе, што абодва бакі атрымалі надзейны нумар паслядоўнасці.
Трохбаковы поціск рукі пазбягае марнавання рэсурсаў.

Прычына 1: Пазбягайце гістарычных дублікатаў
У двух словах, галоўнай прычынай трохбаковага поціску рукі з'яўляецца пазбегнуць блытаніны, выкліканай старой дублікатай ініцыялізацыі злучэння. У складанай сеткавай асяроддзі перадача пакетаў дадзеных не заўсёды адпраўляецца ў хост прызначэння ў адпаведнасці з зададзеным часам, і старыя пакеты дадзеных могуць прыйсці да гаспадара прызначэння спачатку з -за сеткавых затораў і іншых прычын. Каб пазбегнуць гэтага, TCP выкарыстоўвае трохбаковы поціск рукі для ўстанаўлення злучэння.

Трохбаковае поціск рукі пазбягае гістарычных дублікатаў

Калі кліент пасылае некалькі пакетаў наладжвання злучэння SYN, у такіх сітуацыях, як сеткавыя заторы, можа адбыцца наступнае:

1- Старыя пакеты SYN паступаюць на сервер перад апошнімі пакетамі SYN.
2- Сервер адкажа кліенту SYN + ACK пакету пасля атрымання старога пакета SYN.
3- Калі кліент атрымлівае пакет SYN + ACK, ён вызначае, што злучэнне- гэта гістарычнае злучэнне (нумар паслядоўнасці скончыўся альбо скончыўся тайм-аўт) у залежнасці ад уласнага кантэксту, а затым адпраўляе RST пакет на сервер, каб спыніць злучэнне.

З дапамогай двухбаковага злучэння няма магчымасці вызначыць, ці з'яўляецца бягучая сувязь гістарычнай сувяззю. Трохбаковы поціск рукі дазваляе кліенту вызначыць, ці з'яўляецца бягучае злучэнне гістарычным злучэннем, заснаваным на кантэксце, калі ён гатовы адправіць трэці пакет:

1- Калі гэта гістарычнае злучэнне (нумар паслядоўнасці скончыўся альбо скончыўся тайм-аўт), пакет, адпраўлены трэцім поціскам рукі,- гэта першы пакет для перапынення гістарычнай сувязі.
2- Калі гэта не гістарычная сувязь, пакет, адпраўлены ў трэці раз,- гэта пакет ACK, і два зносіны, якія паспяхова ўсталёўваюць злучэнне.

Такім чынам, галоўнай прычынай таго, што TCP выкарыстоўвае трохбаковае поціск рукі, заключаецца ў тым, што ён ініцыялізуе сувязь, каб прадухіліць гістарычныя сувязі.

Прычына 2: сінхранізаваць першапачатковыя нумары паслядоўнасці абодвух бакоў
Абодва бакі пратаколу TCP павінны падтрымліваць нумар паслядоўнасці, які з'яўляецца ключавым фактарам для забеспячэння надзейнай перадачы. Нумары паслядоўнасці гуляюць важную ролю ў злучэннях TCP. Яны робяць наступнае:

Прыёмнік можа ліквідаваць дублікаты дадзеных і забяспечыць дакладнасць дадзеных.

Прыёмнік можа атрымліваць пакеты ў парадку нумара паслядоўнасці, каб забяспечыць цэласнасць дадзеных.

● Нумар паслядоўнасці можа вызначыць пакет дадзеных, які быў атрыманы другім бакам, што забяспечвае надзейную перадачу дадзеных.

Такім чынам, пры ўсталяванні злучэння TCP кліент адпраўляе пакеты SYN з пачатковым нумарам паслядоўнасці і патрабуе ад сервера адказаць на пакет ACK, які паказвае на паспяховы прыём пакета SYN кліента. Затым сервер адпраўляе пакет SYN з пачатковым нумарам паслядоўнасці кліенту і чакае, калі кліент адказвае раз і назаўжды, каб пераканацца, што першапачатковыя нумары паслядоўнасці будуць надзейныя сінхранізаваны.

Сінхранізаваць першапачатковыя серыйныя нумары абодвух бакоў

Нягледзячы на ​​тое, што чатырохбаковы поціск рукі таксама надзейна сінхранізаваць пачатковыя нумары паслядоўнасці абодвух бакоў, другі і трэці этап можна аб'яднаць у адзін крок, у выніку чаго трохбаковае поціск рукі. Аднак два поціску рукі могуць толькі гарантаваць, што першапачатковы нумар паслядоўнасці аднаго партыі паспяхова атрыманы другім бокам, але няма ніякай гарантыі, што першапачатковы нумар паслядоўнасці абодвух бакоў можа быць пацверджаны. Такім чынам, трохбаковы поціск рукі-лепшы выбар для таго, каб забяспечыць стабільнасць і надзейнасць злучэнняў TCP.

Прычына 3: Пазбягайце марнаваць рэсурсы
Калі ёсць толькі "два рукі", калі ў сетцы заблакаваны запыт Client SYN, кліент не можа атрымаць пакет ACK, адпраўлены серверам, таму SYN будзе абурацца. Аднак, паколькі няма трэцяга поціску рукі, сервер не можа вызначыць, ці атрымаў кліент пацверджанне ACK для ўстанаўлення злучэння. Такім чынам, сервер можа актыўна ўсталяваць злучэнне пасля атрымання кожнага запыту SYN. Гэта прыводзіць да наступнага:

Адходы рэсурсаў: Калі запыт кліента заблакаваны, што прывядзе да неаднаразовай перадачы некалькіх пакетаў SYN, сервер усталюе некалькі залішніх несапраўдных злучэнняў пасля атрымання запыту. Гэта прыводзіць да непатрэбных адходаў серверных рэсурсаў.

Затрымка паведамленняў: З -за адсутнасці трэцяга поціску рукі, сервер не можа даведацца, ці правільна кліент атрымаў пацверджанне ACK для ўстанаўлення злучэння. У выніку, калі паведамленні затрымаюцца ў сетцы, кліент будзе працягваць адпраўляць запыты SYN зноў і зноў, у выніку чаго сервер пастаянна ўсталёўвае новыя злучэнні. Гэта павялічыць сеткавыя заторы і затрымку і негатыўна адаб'ецца на агульнай прадукцыйнасці сеткі.

Пазбягайце марнаваць рэсурсы

Такім чынам, для таго, каб забяспечыць стабільнасць і надзейнасць сеткавага злучэння, TCP выкарыстоўвае трохбаковы поціск рукі, каб усталяваць злучэнне, каб пазбегнуць узнікнення гэтых праблем.

Сціслы пераказ
АБрокер сеткавага пакетаУсталяванне злучэння TCP ажыццяўляецца з трохбаковым поціскам рукі. Падчас трохбаковага поціску рукі кліент спачатку адпраўляе пакет са сцягам SYN на сервер, паказваючы, што ён хоча ўсталяваць злучэнне. Атрымаўшы запыт ад кліента, сервер адказвае пакет з дапамогай кліента SYN і ACK, указваючы на ​​тое, што запыт на злучэнне прымаецца, і адпраўляе свой уласны нумар паслядоўнасці. Нарэшце, кліент адказвае сцягам ACK на сервер, каб паказаць, што злучэнне паспяхова ўстаноўлена. Такім чынам, абодва бакі знаходзяцца ва ўсталяваным стане і могуць пачаць адпраўляць дадзеныя адзін аднаму.

Увогуле, трохбаковы працэс поціску рукі для ўстановы злучэння TCP прызначаны для забеспячэння стабільнасці і надзейнасці сувязі, пазбягання блытаніны і марнавання рэсурсаў над гістарычнымі сувязямі, а таксама гарантаваць, што абодва бакі могуць атрымліваць і адпраўляць дадзеныя.


Час паведамлення: студзень-08-2025
  • alice
  • alice2025-04-18 19:24:58
    Hello, I am intelligent customer service. My name is Alice. If you have any questions, you can ask me. I will answer your questions online 24 hours a day!

Ctrl+Enter Wrap,Enter Send

  • FAQ
Please leave your contact information and chat
Hello, I am intelligent customer service. My name is Alice. If you have any questions, you can ask me. I will answer your questions online 24 hours a day!
chat now
chat now