Transmission Control Protocol (tcp)



Дата17.07.2017
Размер130.82 Kb.
#25934
Transmission Control Protocol (TCP)
TCP е стандартен протокол за Интернет, осигуряващ гарантирано доставяне на данни между хостове. TCP се асоциира с транспортния слой на OSI модела и със слоя “Хост до хост” на модела DoD (TCP/IP). В същите слоеве функционира и протокола UDP (User Datagram Protocol).

ТСР осигурява зависим от връзката обмен на данни между устройства (протоколът е връзково ориентиран), поддържа множество потоци данни и позволява контрол на грешките, потока и пренареждането на пакети, пристигнали в разбъркан ред. Преди да се пристъпи към описанието на хедъра на ТСР е необходимо да се изясят понятията “порт” и “сокет“.


Портове и сокети:

ТСР/IР използва двукомпонентен логически адрес - IР адресът - за да идентифицира компютрите източници и компютрите местоназначения в мрежовите комуникации. Ако обаче две мрежови приложения, работещи на един и същ компютър, изпращат заявки и получават отговори едновременно (например дадено входящо съобщение е предназначено за E-mail програма, докато друго е Web страница, която се връща към Web браузъра) е необходимо да се направи разлика между тях. Тази разлика се дефинира с помощтта на портовете.



Портът е логическа точка на свързване. Портовете се използват от транспортните протоколи, ТСР и UDP, за да идентифицират специфичното приложение от по-горен слой, което изпраща или получава съобщението. Номерът на порт е допълнение към IР адреса. Широко използваните Интернет приложения имат предефинирани номера на портове. Тази стандартизация улеснява комуникациите. Съществуват 65 536 използваеми порта. Портове от 0 до 1023 са запазени за предефинирани услуги и са известни още като сърверни портове. Портовете от 1024 до 65535 – като клиентски портове. Например: Telnet е на сървърен порт 23, FTP е на сървърен порт 21 и т.н.

Приложения, които не са асоциирани с конкретен номер на порт, работят на портове, чиито номера се избират от определен диапазон от номера. Например номерата на портове под 255 са за широко използвани приложения, номерата 256-1023 се използват за приложения, разработвани от различни софтуерни фирми, а номерата над 1023 не са регулирани. При изпращане на данните от source хоста, се назначават изходящите номера на портовете, като се дават номера над 1023.




Общата дефиниция за сокет е „крайната точка на една връзка". За да може да се осъществи комуникация, трябва да се създаде сокет. Различните типове сокети използват различни методи за адресиране. Най-популярния метод използва IP адрес, комбиниран с номер на порт. След като завърши процесът на преобразуване на адреси, ТСР вече има достатъчно информация, за да започне процеса на създаване на сесия. Адресът на източник от мрежовия слой и клиентски порт (сокет) от една страна и адресът местоназначение от мрежовия слой и сървърен порт (сокет) от друга, формират т.н. сокет двойка (socket pair). Тъй като един и същ клиент или множество клиенти, свързващи се към един и същ отдалечен сървърен порт/сокет могат да отправят запитвания за множество ТСР връзки, сокет двойките разделят различните запитвания като уникално идентифицират и управляват комуникацията между двойките. Поради потенциалната многочисленост на връзките, създаването на сокет двойки остава критично важно за успешното действие на ТСР.


TCP хедър:

