SCTP ( engelsk Stream Control Transmission Protocol - "överföringsprotokoll med flödeskontroll") är ett transportlagerprotokoll i datornätverk som dök upp år 2000 i IETF . RFC 4960 beskriver detta protokoll och RFC 3286 ger en teknisk introduktion till det.
Som alla andra transportlagerprotokoll fungerar SCTP på samma sätt som TCP eller UDP [1] . Eftersom SCTP är ett nyare protokoll har flera innovationer såsom multi-threading, skydd mot DDoS-attacker, synkron anslutning mellan två värdar över två eller flera oberoende fysiska kanaler (multi-homing).
Skapandet av en ny anslutning i TCP- och SCTP-protokollen sker med hjälp av mekanismen för att bekräfta (handskakning) paket. I TCP-protokollet kallas denna procedur en trevägshandskakning. Klienten skickar ett SYN (förkortat Synkronisera)-paket. Servern svarar med ett SYN-ACK-paket (Synchronize-Acknowledge). Klienten bekräftar mottagandet av SYN-ACK-paketet med ett ACK-paket. Detta slutför proceduren för upprättande av anslutning.
TCP har en potentiell sårbarhet där en angripare kan skicka flera SYN-paket till en server genom att ställa in falska IP-adresser för källkod. Efter att ha tagit emot ett SYN-paket, allokerar servern några av sina resurser för att upprätta en ny anslutning. Att bearbeta många SYN-paket kommer förr eller senare att kräva alla resurser på servern och gör det omöjligt att behandla nya förfrågningar. Denna typ av attack kallas " SYN flood " (SYN flood).
SCTP-protokollet är skyddat från sådana attacker med hjälp av fyrvägshandskakningsmekanismen och införandet av en token (cookie). I SCTP startar klienten anslutningsetableringsproceduren genom att skicka ett INIT-paket. Som svar skickar servern ett INIT-ACK-paket som innehåller en token (en unik nyckel som identifierar den nya anslutningen). Klienten svarar sedan genom att skicka ett COOKIE-ECHO-paket som innehåller den token som tagits emot från servern. Först efter det allokerar servern sina resurser till den nya anslutningen och bekräftar detta genom att skicka ett COOKIE-ACK-paket till klienten.
För att lösa problemet med dataöverföringsfördröjning när man utför fyrvägshandskakningsproceduren i SCTP-protokollet är det tillåtet att inkludera data i COOKIE-ECHO och COOKIE-ACK-paket.
Låt oss titta på skillnaderna mellan SCTP-sockets stängningsproceduren och TCP-halvstängningsproceduren.
I TCP-protokollet är en situation med partiell stängning möjlig när en nod har sänt klart data (genom att skicka ett FIN-paket), men fortsätter att ta emot data på denna anslutning. Den andra noden kan fortsätta att överföra data tills den stänger anslutningen på sin egen sida. Det partiella näratillståndet används sällan av applikationer, så utvecklarna av SCTP-protokollet ansåg att det var nödvändigt att ersätta det med en sekvens av meddelanden för att bryta den befintliga kopplingen. När en nod stänger sin socket (sänder ett SHUTDOWN-meddelande) måste båda peers sluta sända data, vilket endast tillåter utbyte av paket som bekräftar mottagandet av tidigare skickade data.
TCP hanterar bytesekvensen : data som skickas av den sändande applikationen måste anlända till den mottagande applikationen i exakt samma ordning (medan IP-protokollet kan vända sekvensen av paket; dessutom skickas saknade paket igen och kommer vanligtvis till mottagaren ur sekvens; data buffras för att bekämpa dessa fenomen). SCTP kan transportera data mellan två punkter ( noder ) samtidigt över flera meddelandeflöden . Till skillnad från TCP bearbetar SCTP hela meddelanden (bevara meddelandegränsen) och inte vanliga bytes med information . På så sätt liknar SCTP UDP. Således, om avsändaren skickar ett meddelande till servern som består av 100 byte i det första steget, följt av ytterligare 50 byte, så kommer mottagaren i det första steget att ta emot exakt de första 100 byte i det första meddelandet, och först därefter 50 byte i den andra läsoperationen från sockeln .
Termen "multithreading" (eng. multi-streaming ) syftar på SCTP:s förmåga att sända parallellt över flera oberoende meddelandeflöden . Till exempel överför vi flera foton via en HTTP- applikation ( till exempel en webbläsare ). Du kan använda ett gäng flera TCP- anslutningar för detta, men en SCTP-association (eng. SCTP-association ), som hanterar flera meddelandeflöden för detta ändamål, är också acceptabel. Strömmar är enkelriktade, vilket innebär att de bara överför information i en riktning ( bilden ovan är felaktig ).
TCP uppnår den korrekta byteordningen i en ström genom att abstrakt tilldela ett sekvensnummer till varje sänd enhet, och beställa mottagna byte med hjälp av de tilldelade sekvensnumren när de anländer. Å andra sidan tilldelar SCTP olika sekvensnummer till meddelanden som skickas på en viss ström . Detta möjliggör oberoende ordning av meddelanden över olika trådar. Hur som helst, multithreading är ett alternativ i SCTP. Beroende på användarapplikationens önskemål kan meddelanden behandlas inte i den ordning de skickades, utan i den ordning som de togs emot.
Fördelarna med att använda SCTP inkluderar:
En del av fördelen härrör från det faktum att de ursprungliga utvecklarna av SCTP designade protokollet för att överföra telefoni ( SS7 ) över IP .
SCTP designades med vissa funktioner för att förbättra säkerheten, såsom en "4x handskakning" (mot TCP:s "3x handskakning") för att förhindra SYN översvämningsattacker , och stora cookies för associationsautentisering.
Tillförlitlighet har varit en av nyckelaspekterna i säkerhetsdesignen av SCTP-protokollet. Multi-homing tillåter en förening att förbli öppen även om några av de rutter och gränssnitt som används blir otillgängliga. Detta är särskilt viktigt för SIGTRAN , som använder SCTP för att överföra SS7- protokollmeddelanden och tjänster över ett IP-nätverk, vilket kräver stark motståndskraft under länkavbrott för att upprätthålla telekommunikationstjänster, även inför allvarliga nätverksavvikelser.
Kryptering är inte en del av den ursprungliga designen av SCTP.
I vissa fall är SCTP en bra kandidat för att testa styrkan TCP/IP-Anledningen till detta är det faktum att vissa operativsystem distribueras med stöd för SCTP-protokollet, men på grund av dess lite kända (jämfört med TCP eller UDP) glömmer administratörer ibland att konfigurera intrångsdetektering i brandväggen , vilket gör det möjligt att skanna trafik.
Parameter | UDP | TCP | SCTP |
---|---|---|---|
Att upprätta en koppling | Inte | Ja | Ja |
Pålitlig överföring | Inte | Ja | Ja |
Bevara meddelandegränser | Ja | Inte | Ja |
ordnad leverans | Inte | Ja | Ja |
Obeställd leverans | Ja | Inte | Ja |
Datakontrollsummor | Ja | Ja | Ja |
Kontrollsumma storlek (bitar) | 16 | 16 | 32 |
Sökväg MTU | Inte | Ja | Ja |
Ackumuleringshantering | Inte | Ja | Ja |
Multithreading | Inte | Inte | Ja |
Stöd för flera gränssnitt | Inte | Inte | Ja |
Ett gäng trådar | Inte | Ja | Ja |
Vid bildande av meddelanderamar bevaras meddelandegränserna i den form i vilken det sänds till sockeln; detta betyder att om klienten skickar 100 byte följt av 50 byte till servern, så tar servern 100 byte och 50 byte som två läsningar. UDP-protokollet fungerar på exakt samma sätt; detta är en egenskap hos meddelandeorienterade protokoll.
Däremot hanterar TCP-protokollet en ostrukturerad ström av byte. Om meddelanderamningsproceduren inte används kan nätverksnoden ta emot data som är större eller mindre än de data som skickas. Detta driftsätt kräver att, för meddelandeorienterade protokoll som körs ovanpå TCP, en dedikerad databuffert tillhandahålls vid applikationslagret och meddelandeinramning utförs (en potentiellt komplex uppgift).
SCTP-protokollet tillhandahåller inramning för dataöverföring. När en nod skriver till en socket är dess peer garanterat att ta emot ett datablock av samma storlek.
|
SCTP-paket har en enklare struktur än TCP-paket. Varje paket består av två huvudsektioner:
Det första blocket är markerat med grönt och det sista av de N blocken (N-blocket) är markerat i rött.
Varje block har en typidentifierare, som upptar en byte. Således kan maximalt 255 olika blocktyper definieras. RFC 4960 definierar en lista över blocktyper, med totalt 15 typer definierade för närvarande. Resten av blocket består av ett 2-byte-längdfält (den maximala längden som kan finnas i detta fält är 65535 byte) och faktiskt data. Om blockstorleken inte är en multipel av 4 byte, utfylls den med nollor till en storlek som är en multipel av 4 byte.
Återsändningen av DATA-block kan bero på (a) en timeout definierad av återsändningstimern eller (b) mottagandet av en SACK som indikerar att DATA-blocket inte togs emot av destinationen. För att minska risken för överbelastning är återsändningen av DATA-block begränsad. Tidsgränsen för återförsök (RTO) ställs in baserat på en uppskattad tur och returtid och minskar exponentiellt när hastigheten för meddelandeförlust ökar. För aktiva associationer med nästan konstant DATA-trafik är orsaken till försöket troligen SACK-meddelanden snarare än en timeout. För att minska sannolikheten för onödiga omförsök används 4 SACK-regeln, enligt vilken återsändning sker endast på den fjärde SACK, vilket indikerar att ett datablock hoppades över. Detta förhindrar återsändningar orsakade av ur-order leverans.
En räknare upprätthålls för antalet återförsök till en speciell destinationsadress utan bekräftelse på framgångsrik leverans. När värdet på denna räknare når det angivna tröskelvärdet (konfigurationsparameter), förklaras adressen inaktiv och SCTP-protokollet börjar använda en annan adress för att överföra DATA-block. Dessutom skickas speciella Heartbeat-block med jämna mellanrum till alla oanvända (valfria) adresser, och en räknare upprätthålls på antalet Heartbeat-block som skickas utan att returnera ett motsvarande Heartbeat-ack. När räknarvärdet når en given tröskel (konfigurationsparameter), förklaras motsvarande adress inaktiv. Hjärtslagsblockering sänds till inaktiva adresser tills ett Ack-meddelande tas emot som indikerar att adressen har återställts till aktivitet. Frekvensen av Heartbeat-block bestäms av RTO-värdet och ytterligare fördröjning, vilket gör att Heartbeat-block kan skickas utan att störa användartrafiken.
För alla mottagaradresser upprätthålls en gemensam räknare för antalet upprepningar eller hjärtslagsblock, data överförs till en avlägsen punkt utan att få en motsvarande bekräftelse (Ack) från den. När räknarvärdet når det angivna tröskelvärdet (konfigurationsparameter) förklaras slutpunkten oåtkomlig och SCTP-associationen stängs.
TCP-protokollet tillhandahåller det grundläggande sättet att överföra data över Internet över en tillförlitlig väg. TCP inför dock vissa begränsningar för datatransport:
Alla dessa begränsningar är skadliga för prestandan hos telefonnätverk över IP .
Protokollet utvecklades som en del av arbetet i en speciellt skapad SIGTRAN-grupp inom IETF [2] för att implementera protokoll och anpassningar av SS-7- stacken för användning i IP-nätverk, på grund av behovet av tillförlitlig och snabb dataleverans. Detta anges uttryckligen i RFC 4960 kapitel 1.1 Motivation :
...
Transport av PSTN-signalering över IP-nätverket är en applikation för vilken alla dessa begränsningar av TCP är relevanta. Även om denna applikation är direkt motiverad till utvecklingen av SCTP, kan andra applikationer hitta SCTP som en bra matchning till deras krav... ... PSTN
-signalering över ett IP-nätverk är en applikation för vilken alla TCP-begränsningar är direkt relevanta. Även om detta direkt motiverade utvecklingen av SCTP, kan andra applikationer också hitta SCTP som en bra match för deras krav... RFC 4960
Protokoll | TCAP | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
V5.2 | MTP3 | MTP3 | ÄR UPPE | SCCP | DSS1 | TCAP | ||||||||||||||
SIGTRAN | V5UA | M2UA | M2PA | M3UA | IUA | SUA | ||||||||||||||
datornätverk _ | SCTP | |||||||||||||||||||
IP |
Det finns en referensimplementering för FreeBSD, Mac OS X, Microsoft Windows och Linux [3] .
SCTP-protokollet är implementerat på följande operativsystem:
Implementering via tredje parts drivrutiner:
Separata användarbibliotek:
Applikationer:
TCP / IP-protokoll efter lager av OSI-modellen | Grundläggande|
---|---|
Fysisk | |
kanaliserad | |
nätverk | |
Transport | |
session | |
Representation | |
Applicerad | |
Annat ansökt | |
Lista över TCP- och UDP-portar |