Loading AI tools
förbindelseorienterat dataöverföringsprotokoll Från Wikipedia, den fria encyklopedin
Transmission Control Protocol (TCP[1]) är ett förbindelseorienterat dataöverföringsprotokoll som används för huvuddelen av all kommunikation över Internet. TCP tillhandahåller en relativt pålitlig dataström mellan två datorer och används för exempelvis HTTP, FTP och e-post (SMTP, IMAP och POP3). TCP är mindre lämpligt i situationer där dess felkorrigerande egenskaper kan orsaka oönskade fördröjningar, exempelvis i datorspel. Där används ofta istället transportprotokollet UDP.
TCP och IP (Internetprotokoll) kopplas ofta samman som TCP/IP, eftersom de båda protokollen utvecklades för att arbeta tillsammans.[2]
TCP och IP uppfanns ursprungligen av amerikanerna Vint Cerf och Bob Kahn 1974. Deras uppfinning, tillsammans med principen med distribuerade nätverk, som ARPANET, lade grunden till dagens moderna internet.[3]
TCP utvecklades under 1970-talet, för att hantera kommunikationen mellan olika delar av Arpanet. Viktiga namn i utvecklingen var bland andra fransmannen Louis Pouzin,[4] Alex Curran på Bell Northern Research[5] samt de båda amerikanska ingenjörerna Vint Cerf och Bob Kahn. Vid ett möte i brittiska Sussex i september 1973 presenterade Cerf och Kahn det nya kommunikationsprotokollet "Transmission Control Protocol".[6] Målet var att producera ett protokoll som var snabbare och mer felsäkert än de hos telefonnätverkens då allenarådande kretskopplade nätverk.
Via den senare utvecklingen av TCP upptäcktes att det var lämpligt att dela upp nätverkshanteringen och hanteringen av datatransporten i olika protokoll. Därför presenterades 1978 det särskilda Internetprotokollet (IP),[7] idag mest känt via sina versioner 4 och 6. Senare har ytterligare protokoll utvecklats för att ta hand om olika funktioner och nätverkstjänster.
TCP använder sig av det underliggande protokollet IP. IP skickar data i form av paket. Varje paket innehåller en liten mängd data (ofta 1480 bytes), samt information om vilken dator som skickade paketet, och vilken dator som ska ta emot det. IP ger inga garantier för att paket som skickas över nätverket kommer fram, och paket som skickas behöver inte komma fram i samma ordning som de skickades.
När TCP skickar data så delas det upp i lämpliga stycken (så kallade segment), och varje segment skickas i ett eget IP-paket. När IP-paketet kommer fram till mottagaren skickar denna ett ACK-segment tillbaka till sändaren för att bekräfta att data kommit fram. Om sändaren inte fått ett sådant ACK-segment inom en viss tid så antas att datapaketet har försvunnit på nätet och datapaketet skickas om. På så sätt uppnås pålitligheten hos TCP.
För att hantera att IP-paket kan komma fram i oordning använder TCP sekvensnummer. Varje paket som skickas tilldelas ett 32-bitars nummer, och detta används av mottagaren för att sortera de mottagna datapaketen.
TCP innehåller mekanismer som begränsar hur fort data skickas för att inte överbelasta nätet. Varje gång nätverket förlorar ett datapaket så antas detta bero på att det ligger på gränsen för att överbelastas. TCP drar då ned på sändningstakten till hälften av den nuvarande för att undvika att lasta ned nätet ytterligare. När inga datapaket går förlorade ökar protokollet takten igen.
TCP-sessionen innehåller tre faser: anslutning, dataöverföring och nerkoppling. En trestegshandskakning används för att ansluta, medan nerkoppling kan kräva fyra steg (man skiljer mellan abortiv nerkoppling och hänsynsfull nerkoppling). Vid anslutning initieras vissa parametrar som används i dataöverföringsfasen.
Som ett första steg i anslutningsfasen skickar den anslutande datorn (klienten) ett så kallat SYN-segment till den dator som förbindelsen ska göras mot (servern). I SYN-segmentet är SYN-flaggan satt. Detta segment kan innehålla ett antal valmöjligheter som beskriver vilka specialfunktioner som klienten stödjer samt den maximala paketstorlek som klienten är beredd att ta emot. SYN-segmentet innehåller dessutom sekvensnumret för den första databyte som klienten skickar över förbindelsen.
Om servern är villig att ta emot förbindelsen svarar denna med ett SYNACK-segment. I detta segment är både SYN- och ACK-flaggorna satta och det innehåller sekvensnumret för den första databyte som servern skickar. Det innehåller även det sekvensnummer som klienten skickade, men ökat med ett. Detta synkroniserar sekvensnumret så att båda parter vet vilket sekvensnummer som motparten använder sig av. SYNACK-segmenten kan också innehålla svar på de valmöjligheter som klienten skickade, om servern stödjer dem.
Om servern inte accepterar den inkommande förbindelsen så svarar den i stället med ett RST-segment, vilket avbryter förbindelseförsöket i klienten.
När SYN-ACK-segmentet når klienten skickar denne ett ACK-segment, och förbindelsen går över i dataöverföringsfasen. Denna procedur kallas trevägshandskakningen på grund av de tre paketen som skickas: SYN, SYNACK och ACK.
När anslutningsfasen är genomförd går förbindelsen in i dataöverföringsfasen och data kan skickas mellan de två ändpunkterna i förbindelsen. I dataöverföringsfasen finns inte längre någon skillnad mellan klienten och servern; den skillnaden finns endast i anslutningsfasen.
All data som skickas delas upp i segment och skickas i var sitt IP-paket. När mottagaren tar emot ett datasegment så skickar den ett ACK-segment till sändaren för att bekräfta att segmentet har kommit fram. Om sändaren inte får ett ACK-segment inom en viss tid så har paketet troligen tappats bort av nätverket och sändaren skickar om segmentet.
En TCP-förbindelse ska kopplas ned av båda ändpunkterna av förbindelsen. När en av ändpunkterna inte har mer data att skicka så markerar den detta med att skicka ett FIN-segment. FIN-segmentet bekräftas av mottagaren genom ett vanligt ACK-segment. När mottagaren är klar stänger då också mottagaren sin del av förbindelsen genom att skicka ett FIN-segment. När båda ändpunkterna har skickat sina FIN-segment och de blivit bekräftade med ACK-segment är förbindelsen stängd. För att inte gamla segment från förbindelsen som blivit kvar i nätverket ska störa nya förbindelser ligger dock förbindelsen kvar i den ena ändpunkten i TIME_WAIT-tillståndet.
Ett vanligt programmeringsproblem är att man glömmer att stänga ena änden av förbindelser man ansluter. Detta får till följd att en massa förbindelser lever kvar i systemet i tillståndet CLOSE_WAIT.
Det finns inget standardiserat programmeringsgränssnitt för TCP, utan ett antal olika gränssnitt har utvecklats. Två vanliga gränssnitt för program används: BSD Sockets och Transport Interface.
Gränssnitt mellan två processer.
Ett TCP-paket består av en header som efterföljs av data. TCP headerns uppbyggnad kan ses i nedanstående tabell:
Offset | Oktett | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktett | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Avsändarport | Destinationsport | ||||||||||||||||||||||||||||||
4 | 32 | Sekvensnummer | |||||||||||||||||||||||||||||||
8 | 64 | ACK-nummer | |||||||||||||||||||||||||||||||
12 | 96 | Data offset | Reserverad 0 0 0 | Flaggor | Fönsterstorlek | ||||||||||||||||||||||||||||
16 | 128 | Kontrollsumma | Pekare till brådskande data | ||||||||||||||||||||||||||||||
20 ... |
160 ... |
Alternativ ... |
TCP är ett komplext protokoll och är besvärligt att implementera. Detta har visat sig som ett antal buggar, programmeringsfel, i många vanliga implementationer av TCP. Drabbade operativsystem är bland annat Solaris, Linux och Windows. Dessa programmeringsfel har gett upphov till problem i vissa nätverk på grund av problem med omsändningsklockor och överlasthantering. RFC2525 innehåller detaljerade beskrivningar och diskussioner om dessa.
TCP har både fördelar och nackdelar. Fördelen är att alla paket har överföringsgaranti (inom statistiska gränser). Detta är dock en nackdel för tillämpningar för vilka det är viktigare att data kommer fram i tid än att data kommer fram korrekt och i samma ordning som den sändes. Även om TCP i vissa fall används för strömmande media så är UDP-protokollet att föredra för sådana tillämpningar eftersom UDP-paket inte återsänds per automatik. Sådana tillämpningar måste dock sköta sin egen överlasthantering - UDP tillåter att en tillämpning skickar data med en sådan hastighet att den tränger ut annan kommunikation från nätverket.
Utöver UDP och TCP har en mängd andra transportprotokoll utvecklats genom åren, men dessa har inte fått någon större spridning. Ett transportprotokoll som är under aktiv utveckling är SCTP, Stream Control Transmission Protocol. SCTP kombinerar funktioner från både TCP och UDP samt lägger till några funktioner som inte finns hos dessa protokoll. Till exempel tål SCTP att IP-adresserna hos ändpunkterna för en förbindelse ändras utan att förbindelsen kopplas ned.
TCP är formellt definierat i en mängd RFC-dokument:
Dessutom finns ett antal RFC-dokument som diskuterar bland annat speciella problem med implementationer av protokollet:
Utöver dessa finns ett antal dokument som specificerar experimentalla tillägg till TCP:
Det finns även en uppsjö av RFC-dokument som diskuterar olika varianter av TCP och hur dessa fungerar i verkliga nätverk:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.