TCP хедърът включва минимум 20 байта и съдържа следните полета:




  • TCP Source Port (16 бита) - това поле съдържа номера на порта, инициирал комуникационната сесия. Порта и IP адреса на източника образуват адреса за връщане на пакета. Това е клиентски порт (1024-65535) или сървърен порт (1-1023). Ако запитването е инициирано от клиента, то номерът на порта е клиентски, ако сървърът отговаря на клиентско запитване – номерът на порта е сървърен.

  • TCP Destination Port (16 бита) - това поле съдържа номера на порта, за който е предназначена информацията. Този порт съдържа интерфейсния адрес на приложението на компютера получател, към който се подават данните от този пакет. Номерът на порта, визуализиран в това поле също зависи от посоката на комуникация: клиент към сървер или сървер към клиент.

  • TCP Sequence Number (32 бита) - това поле съдържа пореден номер, използван от получаващия компютер за реконструиране на фрагментираните данни в първоначалната им форма. В динамично маршрутизираната мрежа е напълно възможно някой от пакетите да е изминал по-дълъг път и да пристигне след тези, изпратени след него. Това поле служи за компенсиране на такава, непоредна доставка. Този пореден номер идентифицира първия байт на всяка изпращана дейтаграма. Диалогът е: “Сега изпращам данни започвайки от този номер”. Ако приемащата страна не потвърди (ACK) изпратените данни, изпращащата страна приема, че данните са загубени и ги предава отново.

  • TCP Acknowledgment Number (32 бита) - 4-байтовото поле за номер на потвърждение съдържа стойността, която идентифицира следващата поредна стойност, която хостът очаква да приеме от другата страна. АСК номерът трябва да е равен на изпратения преди това от другата страна пореден номер, плюс стойността на дължината. Приемната страна предполага, че е приела всички данни, изпратени до този момент. Това се нарича предполагаемо потвърждение (implied acknowledgment). Приемащата страна може да потвърди приемането на множество кадри с едно потвърждение (АСК). Този процес действа по-ефективно, отколкото отделното потвърждение на всеки кадър и свързаните с него допълнителни байтове.

Размерът на прозореца определя максималния брой байтове, които изпращащата страна може да предаде. Изпращащият хост може да предава множество кадри, ако приемащата страна има достатъчно голям размер на прозореца, за да ги приеме. Когато размерът на прозореца на приемащата страна удовлетворява това условие, изпращащата страна спира и изчаква за позволение (потвърждение) от приемащата страна, преди за изпрати още. За да изчислите потвърждението, прибавяте поредния номер на първия кадър от този поток към сумата от всички полета за дължина на следващите кадри; например


    • Изпращащият хост изпраща 5 кадъра.

    • Поредният номер на първия кадър в този поток е 10.

    • Всеки кадър съдържа 10 байта с данни.

Приемащият хост потвърждава това със стойността 60 (стартов пореден номер 10 + 50 (5 кадъра, умножени по дължината в байтове на всеки кадър - 10)). След това приемащият хост потвърждава приемането на всичките 50 байта с данни и очаква 60-тия байт от изпращащия хост. Това потвърждение може да се представи като следната реплика:

