|
Article on other languages:
|
TCP (angļu: Transmission Control Protocol; Pārraides vadības protokols) ir viens no galvenajiem interneta protokoliem. TCP ļauj tīkla datoru programmām izveidot konnekcijas no vienas uz otru, caur kurām var pārsūtīt datus. Atšķirībā no UDP, šis protokols garantē drošu un secīgu datu pārraidi. TCP arī atšķir dažādu programmu konnekciju datus (lietojot portu numurus). TCP ir internetā plašāk lietotais transporta slāņa protokols. Programmas TCP piegādā baitu plūsmas, kas tiek sadalītas atbilstoša izmēra segmentos (kuru izmēru parasti nosaka kanāla slāņa MTU (maximum transmission unit)). Iegūtās paketes TCP tālāk piegādā IP nosūtīšanai caur tīklu. TCP pārbauda, vai paketes nav pazaudētas katrai paketei pieliekot sequence number, kuru arī lieto lai pārliecinātos, ka dati ir piegādāti sākotnējā secībā. Par sekmīgi saņemtajām paketēm, TCP sūta atpakaļ apstiprinājumus (acknowledgement). Ja sūtītājs laicīgi (kamēr nav iestājies taimauts) nesaņem apstiprinājumu, paketi uzskata par pazaudētu un nosūta vēlreiz. TCP pārbauda vai paketes dati nav bojāti, lietojot kontrolsummu. TCP nav optimizēts lietošanai bezvadu tīklos. Pieņem, ka visi pakešu zudumi (packet loss) rodas nepietiekamas datu kanāla caurlaidības dēļ. Bezvadu tīklos pakešu zudumi rodas lielākoties citu iemeslu dēļ. Tas samazina TCP ātrumu šādos apstākļos, jo pēc katras pazaudētās paketes TCP samazina sūtīšanas ātrumu. Lai arī TCP ir internetā visplašāk lietotais transporta slāņa protokols, ir daži pielietojumi, kur tas nav piemērots (tur lieto UDP):
Protokola darbībaAtšķirībā no UDP, kas var sākt sūtīt datus bez jebkādas iepriekšējas sagatavošanās, TCP nodrošina konnekcijas, kuras vispirms vajag izveidot, pirms var sākt sūtīt datus. TCP konnekcijām ir 3 dzīves stadijas:
Konnekciju galapunkti datorā ir soketi (sockets). TCP tiem var būt 11 stāvokļi:
Konnekcijas atvēršanaLai klients varētu pieslēgties serverim, tur ir jābūt atvērtam portam (passive open). Pēc tam klients uz turieni var sūtīt konnekcijas pieprasījumu. TCP, tāpat kā UDP, ir klienta-servera bāzēts protokols. Visas TCP implementācijas spēj darboties gan kā klients, gan kā serveris. Klients atver konnekciju uz serveri. Konnekcijas sastāv no divien vienvirziena datu kanāliem.
Piemērs:
Datu pārraideGalvenās TCP atšķirības no UDP ir:
Atverot konnekciju, abi datori apmainās ar numuriem (sequence numbers), tie numuri var būt jebkādi skaitļi, šis skaitlis apraksta no attiecīgā datora nosūtīto baitu skaitu, katrai nākamajai paketei tas palielinās par iepriekšējā paketē nosūtīto baitu skaitu. Paketes apstiprinājumi (ACK) satur nākamo sagaidāmo sequence number (pēdējais saņemtais baits +1). Ja paketes pazūd, pārsūta visu kopš pēdējā veiksmīgi apstriprinātā baita. Sequence number un ACK nodrošina dubulto pakešu identifikāciju (tām tie būs vienādi), pazaudēto pakešu atkārtotu nosūtīšanu (ja sūtītājs laicīgi nesaņem ACK tas uzskata, ka pakete ir pazaudēta un nosūta vēlreiz) un secīgu datu pārraidi (numuri (sequence numbers) atbilst nosūtīto baitu skaitam, ja saņem mazāk baitu kā būtu jābūt pēc tiem numuriem, ir skaidrs, ka pa vidu kautkā trūkst. Lai pārliecinātos, ka dati pārsūtīšanas laikā nav bojāti, lieto 16bitu kontrolsummu. Plūsmas vadība (congestion control un flow control). Šajām vajadzībām TCP lieto vairākus mehānismus, kuri regulē nosūtīšanas ātrumu. Sūtītāji tam lieto saņemtos un nesaņemtos ACK. (Ja saņem ACK, uzskata, ka dati ir aizgājuši veiksmīgi, ja nesaņem - ka ir pazaudēti) Par galveno datu pazaudēšanas iemeslu uzskata savienojuma nepietiekamo datu caurlaidību (kā dēļ rūteri ir bijuši spiesti paketes izmest). Pārraides logs (transmit window) ir ienākošo datu bufera izmērs, tas ir maksimālais datu daudzums, kādu var nosūtīt sūtītājs nesaņemot ACK. ACK paketes satur datus par atlikušo pārraides loga vietu. Ja sūtītājs saņem paziņojumu, ka pieejamais pārraides loga izmērs ir 0, tas pārtrauc sūtīt un gaida. Lai novērstu situāciju, kad ja pakete kas ziņoja par jaunu brīvo vietu pārraides logā ir pazaudēta un komunikācijas iestrēgst, sūtītājs ik pa laikam nosūta mazu paketi, kurai atbilstošais ACK satur pēdējo pārraides loga (transmit window) izmēru. Konnekcijas aiztaisīšanaAiztaisot konnekciju parasti tiek nosūtītas 4 paketes. Viens gals sāk konnekcijas aiztaisīšanu nosūtot FIN paketi, kuru otrs gals apstiprina ar ACK. Lai aiztaisītu otru konnekcijas pusi, vajag vēl divas tādas pašas paketes pretējā virzienā. Dažreiz pirmo ACK apvieno ar otro FIN, tad var iztikt ar 3 paketēm. Ja pazūd sakari (nevienai nosūtītajai paketei nepienāk ACK), tad arī konnekcija nobrūk. tcp portiTCP lieto poru numurus, lai identificētu sūtošās un saņemošās programmas konnekciju galapunktos. Katram TCP konnekcijas galam ir piesaistīts 16 bitu skaitlis - porta numurs, pēc kura identificē ienākošās paketes. Noteiktiem serveriem parasti piesaista noteiktus portu numurus (piem http - 80, smtp - 25), kurus lieto kā noklusēto vērtību. TCP segmentu struktūraTCP sadala ienākošo datu plūsmu segmentos (paketēs), kuras tālāk ievieto IP paketēs nosūtīšanai tālāk. TCP segments sastāv no divām daļām - hedera un datiem. TCP hederis sastāv no 11 laukiem, no kuriem 10 ir obligāti.
Kontrolsummu aprēķina datiem, visam TCP hederim (aizvietojot kontrolsummas lauku ar nullēm) un daļai IP hedera, kas satur abas adreses, paketes garuma lauku (16bit) protokola lauku (8bit)(identificē TCP un ir 6) un tukšu 8 bit lauku. (pēdējie 3 pretējā secībā). IPv6 gadījumā paketes garuma lauks nāk tieši aiz adresēm un ir 32bit, pēc tam ir 24bit nulles un aiz tām ir next header lauks kas identificē TCP un ir 8bit. More about TCP: tcp ip protocol, tcp optimizer, tcp port, tcp ip network, tcp ip programming, 192.168.100.1 tcp, dr tcp, tcp protocol, guide to tcp ip, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.