Överföringskontrollprotokoll - Transmission Control Protocol
Den Transmission Control Protocol ( TCP ) är en av de viktigaste protokollen i Internet protokollsviten . Det har sitt ursprung i den första nätverksimplementeringen där det kompletterade Internet Protocol (IP). Därför kallas hela sviten TCP/IP . TCP tillhandahåller tillförlitlig , beställd och felkontrollerad leverans av en ström av oktetter (byte) mellan applikationer som körs på värdar som kommunicerar via ett IP-nätverk. Stora internetapplikationer som World Wide Web , e -post , fjärradministration ochfilöverföring är beroende av TCP, som är en del av transportskiktet i TCP/IP -sviten. SSL/TLS körs ofta ovanpå TCP.
TCP är anslutningsorienterat och en anslutning mellan klient och server upprättas innan data kan skickas. Servern måste lyssna (passiv öppen) för anslutningsbegäranden från klienter innan en anslutning upprättas. Trevägs handskakning (aktiv öppen), vidarebefordran och feldetektering ökar tillförlitligheten men förlänger latensen . Program som inte kräver pålitlig dataströmtjänst kan använda User Datagram Protocol (UDP), som tillhandahåller en anslutningslös datagramtjänst som prioriterar tid framför tillförlitlighet. TCP använder nätverksöverbelastning . Det finns dock sårbarheter för TCP, inklusive denial of service , kapning av anslutningar , TCP -veto och återställning av attack .
Internet -protokoll |
---|
Appliceringsskikt |
Transportskikt |
Internet lager |
Länk lager |
En central kontrollkomponent i denna modell var Transmission Control Program som inkluderade både anslutningsorienterade länkar och datagramtjänster mellan värdar. Det monolitiska överföringsstyrningsprogrammet delades senare upp i en modulär arkitektur bestående av överföringsstyrningsprotokollet och internetprotokollet . Detta resulterade i en nätverksmodell som informellt blev känd som TCP/IP , även om den formellt kallades på olika sätt som Department of Defense (DOD) -modellen och ARPANET -modellen, och så småningom också som Internet Protocol Suite .
År 2004 Vint Cerf och Bob Kahn fick turingpriset för deras grundläggande arbete på TCP / IP.
Transmission Control Protocol tillhandahåller en kommunikationstjänst på en mellanliggande nivå mellan ett applikationsprogram och Internetprotokollet. Det ger värd-till-värd-anslutning vid transportlagret i Internet-modellen . En applikation behöver inte känna till de särskilda mekanismerna för att skicka data via en länk till en annan värd, till exempel den erforderliga IP -fragmenteringen för att rymma överföringsmediets maximala överföringsenhet . På transportskiktet hanterar TCP alla handskaknings- och överföringsdetaljer och presenterar en abstraktion av nätverksanslutningen till applikationen vanligtvis via ett nätverksuttagsgränssnitt .
På de lägre nivåerna i protokollstacken, på grund av överbelastning på nätet , trafikbelastningsutjämning , eller oväntad nätverksbeteende, kan IP-paket skall förloras , dupliceras, eller levereras i ordning . TCP upptäcker dessa problem, begär vidarebefordran av förlorade data, ordnar om data som inte är i ordning och hjälper till och med att minimera överbelastning av nätverket för att minska förekomsten av andra problem. Om uppgifterna fortfarande inte levereras meddelas källan om detta fel. När TCP -mottagaren har återmonterat sekvensen av oktetter som ursprungligen överfördes, skickar den dem till den mottagande applikationen. Således abstraherar TCP applikationens kommunikation från de underliggande nätverksdetaljerna.
TCP används i stor utsträckning av många internetapplikationer, inklusive World Wide Web (WWW), e-post , File Transfer Protocol , Secure Shell , peer-to-peer fildelning och strömmande media .
TCP är optimerad för korrekt leverans snarare än snabb leverans och kan medföra relativt långa förseningar (i storleksordningen sekunder) i väntan på meddelanden som inte är i ordning eller vidarebefordran av förlorade meddelanden. Därför är den inte särskilt lämplig för realtidsapplikationer som röst över IP . För sådana applikationer rekommenderas i stället protokoll som Real-Time Transport Protocol (RTP) som fungerar via User Datagram Protocol (UDP).
TCP är en pålitlig strömleveransservice som garanterar att alla mottagna byte är identiska och i samma ordning som de som skickas. Eftersom paketöverföring från många nätverk inte är tillförlitlig, uppnår TCP detta med en teknik som kallas positiv bekräftelse med återöverföring . Detta kräver att mottagaren svarar med ett bekräftelsemeddelande när den tar emot data. Avsändaren registrerar varje paket som det skickar och håller en timer från när paketet skickades. Avsändaren sänder om ett paket om timern går ut innan kvitteringen tas emot. Timern behövs om ett paket går vilse eller skadas.
Medan IP hanterar faktisk leverans av data, håller TCP reda på segment - de enskilda enheterna för dataöverföring som ett meddelande är uppdelat i för effektiv routning genom nätverket. Till exempel, när en HTML -fil skickas från en webbserver, delar TCP -programvarulagret på den servern filen i segment och vidarebefordrar dem individuellt till internetskiktet i nätverksstacken . Internetlagerprogramvaran inkapslar varje TCP -segment i ett IP -paket genom att lägga till ett huvud som inkluderar (bland annat data) destinations -IP -adressen . När klientprogrammet på destinationsdatorn tar emot dem, samlar TCP-programvaran i transportskiktet segmenten igen och ser till att de är ordnade och felfria när det strömmar filinnehållet till den mottagande applikationen.
Transmission Control Protocol accepterar data från en dataström, delar den i bitar och lägger till ett TCP -huvud som skapar ett TCP -segment. TCP -segmentet inkapslas sedan till ett Internet Protocol (IP) datagram och utbyts med kamrater.
Termen TCP-paket visas i både informella och formella användning, medan i mer exakt terminologi segmentet avser TCP -protokolldataenhet (PDU), datagram till IP-PDU, och ramen till datalänkskiktet PDU:
Processer överför data genom att anropa TCP och skicka buffertar med data som argument. TCP paketerar data från dessa buffertar till segment och uppmanar internetmodulen [t.ex. IP] att överföra varje segment till destinations -TCP.
En TCP segment består av ett segment header och en uppgifter sektion. Segmentrubriken innehåller 10 obligatoriska fält och ett valfritt tilläggsfält ( Alternativ , rosa bakgrund i tabellen). Datasektionen följer rubriken och är nyttolastdata som överförs för applikationen. Datasektionens längd anges inte i segmenthuvudet; Det kan beräknas genom att subtrahera den kombinerade längden för segmenthuvudet och IP -huvudet från den totala IP -datagramlängden som anges i IP -rubriken.
Förskjutningar | Oktett | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktett | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | Källport | Destinationsport | ||||||||||||||||||||||||||||||
4 | 32 | Sekvensnummer | |||||||||||||||||||||||||||||||
8 | 64 | Kvittensnummer (om ACK är inställt) | |||||||||||||||||||||||||||||||
12 | 96 | Dataförskjutning | Reserverad 0 0 0 |
NS |
CWR |
ECE |
URG |
ACK |
PSH |
RST |
SYN |
FENA |
Fönsterstorlek | ||||||||||||||||||||
16 | 128 | Checksumma | Brådskande pekare (om URG är inställd) | ||||||||||||||||||||||||||||||
20 |
160 |
Alternativ (om dataförskjutning > 5. Vadderad i slutet med "0" byte om det behövs.) |
|||||||||||||||||||||||||||||||
⋮ | ⋮ | ||||||||||||||||||||||||||||||||
60 | 480 |
- Källport (16 bitar)
- Identifierar sändarporten.
- Destinationsport (16 bitar)
- Identifierar den mottagande porten.
- Sekvensnummer (32 bitar)
- Har en dubbel roll:
- Om SYN -flaggan är inställd (1) är detta det första sekvensnumret. Sekvensnumret för den faktiska första databyten och det kvitterade numret i motsvarande ACK är sedan detta sekvensnummer plus 1.
- Om SYN -flaggan är klar (0) är detta det ackumulerade sekvensnumret för den första databyten för detta segment för den aktuella sessionen.
- Kvittensnummer (32 bitar)
- Om ACK -flaggan är inställd är värdet på detta fält nästa sekvensnummer som ACK: s avsändare förväntar sig. Detta bekräftar mottagandet av alla tidigare byte (om sådana finns). Den första ACK som skickas av varje ände erkänner själva den andra ändens initiala sekvensnummer, men inga data.
- Dataförskjutning (4 bitar)
- Anger storleken på TCP-rubriken i 32-bitars ord . Den minsta storleksrubriken är 5 ord och den högsta är 15 ord, vilket ger en minsta storlek på 20 byte och högst 60 byte, vilket möjliggör upp till 40 byte med alternativ i rubriken. Detta fält får sitt namn från det faktum att det också är förskjutningen från början av TCP -segmentet till faktiska data.
- Reserverad (3 bitar)
- För framtida bruk och bör sättas till noll.
- Flaggor (9 bitar)
- Innehåller 9 1-bitars flaggor (kontrollbitar) enligt följande:
- NS (1 bit): ECN -nonce - dold skydd
- CWR (1 bit): Flagga för överbelastningsfönster (CWR) -flagga ställs in av den sändande värden för att indikera att den mottog ett TCP -segment med ECE -flagguppsättningen och hade svarat i överbelastningskontrollmekanismen.
- ECE (1 bit): ECN-Echo har en dubbel roll, beroende på värdet på SYN-flaggan. Det indikerar:
- Om SYN -flaggan är inställd (1) är TCP -peer -enheten ECN -kompatibel.
- Om SYN -flaggan är klar (0) togs det emot ett paket med Congestion Erfaren flagga (ECN = 11) i IP -rubriken under normal överföring. Detta fungerar som en indikation på nätverksträngning (eller överhängande överbelastning) för TCP -avsändaren.
- URG (1 bit): Indikerar att fältet Urgent pekare är betydande
- ACK (1 bit): Indikerar att fältet Bekräftelse är betydande. Alla paket efter det första SYN -paketet som skickas av klienten bör ha denna flagga.
- PSH (1 bit): Push -funktion. Begär att skicka buffrade data till den mottagande applikationen.
- RST (1 bit): Återställ anslutningen
- SYN (1 bit): Synkronisera sekvensnummer. Endast det första paketet som skickas från varje ände ska ha denna flagga. Vissa andra flaggor och fält ändrar betydelse baserat på denna flagga, och vissa är endast giltiga när den är inställd, och andra när den är klar.
- FIN (1 bit): Sista paketet från avsändaren
- Fönsterstorlek (16 bitar)
- Storleken på mottagningsfönstret , som anger antalet fönsterstorlekenheter som avsändaren för detta segment för närvarande är villig att ta emot. (Se § Flödeskontroll och § Fönsterskalning .)
- Checksumma (16 bitar)
- 16-bitars kontrollsumfältet används för felkontroll av TCP-huvudet, nyttolasten och en IP-pseudo-rubrik. Pseudohuvudet består av källens IP-adress , destinations-IP-adressen , protokollnumret för TCP-protokollet (6) och längden på TCP-rubrikerna och nyttolasten (i byte).
- Brådskande pekare (16 bitar)
- Om URG-flaggan är inställd, är detta 16-bitars fält en förskjutning från sekvensnumret som anger den sista brådskande databyten.
- Alternativ (variabel 0–320 bitar, i enheter om 32 bitar)
- Fältets längd bestäms av dataförskjutningsfältet . Alternativ har upp till tre fält: Option-Kind (1 byte), Option-Length (1 byte), Option-Data (variabel). Fältet Option-Kind anger typen av alternativ och är det enda fältet som inte är valfritt. Beroende på Option-Kind-värdet kan nästa två fält ställas in. Alternativlängd indikerar alternativets totala längd och Alternativ-data innehåller data som är associerade med alternativet, om tillämpligt. Till exempel anger en Option-Kind-byte 1 att detta är ett alternativ utan användning som endast används för stoppning och att det inte finns några Option-Length- eller Option-Data-fält efter det. En Option-Kind-byte på 0 markerar slutet på alternativen och är också bara en byte. En Option-Kind-byte på 2 används för att ange alternativet Maximal segmentstorlek, och kommer att följas av en Option-Length-byte som anger längden på MSS-fältet. Option-Length är den totala längden på det angivna alternativfältet, inklusive Option-Kind och Option-Length-fält. Så medan MSS-värdet vanligtvis uttrycks i två byte, kommer Option-Length att vara 4. Som ett exempel kodas ett MSS-alternativfält med värdet 0x05B4 som (0x02 0x04 0x05B4) i avsnittet TCP-alternativ.
- Vissa alternativ kan bara skickas när SYN är inställt. de anges nedan som
[SYN]
. Option-Kind och standardlängder anges som (Option-Kind, Option-Length).
Alternativ-typ Alternativ-längd Alternativ-data Ändamål Anteckningar 0 Ej tillgängligt Ej tillgängligt Slut på alternativlista 1 Ej tillgängligt Ej tillgängligt Ingen operation Detta kan användas för att anpassa alternativfält på 32-bitars gränser för bättre prestanda. 2 4 SS Maximal segmentstorlek Se § Maximal segmentstorlek [SYN]
3 3 S Fönsterskala Se § Fönsterskalning för mer information [SYN]
4 2 Ej tillgängligt Selektiv bekräftelse tillåten Se § Selektiva bekräftelser för detaljer [SYN]
5 N (10, 18, 26 eller 34) BBBB, EEEE, ... Selektiv bekräftelse (SACK) Dessa två första byte följs av en lista med 1–4 block som selektivt bekräftas, specificerade som 32-bitars start/slutpekare. 8 10 TTTT, EEEE Tidsstämpel och eko från tidigare tidsstämpel Se § TCP -tidsstämplar för mer information
- De återstående Option-Kind-värdena är historiska, föråldrade, experimentella, ännu inte standardiserade eller otilldelade. Tilldelningsnummer tilldelas underhålls av IANA.
- Stoppning
- TCP-sidhuvudet används för att säkerställa att TCP-huvudet slutar och data börjar på en 32-bitars gräns. Fyllningen består av nollor.