„След това очаквам да приема...".



  • Data Offset (4 бита) - това поле съдържа размера на ТСР хедъра, измерван в 32 битоби думи. Тъй като дължината на ТСР хедъра може да варира по размери (при използването на опции) отместването на данните е необходимо. ТСР го използва, за да предвиди точно на кое място в кадъра трябва да се очаква първият байт данни от по-горен слой.

  • Reserved (Резервирано поле) (6 бита) - това поле винаги има стойност 0. То е запазено за по-нататъшна употреба;

  • Flags (флагове) (6 бита) - това поле съдържа 6 еднобитоби флагове, позволяващи контролни функции, както следва:




    • URG (Urgent - спешно) Задава се от изпращащия хост, за да индицира, че данните, съдържащи се в този кадър, имат висок приоритет. Когато изпращащият хост зададе на този бит стойност 1, указателят за спешност Urgent Point, който се визуализира за URG бита, идентифицира (сочи към) следващият байт в кадъра, който следва след спешните данни.

    • ACK (Acknowledgement - потвърждение) Изпращащият хост задава на този бит стойност 1, за да индицира, че този кадър съдържа потвърждение на изпратените преди това данни.

    • PSH (Push- изтласкване) Всяка ТСР сесия контролира кога приетите данни се подават за обработка към приложения от по-горен слой. Когато изпращащият хост зададе на този бит стойност 1, приемащата страна не трябва да изчаква; вместо това тя трябва да изпрати данните (да ги изтласка) незабавно към процеса от по-горен слой. Задавайки на този бит стойност 1, изпращащият ТСР хост задължава приемащия ТСР хост да подаде данните нагоре без закъснение.

    • RST (Reset - анулиране) Има стойност 1, когато потребителят прекъсне сесия или когато възникне грешка във връзката, за да индицира, че сесията трябва да бъде анулирана.

    • SYN (Synchronization - синхронизация) Изгражда сесия между портове/сокети чрез синхронизиране на поредни номера.

    • FIN (Finish - край) Затваря изградена сесия и индицира, че изпращащата страна е завършила изпращането на данни.




  • Wndow Size (Размер на прозореца) (16 бита) - това поле се използва от получателя за да укаже на източника колко данни би желал да приема на ТСР сегмент. Количеството на данните, които даден хост може да приеме, варира в зависимост от ресурсите на хоста и от количеството на предаванията, които този хост приема в момента. Двубайтовото поле за прозорец дефинира максималното количество данни в байтове, които даден ТСР хост може да приеме. Хостът използва това поле за контрол на потока. Размер на прозорец, равен на нула индицира, че в момента този хост не може да приеме данни. Това обикновено индицира задръстване или недостиг на ресурси.

  • Checksum (16 бита) - тоба поле съдържа контролна сума за проверка на грешки. Източникът изчислява контролната сума въз основа съдържанието на сегмента. Получателят извършва същото изчисление. Ако съдържанието е пристигнало непокътнато, резултата от двете изчисления следва да е идентичен и това доказва валидността на данните.

  • Urgent Pointer (указател за спешност) (16 бита). 2-байтовото поле съществува само когато е зададен битът за спешност URG. Когато изпращащият хост зададе на бита за спешност стойност 1, указателят Urgent Pointer идентифицира байта в кадъра, който следва след спешните данни, за да може ясно да бъде идентифицирано мястото, откъдето започват неспешните данни.


Действие на ТСР:
ТСР осигурява двупосочна комуникация между процеси на отдалечени хостове, идентифицирани с помощта на портове. Както е описано в RFC 793, ТСР контролира комуникациите между тези процес, като осигурява:


  • Създаване и унищожаване на връзки

  • Мултиплексиране

  • Трансфер на данни

  • Контрол на потока

  • Надеждност

ТСР гарантира доставянето на пакети. ТСР е по-бавен от UDP, но последният не осигурява никаква надеждност.


Постигането на такъв висок стандарт на доставяне става с цената на голямо натоварване под формата на изграждане, поддържане и прекратяване на сесии между хостове. За разлика от протоколите без установяване на конекция, ТСР не разчита на по-долни слоеве да следят данните. ТСР не се ограничава само с идентифициране на процесите на изпращащия и приемащия хост, подавайки данните по кабела, а се грижи те да пристигнат до своето местоназначение без никакви забележки. ТСР използва контрол на реда на следване и потвърждения, за да осигури гарантирано доставяне на пакети.

Когато ТСР приеме поток от данни (съобщения), той разбива потока на сегменти и задава поредни номера на всеки байт в дейтаграмата, преди да започне доставяне с помощта на IР. Тези поредни номера изискват да бъдат връщани със сответните потвърждения от местоназначението, за да се гарантира, че то е приело от изпращащата страна всеки сегмент от дейтаграмата. ТСР поддържа копие на сегментите, съдържащи се в буфер на хоста, познат като ТСВ (блок за контрол на предаването). Ако не получи потвърждение, протоколът приема, че дейтаграмата е изгубена и я предава отново.


Създаване на връзки (сесия):
За да осигури надеждно доставяне на данни между процеси, ТСР трябва първо да изгради връзка, за да могат приложенията от по-горен слой да обменят някакви смислени данни. За да постигне това, ТСР първо изгражда връзка, наречена логическа верига (logical circuit), между портовете на отдалечените хостове. Тази връзка свързва портовете или процесите, изпълнявани на всеки от хостовете. ТСР поддържа тази връзка по време на целия разговор и я унищожава (разпада) когато вече не е нужна.

