Управљање конекцијом

УСПОСТАВЉАЊЕ ВЕЗЕ

Када се у слоју транспорта успоставља конекција (веза), то се обавља у три корака, а сам поступак се назива троструко руковање (three-way handshake):

I. слој транспорта станице А (извориште) шаље слоју транспорта станице Б (одредишта) пакет захтев за успостављање везе (SYN)
II. слој транспорта станице Б одговара слоју транспорта станице А слањем пакета сагласност за успостављање везе
III. слој транспорта станице А шаље слоју транспорта станице Б пакет потврда сагласности (ACK)

Процедуре за успостављање и затварање веза објаснићемо на примеру TCP протокола, јер је он најчешће коришћени протокол транспортног слоја.

tcpopen3way

Процедура за успостављање везе обично се позива са једног TCP-а, а одговара му други. Ова процедура такође функционише ако оба TCP-а истовремено позивају процедуру.

Да би се успоставила конекција, сваки уређај мора послати SYN и примити ACK од другог уређаја. На тај начин, теоретски, требало би да постоје четири управљачке поруке између уређаја. Ипак, није ефикасно слати SYN и ACK у одвојеним порукама. Због тога, у нормалној секвенци догађаја приликом успостављања везе, један од SYN и један ACK шаљу се заједно, па се та порука назива SYN+ACK. Овде треба напоменути, да SYN и ACK, у ствари, представљају битове у заглављу поруке, тако да кад се шаље потврда поставља се бит ACK на 1, а кад се шаље захтев за успостављање везе онда се поставља SYN на 1. Код поруке SYN+ACK оба бита су постављена на 1. На тај начин добијамо укупно три поруке, па се ова процедура назива „троструко руковање“. У основи, нормалан процес успостављања везе укључује три корака:

– TCP A шаље SYN поруку
– TCP B шаље SYN+ACK поруку која комбинује ACK за SYN који је послао TCP A и свој SYN (који, у ствари представља сагласност за успостављање везе)
– TCP A шаље ACK за SYN који је послао TCP B (то је, у ствари, потврда сагласности)

Најједноставније троструко руковање приказано је у табели:

tabela1

– линије су нумерисане у циљу лакшег праћења
– стрелица надесно (–>) показује одлазак TCP сегмента од TCP A до TCP B, или долазак сегмента за B од A. Стрелица налево (<–) показује супротно. TCP A и TCP B су транспортни слојеви рачунара A и B
– садржај сегмента је приказан у скраћеном облику са редним бројем, контролним битовима (CTL) и ACK пољем. Сегмент је јединица података која се преноси на транспортном слоју, у табели је представљен ознаком SEQ

Цео поступак, детаљно објашњен, линија по линија из табеле:

Линија 1: TCP A је у стању CLOSED => веза није успостављена. TCP A не може радити ништа док TCP B није спреман да прихвати конекцију.

TCP B прелази из стања CLOSED у стање LISTEN (стање ослушкивања), креирајући преносни управљачки блок (transmission control block – TCB) чиме себе доводи у стање спремности да прихвати захтеве за успостављање везе (SYN) од TCP-а A

Линија 2: TCP A прелази на корак #1 1 Transmit (слање) стварањем преносног управљачког блока за везу и шаље SYN поруку TCP-у B, чиме прелази у стање SYN-SENT. SYN порука коју шаље TCP A је, у ствари, SYN сегмент са редним бројем 100, чиме најављује да ће користити низ сегмената са редним бројевима који почињу од 100.

TCP B чека контакт од TCP-а A – остаје у стању LISTEN

Линија 3: TCP A чека да прими ACK за SYN који је послао, као и SYN од TCP-а B.

TCP B прелази на корак #1 Receive (примање) и корак #2 2 Transmit (слање): TCP B прима SYN од TCP-а A. Он шаље једну SYN+ACK поруку TCP-у A која садржи ACK за SYN који је послао TCP A, и свој SYN. Прелази у SYN-RECEIVED стање. Поље потврде указује да TCP B очекује да прими редни број 101, потврђујући SYN који је донео редни број 100.

Линија 4: TCP A прелази на корак #2 Receive (примање) и корак #3 3 Transmit (слање): прима од TCP-а B SYN+ACK који садржи ACK за SYN који је послао TCP A, и SYN TCP-а B. TCP A одговара са празним сегментом који садржи ACK за SYN који је послао TCP B. TCP A је сада завршио са успостављањем конекције => прешао је у стање ESTABLISHED и чека да TCP B заврши успостављање везе да би могли нормално да раде

TCP B прелази на корак #3 Receive (примање): прима ACK за SYN који је претходно послао, и тек сад је завршио са успостављањем везе, чиме прелази у стање ESTABLISHED

Линија 5: Оба рачунара су у стању ESTABLISHED, што значи да су спремни за нормалну размену података. TCP A шаље неке податке. Запази да је редни број сегмента у линији 5 исти као у линији 4 зато што ACK не заузима простор редног броја


 ЗАТВАРАЊЕ (ПРЕКИДАЊЕ) ВЕЗА

Да би се затворила веза, један од TCP-а прима close наредбу од стране ULP-а (протокол вишег нивоа) и шаље поруку са постављеним FIN битом.