TCP -protokolloperationer kan delas in i tre faser. Anslutningsetablering är en handskakningsprocess i flera steg som upprättar en anslutning innan du går in i dataöverföringsfasen . Efter dataöverföring är klar anslutningsavslutnings stänger anslutningen och släpper alla tilldelade resurser.
En TCP-anslutning hanteras av ett operativsystem via en resurs som representerar den lokala slutpunkten för kommunikation, Internet-uttaget . Under en TCP-anslutnings livstid genomgår den lokala slutpunkten en rad tillståndsändringar :
stat | Slutpunkt | Beskrivning |
---|---|---|
LYSSNA | Server | Väntar på en anslutningsbegäran från någon fjärr-TCP-slutpunkt. |
SYN-SKICKAD | Klient | Väntar på en matchande anslutningsbegäran efter att ha skickat en anslutningsbegäran. |
SYN-MOTTAGET | Server | Väntar på bekräftelse av anslutningsbegäran efter att ha mottagit och skickat en anslutningsbegäran. |
ETABLERADE | Server och klient | En öppen anslutning, mottagen data kan levereras till användaren. Normalt tillstånd för dataöverföringsfasen för anslutningen. |
FIN-VÄNTA-1 | Server och klient | Väntar på en anslutningsavslutningsbegäran från fjärr -TCP, eller ett kvitto på anslutningsavslutningsbegäran som tidigare skickats. |
FIN-VÄNTA-2 | Server och klient | Väntar på en anslutningsavslutningsbegäran från fjärr -TCP: n. |
STÄNG VÄNTA | Server och klient | Väntar på en anslutningsavslutningsbegäran från den lokala användaren. |
STÄNGNING | Server och klient | Väntar på bekräftelse från en anslutningsavslutning från fjärr -TCP: n. |
SENASTE | Server och klient | Väntar på en bekräftelse på anslutningsavslutningsbegäran som tidigare skickats till fjärr -TCP (som inkluderar en bekräftelse på dess begäran om avslutande av anslutning). |
TID VÄNTA | Server eller klient | Väntar på att det ska ta tillräckligt med tid för att vara säker på att fjärr -TCP: n fått bekräftelse på sin begäran om att avsluta anslutningen. |
STÄNGD | Server och klient | Inget anslutningstillstånd alls. |
Anslutningsanläggning
Innan en klient försöker ansluta till en server måste servern först binda till och lyssna på en port för att öppna den för anslutningar: detta kallas en passiv öppen. När den passiva öppna är upprättad kan en klient upprätta en anslutning genom att initiera en aktiv öppen med hjälp av trevägs (eller 3-stegs) handskakning:
- SYN : Den aktiva öppningen utförs genom att klienten skickar en SYN till servern. Klienten ställer in segmentets sekvensnummer till ett slumpmässigt värde A.
- SYN-ACK : Som svar svarar servern med en SYN-ACK. Bekräftelsenumret är inställt på ett mer än det mottagna sekvensnumret, dvs A+1, och det sekvensnummer som servern väljer för paketet är ett annat slumpmässigt tal, B.
- ACK : Slutligen skickar klienten en ACK tillbaka till servern. Sekvensnumret är inställt på det mottagna kvitteringsvärdet, dvs A+1, och kvittensnumret är inställt på ett mer än det mottagna sekvensnumret, dvs B+1.
Steg 1 och 2 upprättar och bekräftar sekvensnumret för en riktning. Steg 2 och 3 upprättar och bekräftar sekvensnumret för den andra riktningen. Efter slutförandet av dessa steg har både klienten och servern fått bekräftelser och en full duplex-kommunikation upprättas.
Anslutningsavslutning
Anslutningsavslutningsfasen använder en fyrvägs handskakning, där varje sida av anslutningen avslutas oberoende. När en slutpunkt vill stoppa sin halva anslutningen sänder den ett FIN -paket, som den andra änden bekräftar med en ACK. Därför kräver en typisk rivning ett par FIN- och ACK-segment från varje TCP-slutpunkt. Efter att sidan som skickade den första FIN har svarat med den sista ACK, väntar den på en timeout innan den slutligen stänger anslutningen, under vilken tid den lokala hamnen inte är tillgänglig för nya anslutningar; detta förhindrar eventuell förvirring som kan uppstå om fördröjda paket som är associerade med en tidigare anslutning levereras under en efterföljande anslutning.
Det är också möjligt att avsluta anslutningen med ett 3-vägs handslag när värd A skickar en FIN och värd B svarar med en FIN & ACK (kombinerar två steg till ett) och värd A svarar med en ACK.
Vissa operativsystem, som Linux och HP-UX , implementerar en halv duplex nära sekvens. Om värden aktivt stänger en anslutning, medan den fortfarande har olästa inkommande data tillgängliga, skickar värden signalen RST (förlorar mottagen data) istället för FIN. Detta försäkrar att en TCP -applikation är medveten om att det var en dataförlust.
En anslutning kan vara i ett halvöppet tillstånd, i vilket fall en sida har avslutat anslutningen, men den andra inte. Den sida som har avslutats kan inte längre skicka data till anslutningen, men den andra kan. Den avslutande sidan bör fortsätta läsa data tills den andra sidan också avslutas.
Resursanvändning
De flesta implementeringar tilldelar en post i en tabell som mappar en session till en operativsystemprocess som körs. Eftersom TCP -paket inte innehåller en sessionsidentifierare identifierar båda slutpunkterna sessionen med hjälp av klientens adress och port. Närhelst ett paket tas emot måste TCP -implementeringen utföra en sökning i denna tabell för att hitta målprocessen. Varje post i tabellen är känd som ett Transmission Control Block eller TCB. Den innehåller information om slutpunkterna (IP och port), anslutningens status, kördata om de paket som utbyts och buffertar för att skicka och ta emot data.
Antalet sessioner på serversidan begränsas endast av minnet och kan växa när nya anslutningar anländer, men klienten måste allokera en flyktig port innan den första SYN: en skickas till servern. Den här porten förblir allokerad under hela konversationen och begränsar effektivt antalet utgående anslutningar från var och en av klientens IP -adresser. Om ett program inte lyckas stänga otillbörliga anslutningar på rätt sätt kan en klient få slut på resurser och bli oförmögen att upprätta nya TCP -anslutningar, även från andra applikationer.
Båda slutpunkterna måste också tilldela utrymme för okända paket och mottagna (men olästa) data.
Dataöverföring
Transmission Control Protocol skiljer sig åt i flera viktiga funktioner jämfört med User Datagram Protocol :
- Beställd dataöverföring: destinationsvärden ordnar om segment enligt ett sekvensnummer
- Återöverföring av förlorade paket: all kumulativ ström som inte är kvitterad sänds om
- Felfri dataöverföring: skadade paket behandlas som förlorade och skickas om
- Flödeskontroll: begränsar hastigheten en avsändare överför data för att garantera tillförlitlig leverans. Mottagaren tipsar hela tiden avsändaren om hur mycket data som kan tas emot. När den mottagande värdens buffert fylls, avbryter nästa bekräftelse överföringen och tillåter data i bufferten att bearbetas.
- Trängselkontroll: förlorade paket (antas på grund av överbelastning) utlöser en minskning av datahastigheten
Pålitlig transmission
.
Kvitteringar (ACK) skickas med ett sekvensnummer av mottagaren av data för att berätta för avsändaren att data har mottagits till den angivna byten. ACK innebär inte att data har levererats till applikationen, de betyder bara att det nu är mottagarens ansvar att leverera data.
Tillförlitligheten uppnås genom att avsändaren upptäcker förlorad data och vidarebefordrar den. TCP använder två primära tekniker för att identifiera förlust. Återutsändningstid (RTO) och dubbletter av kumulativa bekräftelser (DupAcks).
Dupackbaserad vidarebefordran
Om ett enda segment (säg segment 100) i en ström förloras, kan mottagaren inte kvittera paket ovan nr. 100 eftersom den använder kumulativa ACK: er. Därför bekräftar mottagaren paket 99 igen vid mottagandet av ett annat datapaket. Denna dubblettbekräftelse används som en signal för paketförlust. Det vill säga, om avsändaren får tre dubblettbekräftelser, sänder den det senaste okända paketet igen. En tröskel på tre används eftersom nätverket kan ändra ordning på segment som orsakar dubbletter av kvitteringar. Denna tröskel har visats för att undvika falska vidaresändningar på grund av ombeställning. Ibland används selektiva bekräftelser (SACKs) för att ge tydlig feedback om de segment som har mottagits. Detta förbättrar TCP: s förmåga att vidaresända rätt segment.