След като IР научи логическия адрес на хоста-местоназначение, ТСР създава сесия, която осигурява надеждна основа за доставянето на данни, което извършват протоколите от по-горен слой. Когато потребителят или един от хостовете поиска да затвори дадена сесия, ТСР разпада сесията.

При установяване на връзката се резервират ресурси за времето, в което трае тази връзка. По време на фазата по предаване на данните, те се предават по вече установения път като в отсрещната страна данните пристигат в реда, в който са изпратени. Резервираните ресурси се освобождават, когато връзката вече не е необходима и тя се прекъсва.
Метод Tree-way Handshake за установяване на връзка:
Хостове, които използват TCP протокол на транспортен слой, изграждат връзка помежду си преди да започнат предаването на необходимата им информация. Установяването на тази връзка става по метод, наречен Tree-way Handshake. При него става синхронизиране на връзката в двата края преди предаването на информацията. Хостовете си обменят пакети, съдържащи началният номер на последователността от пакети, които ще предават помежду си с цел следене на това дали цялата информация, която изпраща единият хост към другия и обратно се получава в отсрещната страна.

Първоначално клиентът изпраща пакет с вдигнат SYN флаг, което от сървъра се възприема като начало на инициализиране на TCP сесия. Втората стъпка от установяването на сесията настъпва когато от страна на сървъра към клиента съшо се изпраща пакет с вдигнат SYN флаг. Освен него в пакета се съдържа и вдигнат ACK флаг, който е в отговор на получения от сървъра SYN.



Третата стъпка по установяването на сесията е когато клиентът потвърди получения от сървъра пакет с вдигнат SYN флаг, чрез изпращането на пакет с вдигнат ACK флаг.
Мултиплексиране:
Възможността за мултиплексиране позволява на ТСР да създава и поддържа едновременно множество комуникационни пътища между два хоста. Мултиплексирането позволява също на един хост да разграничава и поддържа сесии с множество хостове едновременно. Хостовете трябва да притежават тази способност, защото обикновено те изпълняват множество приложения или услуги (напр. Telnet, FTP и т.н.)или други услуги. ТСР трябва да разграничава един процес от друг и да управлява и поддържа комуникациите между тези процеси. За да постигне това, ТСР използва портове, за да разграничава комуникациите и да ги управлява. Всеки път, когато хост стартира даден процес, той предизвиква отваряне на определен порт, заделяйки ресурси за този процес. Когато процесът повече не се нуждае от порта, той затваря порта, освобождавайки ресурсите, асоциирани с този порт, за следващо заделяне. ТСР използва тези портове, за да идентифицира кои процеси на изпращащия хост трябва да бъдат свързани със съответни процеси на хоста-местоназначение.Портът на хоста, заедно с логическия IР адрес от мрежовия слой идентифицират уникален процес на хоста, означаван като сокет (socket). След като изградената ТСР връзка между хостове ги свърже един с друг, тези два сокета, означавани като сокет двойка (socket pair), формират връзка. Това сдвояване позволява на хоста да разграничава множеството връзки на един и същ хост или на различни хостове.
Трансфер на данни:
ТСР приема от процеси или приложения от по-горен слой потоци от данни (съобщения) и ги организира в сегменти, които подава надолу за форматиране като дейтаграми от IР за адресиране, пакетиране и доставяне. Когато IР получи дейтаграми от отдалечен хост, той инспектира протоколния адрес в IР хедъра, за да определи дали да израти информацията посредством ТСР или UDP за обработка. Фактически ТСР се изпълнява върху протокола IP от мрежовия слой, който осигурява адресиране и доставка на дейтаграми между хостове без установяване на конекция. Стойността за тип на протокол 06 в IР хедъра идентифицира ТСР. Стойността за тип на протокол 17 в IР хедъра идентифицира UDP. Когато ТСР приеме сегменти в дейтаграми от IР, той ги реасемблира в организирани потоци от данни (съобщения), идентифицира приемащия клиент или сървърен порт и ги подава за обработка на съответното приложение (от по-горен слой). По-горните слоеве (на приложения) и по-долните слоеве (на IP) имат двупосочна взаимовръзка, в зависимост от посоката на протичане на данните. ТСР осигурява същите основни услуги на всички протоколи от по-горен слой.
Контрол на потока:
ТСР се нуждае от метод за контролиране на входящия поток от данни. Контролът на потока гарантира, че входящият трафик няма да претовари приемния буфер на хоста и че приемащият хост може адекватно да обработи и отговори на запитванията на изпращащия хост. Тази функция осигурява механизмът за работа с прозорци, идентифициран в ТСР хедъра.

