Transmission Control Protocol (ТСР) е еден од основните протоколи на ТСР/ IP. ТСР обезбедува сигурна, точна и подредена достава на проток на октети, од програмата на еден компјутер на друг. Тој е протокол кој се користи од страна на прелистувачите на мрежни места на World Wide Web, електронска пошта, далечинска администрација и пренос на податотеки. Други апликации, кои не бараат сигурна услуга за пренос на податоци, може да го користат User Datagram Protocol (UDP), кој обезбедува датаграм услуги кои ја нагласуваат намалената латенција над сигурност. Потекло Во мај 1974 година на Институтот за електро инженери и инженери по електроника (IEEE) објави труд под наслов "A Protocol for Packet Network Intercommunication". Авторите Vint Cerf и Bob Kahn, опишаа меѓумрежен протокол за споделување на ресурси со користење на пакетно преклопување (packet-switching) меѓу јазли. Централна контролна компонента на овој модел е Програмата за контрола на трансмисија (Transmission Control Program) која инкорпорира и конекциски ориетирани врски и датаграм услуги помеѓу домаќините. Монолитната Програма за контрола на трансмисија подоцна беше поделена во модуларна архитектура, која се состои од Протоколот за контрола на пренос кој работи на конекциски ориентираниот слој и Интернет протокол кој работи на меѓумрежниот/датаграм (internetworking) слој. Моделот стана познат неофицијално како TCP/IP, иако формално беше наречен Пакет на Интернет протоколи (Internet Protocol Suite).
Мрежна фунција
Протоколот одговара на транспортниот слој на TCP/IP пакетот. TCP обезбедува комуникациски услуги на средно ниво меѓу апликациската програма и Интернет Протоколот (IP). Кога некоја апликациска програма сака да испрати големо парче на податоци преку интернет користејќи IP, наместо делење на податоците во IP делови и издавање на серија на IP барања, софтверот може да издаде едно барање на TCP и TCP да справи со IP деталите.
IP работи со размена на делови од информација наречени пакети. Пакет е низа од октети и се состои од наслов (header) проследено со тело (body). Насловот ја опишува одредиште на пакет и по можност, насочувачите кои се користат за пренасочување на пекетот сè додека не пристигне до неговото одредиште. Телото ги содржи податоците кои IP ги емитува.
Поради преоптоварување во мрежата, сообраќајот се балансира(Load Balancing), или се случуваат некои други непредвидливи однесувања на мрежата, IP пакетите може да бидат изгубени, да бидат дуплицирани или испорачани вон редслед. TCP ги детектира овие проблеми, може да побара и реемитување на изгубени податоци, ги преуредува измешаните пакети па дури и помага да се минимизира метежот во мрежата и да се намали појавата на други проблеми. Откако TCP на страната на примачот ќе ги состави октетите по точен редослед ги предава а апликациите на погорно ниво. Така, TCP ја абстрахира комуникацијата на апликацијата со детали на подолните мрежни нивоа.
TCP е оптимизиран за точна испорака наместо навремена испорака и затоа со TCP понекогаш настануваат релативно долги закаснувања(од ранг на секунди), додека се чекаат неподредените или изгубените пораки. TCP не е погоден за апликации кои работат во реално време како што се Voice over IP. За таквите апликации се препорачани протоколи како RTP (Real-time Transport Protocol) кој работи врз UDP.
TCP е сервис за надежна испорака кој гарантира дека сите пристигнати бајти ќе бидат идентични со бајтите испратени и во правилен редослед. Бидејќи трансферот на пакети не е сигурен, техника позната како позитивна потврда со реемитување(acknowledgment with retransmission) се користи за да се гарантира сигурноста на трансферот. Оваа фундаментална техника бара примачот да одговори со потврдна порака како што добива податоци. Испраќачот чува (record) евиденција за секој пакет што се испраќа. Испраќачот, исто така, има тајмер кој мери кога пакет бил испратен и го препраќа пакетот ако тајмерот истече пред испораката да е потврдена. Тајмерот е потребен во случај да се добиваат изгубени или оштетени пакети.
TCP состои од множество правила: правила за протоколот за контрола на пренос, и правила за IP, за праќање на податоци "во форма на порака единици" помеѓу компјутерите на интернет. Додека IP справува со реалната испорака на податоци, TCP ги следи поединечните единици на пренос на податоци, наречени сегменти. Пораката која се праќа е поделена за ефикасно насочување преку мрежата. На пример, кога една HTML податотека се праќа од опслужувачот, софтверскиот TCP слој на тој опслужувач ја дели низата октети на податотеката во сегменти и ги предава на IP софтверскиот слој (интернет слој). Интернет слојот го енкапсулира секој сегмент во IP пакет со додавање на наслов (header) кој ја вклучува (меѓу другите податоци) дестинациската IP-адреса. Иако секој пакет има истата дестинациска адреса, тие може да се рутраат низ различни патеки на мрежата. Кога клиентската програма на дестинацискиот компјутер ги прима, TCP слојот (Transport Layer) ги спојува одделните сегменти и обезбедува тие се правилно да се подредат, без грешки, при што се пренесуваат на апликацијата. Структура на TCP сегмент Протоколот за контрола на трансмисија ги прифаќа податоците од поток, ги сегментира, и со додавање на TCP заглавје ги создава TCP сегментите. Тогаш сегментите се енкапсулираат во пакети на Интернет Протоколот (IP пакети/датаграми). Еден TCP сегмент е „пакет од информации кои TCP ги користи за размена на податоци со другите нодови“. Терминот TCP пакет, иако понекогаш е неформално користен, не е во согласност со прифатената терминологија. Прифатено е PDU-то (Податочна единица на протокол = Protocol Data Unit) на TCP да се нарекува сегмент, PDU на IP е датаграмRFC 791 – section 2.1, а на слојот за податочна врска се рамки.
Еден TCP сегмент се состои од заглавје на сегментот и дел за податоци. Заглавјето содржи 10 задолжителни полиња и опционално поле за екстензии. (Опции, со портокалова позадина во табелата).
+TCP заглавје Отстапувања Октет 0 1 2 3 Октет Bit 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Изворна порта Дестинациска порта 432 Број на низа 864 Број на потврда (ако ACK е поставено) 12 96 Податочно отстапување Резервирано0 0 0 NSCWRECEURGACKPSHRSTSYNFIN Големина на прозорец 16128 Контролен збир Покажувач за ургентност (ако URG е поставено) 20...160... Опции (ако податочното отстапување (offset) > 5. Се дополнува на крајот со "0" ако е потребно.)...
Изворна порта (16 бита) - ја идентификува испраќачката порта Дестинациска порта (16 бита) - ја идетификува примачката порта Број на низа (32 бита) - има двојна улога Ако SYN знаменцето е поставено, тогаш ова е почетниот број на низа. низниот број на брвиот бајт и потврдениот број во соодведното ACK тогаш се овој низен број плус 1 Ако SYN знаменцето е нула, тогаш ова е ова е акумулираниот низен број на првиот бајт од овој сегмент за моменталната сесија. Број на потврда (32 бита) - ако ACK знаменцето е поставено тогаш вредноста на ова поле е следниот број на низа што примачот го очекува. Ова го потврдува примањето на сите претходи бајти. Првиот ACK пратен од двете страни ја потврдува почетната низа на другиот, не потврдува праќање на податоци. Податочно отстапување (4 бита) - кажува колку е големо заглавјето во 32-битни зборови. Минималната големина е 5 збора, максимум е 15 што ја дава минималната големина од 20 бајти и максимум од 60 бајти, дозволувајќи 40 бајти простор за опции во заглавјето. Ова поле името го добива од фактот дека го претставува отстапувањето од почетокот на TCP сегментот до податоците во него. Резервирани (3 бита) - за идна потреба, треба да се нула Знаменца (9 бита) - познати и како контролни битови, содржи 9 едно битни знаменца NS - додаден во RFC 3540 CWR - Congestion Window Reduced - се поставува ова знаменце од страна на испраќачот да индицира дека примил TCP сегмент со поставено ECE знаменце и одговорил на механизмот за контрола на загушувањето (додадено е во заглавјето во RFC 3168) ECE - ECN-Еcho покажува Ако е поставенo SYN знаменцето, тогаш овој TCP соговорник има можност за експлицитно известување за загушување (Explicit Congestion Notification - ECN) Ако не е поставено SYN тогаш бил добиен пакет кој во IP заглавјето имал поставен Congestion Experienced знаменце (било забележано загушување во ИП слојот) (додадено во заглавјето во RFC 3168). URG - покажува дека полето Urgent/Итно да се зема предвид ACK - покажува дека полето за Acknowledgement/Потврда се зема предвид. Сите сегменти по првичниот SYN сегмент мора да го имаат поставено ова знаменце PSH - Функција за пренесувње (Push), бара баферираните податоци да се пренесат на апликацијата која ги прима. RST - ја ресетира врската. SYN - синхронизирај ги броевите на низа. Само првите сегменти пратени од двата краја треба да го имаат поставено ова знаменце. Некои од останатите знаменца може да си го променат значењето во зависност од поставеноста на ова знаменце, некои се валидни само ако е ова поставено, некои само ако не е. FIN - нема повеќе податоци од испраќачот. Големина на прозорец (16 бита) - големината на примачкиот прозорец кој кажува колку бајти праќачот на овој сегмент е спремен да прими. Контролен збир (16 бита) - поле кое се користи за проверка на грешки во заглавјето и податоците. Покажувач за ургентност - ако е поставено URG знаменцео, тогаш ова поле е отстапувањаето од бројот на низата што покажува кој е последниот бајт кој е ургентен. Опции (Помеѓу 0 и 320 бита, број деллив со 32) - големината на ова поле е одредено од полето Податочно отпстапување. Опциите имаат до 3 полиња: Тип на опција (1 бајт), Должина на опција (1 бајт), Податоци на опција (променливо). Дополнување (Padding) - Заглавјето на TCP мора да завршува на граница од 32 бита. Дополнувањето се состои од нули.RFC 793 section 3.1
Протокол
Операциите на TCP протоколот може да се поделат на три фази. Врските мора да се прописно воспостават во процес на преговарање во повеќе чекори (handshake) што е фазата на воспоставување врска пред да се започне со фазата на трансфер на податоци. По преносот на податоци, настапува терминирање на врската со што се затвораат сите виртуелни кола и се ослободуваат алоцираните ресурси.
TCP врската е водена од оперативниот систем преку програмски интерфејс кој претставува локална крајна точка за комуникациите наречена сокет (Internet Socket). За време на една TCP врска локалната крајна точка преминува низ серија промени на состојба:RFC 793 Section 3.2 LISTEN (опслужувач) претставува чекање за барање за врска од било кој оддалечен TCP и порта. SYN-SENT (клиент) претставува чекање на соодветно барање на врска имајќи пратено веќе барање на врска. SYN-RECEIVED (опслужувач) претставува чекање на потврда за побараната врска откако двете страни побарале и испратиле барање за врска. ESTABLISHED (опслужувач и клиент) отворена врска, податоците кои се примаат се предаваат на корисникот. Нормална состојба за фазата на пренос на податоци. FIN-WAIT-1 (опслужувач и клиент) чекање на барање за терминирање на врска од оддалечениот TCP, или потврда дека претходно било испратено барање за терминирање на врска. FIN-WAIT-2 (опслужувач и клиент) челање на барање за терминирање на врска од оддалечениот TCP. CLOSE-WAIT (опслужувач и клиент) чекање за барање за терминирање на врска од локалниот корисник. CLOSING (опслужувач и клиент) чекање за потврда за барање за затворање врска од оддалечениот TCP. LAST-ACK (опслужувач и клиент) чекање на потврда за претходно пратено барање кон оддалечениот TCP (што вклучува потврда на неговото барање за терминирање на врска). TIME-WAIT (или опслужувач или клиент) чекање да помине доволно време за да се осигура дека оддалечениот TCP ја примил потврдата за неговото барање за терминирање на врската [Според RFC 793 една врска може да остане во TIME-WAIT максимум 4 минути] CLOSED (опслужувач и клиент) состојба каде нема никаква врска. Воспоставување врска