TCP A шаље TCP-у B захтев да се затвори веза са редним бројем следеће поруке (100). TCP B затим шаље назад потврду захтева (101) и редни број своје следеће поруке (300). После овога, TCP B шаље поруку о затварању везе кроз свој ULP до апликације и чека да апликација потврди затварање (ово је close-wait стање). Овај корак није баш неопходан; TCP може да затвори везу без одобрења апликације, али „лепо васпитан систем“ ће обавестити апликацију о промени стања.

Након пријема одобрења да затвори везу од стране апликације, TCP B шаље сегмент назад до TCP-а A са постављеним FIN битом (линија 4). Коначно, TCP A потврђује затварање и веза се прекида (линија 5). Тиме је TCP B прешао у closed стање, а TCP A остаје још неко време (2MSL) у time-wait стању, након чега и он прелази у closed стање.

У нормалном случају свака страна прекида своју страну везе слањем специјалне поруке са постављеним битом за прекид везе FIN. Ова порука другом уређају служи као захтев за прекидање везе. Уређај који је примио FIN одговара потврдом да покаже да је примио. Веза није прекинута све док обе стране нису завршиле своје процедуре за искључивањем слањем FIN и примањем ACK.

tcpclose

Као што видимо, прекидање везе није троструко руковање као успостављање, већ пар двоструког руковања. Стања кроз која два уређаја која су повезана пролазе током нормалног прекидања везе су различити зато што се уређај који је иницирао прекид везе понаша другачије од оног који је примио захтев за прекидањем везе.

TCP на уређају који прима захтев за прекид везе мора обавестити свој апликациони процес и чекати на сигнал да је процес спреман да настави. Иницијатор не мора то да ради, зато што је апликација и покренула прекид везе!

TCP веза се нормално прекида користећи специјалну процедуру код које обе стране независно затварају своју страну линка. Нормално почиње тако што један апликациони процес сигнализира свом транспортном слоју да сесија више није потребна. Тај уређај шаље FIN поруку да каже другом уређају да жели да прекине везу, и та порука се потврђује.

Када је други уређај спреман он такође шаље FIN који је потврђен. Након чекања периода времена да ACK буде примљен сесија се затвара.

tabela2

Линија 2: TCP A се налази у стању ESTABLISHED. У једном тренутку прима close наредбу од стране ULP-а (протокол вишег нивоа) и прелази на корак #1 Transmit (слање)1 – шаље сегмент са постављеним FIN битом као захтев за прекид везе. Прелази у FIN-WAIT-1 стање.

TCP B се налази у стању ESTABLISHED, што значи да и даље ради нормално

линија 3: TCP A је у стању FIN-WAIT-1. Након што је послао FIN, чека да он буде потврђен и да TCP B пошаље свој FIN. У овом тренутку TCP A још увек може примати поруке од TCP-а B, али не прима више поруке од своје локалне апликације како би их послао TCP-у B.

TCP B прелази на корак #1 Receive (примање) и корак #2 2 Transmit (слање): TCP B прима FIN који је послао TCP A. Он шаље ACK да потврди тај FIN. TCP B мора чекати да апликација коју користи сазна да друга страна прекида везу и да ова апликација може завршити оно што је почела. TCP B прелази у стање CLOSE-WAIT

линија 4: TCP A прелази на корак #2 Receive (примање): TCP A прима ACK за свој FIN. Сада мора чекати да TCP B прекине везу. Прелази у стање FIN-WAIT-2

TCP B налази се у стању CLOSE-WAIT: чека да апликациони процес на његовом крају сигнализира да је спреман да прекине везу.

Линија 5: TCP A се и даље налази у стању FIN-WAIT-2: чека за FIN TCP-а B.

TCP B прелази на корак #1 Transmit (слање) 1fin, што значи да прима обавештење од локалне апликације да је завршила. TCP B сада шаље свој FIN TCP-у A. Прелази у стање LAST-ACK

линија 6: TCP A прелази на корак #1 Receive (примање) и корак #2 2finTransmit (слање): прима FIN који је послао TCP B и шаље назад ACK. Из стања FIN-WAIT-2 прелази у стање TIME-WAIT

TCP B је у стању LAST-ACK: чека ACK за FIN који је послао

линија 7: TCP A је у стању TIME-WAIT: чека период времена који је једнак двоструком максималном животу сегмента (maximum segment life – MSL), како би био сигуран да је ACK примљен.

TCP B прелази на корак #2 Receive (примање): прима ACK на FIN који је послао и затвара везу. Из стања LAST-ACK прелази у стање CLOSED

линија 8: TCP A је у стању TIME-WAIT: тајмер истиче након 2*MSL времена. Када тајмер истекне, TCP A прелази у стање CLOSED

TCP B је у стању CLOSED: са његове стране веза је прекинута.

Линија 9: Оба TCP-а су у стању CLOSED што значи да је веза прекинута

Код прекидања везе разликују се сигнали захтева за прекид код иницијатора прекида везе (TCP A) и другог рачунара (TCP B). У првом случају апликација је креирала сигнал close, а у другом апликација само потврђује да је обавила све послове и да је спремна за прекид везе. Као што видимо – TCP B сигнале ACK и FIN шаље са временским размаком, који је неопходан да би апликација послала потврду да је спремна за прекид везе.

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s