Всеки краен хост поддържа свой собствен прозорец (Window) и при създаване на сесия рекламира този прозорец пред другата страна. Когато настъпи задръстване, хостът намалява размера на своя прозорец и го рекламира пред другата страна. Ефектът от това е, че хостът изисква от другата страна да намали или забави своите предавания. Когато вече няма задръстване, хостът може да увеличи размера, предупреждавайки другата страна, че тя може да изпраща повече данни.




На фигурата са показани различни етапи от дефиниране на прозорец.



  • Първоначално хостът В рекламира пред хост А размер на своя прозорец 4096 байта.

  • Хостът А отговаря като изпраща четири кадъра, всеки от които съдържа по 1024 байта. Хостът В, който сега отчита задръстване, рекламира 1024 байта като размер на своя прозорец, указвайки на хост А да забави своите предавания.

  • Хостът А отговаря чрез изпращане на максималното за прозореца количество от 1024 байта данни.

  • Хост В, претоварен от голямото количество предавания, които е приел, отговаря като рекламира прозорец с размер нула. Чрез рекламиране на Window=0, хостът В иска от хост А да спре предаването на данни, докато настъпи момент, в който може да приема повече предавания.

Изпращащата страна използва прозореца като индикация на количеството данни, което може да изпрати, преди да се наложи приемникът да му даде позволение (като му изпрати АСК), за да изпрати още. Ако състоянието

нула на прозореца продължи за продължителен период от време, без пренасяне на положителен размер на прозореца, това евентуално ще доведе до затваряне на връзката. Дори ако на хоста има състояние нула на прозореца, този хост може пак да предава данни, но може да приеме само критични кадри като АСК потвърждения и такива, пренасящи битове за RST (нулиране) или URG (спешност).





На горните две фигури са показани варианти с два размера на прозореца.


Надеждност:
Надеждността идва от гарантираната доставка на пакети, която притежава ТСР. ТСР налага контрол на реда на следване на всеки бит на изпращащата страна и съответното потвърждение на всеки приет бит от другата страна. Това позволява на хоста да открива кога информацията е изгубена или пристига в неподреден вид.

Приемащият хост не изпраща АСК, ако дейтаграмите се изгубят при пренасяне. Предаващият (изпращащият) хост има задачата да открива изгубени или липсващи кадри и да ги предава отново, ако е необходимо.



Ако изпращащият хост не получи потвърждение в зададен период от време, той получава копие на изпратената преди това информация от неговия ТСВ буфер и предава изгубените данни отново. Изпращащият хост използва таймер, базиран на изчисленото закъснение по кръгов маршрут, за да открие изгубен кадър и да го предаде отново. Ако даден таймер изтече преди приемането на потвърждение за изпратените данни, изпращащият хост приема, че дейтаграмата е изгубена и я предава отново.





Каталог: referats
referats -> Специализирани микропроцесорни системи (курс лекции) Учебна година 2008/2009
referats -> Програмата Internet Explorer
referats -> Високоскоростни компютърни мрежи. Високоскоростни км-класификация
referats -> Бройни системи основни бройни системи
referats -> Морфология и расология съдържание
referats -> 1 Строеж на атомите – модели Ръдърфор, Бор, квантово механични представи основни принципи, атомни орбитали, квантови числа
referats -> Международно наказателно право понятие за международното наказателно право
referats -> Тема 11. Връзка на асемблер с езиците от високо ниво
referats -> Въведение в операционите системи
referats -> Тема първа


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница