SCTP

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 12 martie 2017; verificările necesită 34 de modificări .

SCTP ( Engleză  Stream Control Transmission Protocol  - „protocol de transmisie cu control al fluxului”) este un protocol de nivel de transport în rețelele de calculatoare care a apărut în 2000 în IETF . RFC 4960 descrie acest protocol, iar RFC 3286 oferă o introducere tehnică a acestuia.

Ca orice alt protocol de nivel de transport, SCTP funcționează similar cu TCP sau UDP [1] . Fiind un protocol mai nou, SCTP are mai multe inovații precum multi-threading, protecție împotriva atacurilor DDoS, conexiune sincronă între două gazde pe două sau mai multe canale fizice independente (multi-homing).

Stabilirea conexiunii securizate

Crearea unei noi conexiuni în protocoalele TCP și SCTP are loc utilizând mecanismul de confirmare (handshaking) a pachetelor. În protocolul TCP, această procedură este numită strângere de mână în trei căi. Clientul trimite un pachet SYN (abreviar Synchronize). Serverul răspunde cu un pachet SYN-ACK (Synchronize-Acknowledge). Clientul confirmă primirea pachetului SYN-ACK cu un pachet ACK. Aceasta completează procedura de stabilire a conexiunii.

TCP are o vulnerabilitate potențială în care un atacator ar putea trimite mai multe pachete SYN către un server prin configurarea adreselor IP surse falsificate. La primirea unui pachet SYN, serverul alocă o parte din resursele sale pentru a stabili o nouă conexiune. Procesarea multor pachete SYN va necesita mai devreme sau mai târziu toate resursele serverului și va face imposibilă procesarea cererilor noi. Acest tip de atac se numește " SYN flood " ( SYN flood ).

Protocolul SCTP este protejat de astfel de atacuri folosind mecanismul de strângere de mână în patru căi și introducerea unui token (cookie). În SCTP, clientul începe procedura de stabilire a conexiunii prin trimiterea unui pachet INIT. Ca răspuns, serverul trimite un pachet INIT-ACK care conține un token (o cheie unică care identifică noua conexiune). Clientul răspunde apoi trimițând un pachet COOKIE-ECHO care conține jetonul primit de la server. Abia după aceea serverul își alocă resursele noii conexiuni și confirmă acest lucru prin trimiterea unui pachet COOKIE-ACK către client.

Pentru a rezolva problema întârzierii transferului de date la efectuarea procedurii de strângere de mână în patru căi în protocolul SCTP, este permisă includerea datelor în pachetele COOKIE-ECHO și COOKIE-ACK.

Transfer de date eliminat treptat

Să ne uităm la diferențele dintre procedura de închidere a soclului SCTP și procedura de semiînchidere TCP.

În protocolul TCP, este posibilă o situație de închidere parțială a conexiunii atunci când un nod a terminat de transmis date (prin trimiterea unui pachet FIN), dar continuă să primească date pe această conexiune. Celălalt nod poate continua să transmită date până când închide conexiunea pe propria sa parte. Starea de închidere parțială este rar folosită de aplicații, așa că dezvoltatorii protocolului SCTP au considerat că este necesar să-l înlocuiască cu o secvență de mesaje pentru a rupe asocierea existentă. Când un nod își închide soclul (trimite un mesaj SHUTDOWN), ambii egali trebuie să înceteze transmiterea datelor, permițând doar schimbul de pachete care confirmă primirea datelor trimise anterior.

Multithreading

TCP gestionează secvența de octeți : datele trimise de aplicația care trimite trebuie să ajungă în aplicația de primire exact în aceeași ordine (în timp ce protocolul IP este capabil să inverseze secvența pachetelor; în plus, pachetele lipsă sunt retrimise și ajung de obicei la destinatar în afara secvenței; datele sunt tamponate pentru a combate aceste fenomene). SCTP poate transporta date între două puncte ( noduri ) simultan prin mai multe fluxuri de mesaje . Spre deosebire de TCP , SCTP procesează mesaje întregi (păstrează limita mesajului) și nu octeți obișnuiți de informații . În acest fel, SCTP este similar cu UDP. Astfel, dacă expeditorul trimite serverului un mesaj format din 100 de octeți în primul pas, urmat de alți 50 de octeți, atunci destinatarul din primul pas va primi exact primii 100 de octeți în primul mesaj și abia apoi 50 de octeți în a doua operatie de citire din priza .

Termenul „multithreading” (ing. multi-streaming ) se referă la capacitatea SCTP de a transmite în paralel prin mai multe fluxuri independente de mesaje . De exemplu, transferăm mai multe fotografii printr-o aplicație HTTP ( de exemplu, un browser ). Puteți utiliza o mulțime de conexiuni TCP multiple pentru aceasta, dar o asociere SCTP (eng. SCTP association ), care gestionează mai multe fluxuri de mesaje în acest scop, este, de asemenea, acceptabilă. Fluxurile sunt unidirecționale, ceea ce înseamnă că transferă informații doar într-o direcție ( imaginea de mai sus este inexactă ).

TCP realizează ordinea corectă a octeților într-un flux, atribuind în mod abstract un număr de secvență fiecărei unități trimise și ordonând octeții primiți folosind numerele de secvență atribuite pe măsură ce ajung. Pe de altă parte, SCTP atribuie diferite numere de secvență mesajelor trimise pe un anumit flux . Acest lucru permite ordonarea independentă a mesajelor pe diferite fire. Oricum, multithreading este o opțiune în SCTP. În funcție de dorințele aplicației utilizator, mesajele pot fi procesate nu în ordinea în care au fost trimise, ci în ordinea în care au fost primite.

Avantaje

Beneficiile utilizării SCTP includ:

O parte a avantajului provine din faptul că dezvoltatorii inițiali ai SCTP au proiectat protocolul pentru a transporta telefonia ( SS7 ) prin IP .


Dezavantaje

Securitate

SCTP a fost proiectat cu unele caracteristici pentru a îmbunătăți securitatea, cum ar fi o „strângere de mână 4x” (față de „strângere de mână 3x” de la TCP) pentru a preveni atacurile SYN flood și cookie -uri mari pentru autentificarea asociației.

Fiabilitatea a fost unul dintre aspectele cheie ale designului de securitate al protocolului SCTP. Multi-homing permite unei asocieri să rămână deschisă chiar dacă unele dintre rutele și interfețele utilizate devin indisponibile. Acest lucru este de o importanță deosebită pentru SIGTRAN , care utilizează SCTP pentru a transporta mesaje și servicii de protocol SS7 printr-o rețea IP, necesitând o rezistență puternică în timpul întreruperilor de legătură pentru a menține serviciile de telecomunicații, chiar și în fața unor anomalii severe ale rețelei.

Criptarea nu face parte din designul original al SCTP.

În unele cazuri, SCTP este un bun candidat pentru a puterea TCP/IP Motivul pentru aceasta este faptul că unele sisteme de operare sunt distribuite cu suport pentru protocolul SCTP, dar din cauza lui puțin cunoscut (comparativ cu TCP sau UDP), administratorii uită uneori să configureze detectarea intruziunilor în firewall , ceea ce face posibilă scanează traficul.

Comparația capacităților protocoalelor stratului de transport

Parametru UDP TCP SCTP
Stabilirea unei conexiuni Nu da da
Transmisie fiabilă Nu da da
Păstrarea limitelor mesajelor da Nu da
livrare ordonata Nu da da
Livrare necomandată da Nu da
Sume de verificare a datelor da da da
Dimensiunea sumei de control (biți) 16 16 32
Calea MTU Nu da da
Managementul acumulării Nu da da
Multithreading Nu Nu da
Suport pentru mai multe interfețe Nu Nu da
O grămadă de fire Nu da da

Încadrarea unui mesaj

La formarea cadrelor de mesaje, limitele mesajului sunt păstrate în forma în care este transmis la soclu; aceasta înseamnă că dacă clientul trimite 100 de octeți urmați de 50 de octeți către server, atunci serverul ia 100 de octeți și 50 de octeți ca două citiri. Protocolul UDP funcționează exact în același mod; aceasta este o caracteristică a protocoalelor orientate pe mesaje.

În schimb, protocolul TCP gestionează un flux nestructurat de octeți. Dacă procedura de încadrare a mesajelor nu este utilizată, atunci nodul de rețea poate primi date mai mari sau mai mici decât datele trimise. Acest mod de operare necesită ca, pentru protocoalele orientate pe mesaje care rulează peste TCP, un buffer de date dedicat să fie furnizat la nivelul aplicației și să fie efectuată încadrarea mesajelor (o sarcină potențial complexă).

Protocolul SCTP oferă încadrare pentru transmiterea datelor. Când un nod scrie într-un socket, peer-ul său este garantat să primească un bloc de date de aceeași dimensiune.

Structura pachetului

biți Biții 0-7 8-15 16-23 24-31
+0 Port sursă Portul de destinație
32 Etichetă de validare
64 Verificați suma
96 Bloc de tip 1 Semnalează 1 bloc Lungime 1 bloc
128 1 bloc de date
Bloc de tip N Bloc N steaguri Lungimea blocului N
Bloc N date

Pachetele SCTP au o structură mai simplă decât pachetele TCP. Fiecare pachet este format din două secțiuni principale:

  1. Antet general, care ocupă primii 12 octeți (evidențiat cu albastru)
  2. Blocuri de date care ocupă restul pachetului.

Primul bloc este marcat cu verde, iar ultimul dintre cele N blocuri (N bloc) este evidențiat cu roșu.

Fiecare bloc are un identificator de tip, care ocupă un octet. Astfel, pot fi definite maximum 255 de tipuri de blocuri diferite. RFC 4960 definește o listă de tipuri de blocuri, cu un total de 15 tipuri definite în prezent. Restul blocului constă dintr-un câmp de lungime de 2 octeți (lungimea maximă care poate fi conținută în acest câmp este de 65535 octeți) și, de fapt, datele. Dacă dimensiunea blocului nu este un multiplu de 4 octeți, atunci este completată cu zerouri până la o dimensiune care este un multiplu de 4 octeți.

Gestionarea erorilor

Retransmisie

Retransmisia blocurilor DATE se poate datora (a) unui timeout definit de temporizatorul de retransmisie sau (b) primirii unui SACK care indică faptul că blocul DATA nu a fost primit de către destinație. Pentru a reduce șansa de aglomerație, retransmisia blocurilor de DATE este limitată. Valoarea de expirare a reîncercării (RTO) este setată pe baza unui timp estimat de călătorie dus-întors și scade exponențial pe măsură ce crește rata de pierdere a mesajelor. Pentru asocierile active cu trafic de DATE aproape constant, motivul reîncercării este probabil să fie mesajele SACK, mai degrabă decât un timeout. Pentru a reduce probabilitatea unor reîncercări inutile, se folosește regula 4 SACK, conform căreia retransmisia are loc numai la al patrulea SACK, indicând că un bloc de date a fost omis. Acest lucru previne retransmisiile cauzate de livrarea în afara comenzii.

Prăbușire în drum

Este menținut un contor pentru numărul de reîncercări către o anumită adresă de destinație fără confirmarea livrării cu succes. Când valoarea acestui contor atinge pragul specificat (parametru de configurare), adresa este declarată inactivă și protocolul SCTP începe să folosească o altă adresă pentru transmiterea blocurilor DATE. În plus, blocurile speciale Heartbeat sunt trimise periodic către toate adresele neutilizate (opționale) și se menține un contor pentru numărul de blocuri Heartbeat trimise fără a returna un Heartbeat Ack corespunzător. Când valoarea contorului atinge un anumit prag (parametru de configurare), adresa corespunzătoare este declarată inactivă. Blocurile de bătăi ale inimii sunt transmise la adrese inactive până când este primit un mesaj de confirmare care indică faptul că adresa a fost restabilită la activitate. Frecvența blocurilor Heartbeat este determinată de valoarea RTO și de întârzierea suplimentară, care permite trimiterea blocurilor Heartbeat fără a interfera cu traficul utilizatorului.

Eroare punct final

Pentru toate adresele destinatarului, se menține un numărător comun al numărului de repetări sau blocuri Heartbeat, datele sunt transmise la un punct la distanță fără a primi o confirmare corespunzătoare (Ack) de la acesta. Când valoarea contorului atinge pragul specificat (parametrul de configurare), punctul final este declarat inaccesibil și asocierea SCTP este închisă.

Motive pentru

Protocolul TCP oferă mijloacele de bază pentru transmiterea datelor prin Internet pe o cale fiabilă. Cu toate acestea, TCP impune unele restricții asupra transportului de date:

Toate aceste limitări sunt dăunătoare performanței rețelelor de telefonie prin IP .

Protocolul a fost dezvoltat ca parte a muncii unui grup SIGTRAN special creat în cadrul IETF [2] pentru a implementa protocoale și adaptări ale stivei SS-7 pentru utilizare în rețele IP, datorită necesității unei livrări de date fiabile și rapide. Acest lucru este menționat în mod explicit în RFC 4960 capitolul 1.1 Motivație :

...
Transportul semnalizării PSTN prin rețeaua IP este o aplicație pentru care toate aceste limitări ale TCP sunt relevante. În timp ce această aplicație este motivată direct de dezvoltarea SCTP, alte aplicații pot găsi SCTP o potrivire bună cu cerințele lor... ...

Semnalizarea PSTN printr-o rețea IP este o aplicație pentru care toate limitările TCP sunt direct relevante. În timp ce acest lucru a motivat în mod direct dezvoltarea SCTP, alte aplicații pot considera că SCTP este o potrivire bună pentru cerințele lor...

RFC 4960

Protocolul SIGTRAN și schema de adaptare

Protocoale

OK-7

   TCAP   
V5.2 MTP3 MTP3 ESTE SUS    SCCP    DSS1    TCAP
SIGTRAN V5UA    M2UA    M2PA    M3UA    IUA    SUA
retea de calculatoare SCTP
IP

Implementări

Există o implementare de referință pentru FreeBSD, Mac OS X, Microsoft Windows și Linux [3] .

Protocolul SCTP este implementat pe următoarele sisteme de operare:

Implementare prin drivere terțe:

Biblioteci separate pentru utilizatori:

Aplicatii:

Note

  1. TCP și UDP funcționează atât de diferit încât este incorect să faci o analogie cu ambele. Întreaga analogie este că SCTP, TCP și UDP aparțin aceluiași strat al stivei TCP/IP.
  2. [Sigtran WG Action: Conclusion of Signaling Transport (sigtran)] (link nu este disponibil) . www.ietf.org. Consultat la 16 octombrie 2018. Arhivat din original la 29 octombrie 2018. 
  3. Implementarea de referință pentru SCTP-RFC4960 . - „Aceasta este implementarea de referință pentru SCTP. Este portabil și rulează pe FreeBSD/MAC-OS/Windows și în spațiul utilizator (inclusiv Linux).”. Consultat la 14 octombrie 2013. Arhivat din original la 1 martie 2017.
  4. DragonFly elimină SCTP . Lists.dragonflybsd.org . Preluat la 28 aprilie 2016. Arhivat din original la 7 august 2017.
  5. Despre progresele tehnologice ale FreeBSD . Proiectul FreeBSD (9 martie 2008). - „SCTP: FreeBSD 7.0 este implementarea de referință pentru noul protocol IETF Stream Control Transmission Protocol (SCTP), destinat să susțină VoIP, telecomunicații și alte aplicații cu fiabilitate puternică și transmisie de calitate variabilă prin caracteristici precum livrarea pe mai multe căi, eșuare. -over și multi-streaming.”. Consultat la 13 septembrie 2008. Arhivat din original la 5 august 2011.
  6. Stream Control Transmission Protocol (SCTP) (link nu este disponibil) . Compania de dezvoltare Hewlett-Packard. Preluat la 10 martie 2017. Arhivat din original la 3 ianuarie 2013. 
  7. Rețea TCP/IP . Asistență pentru dezvoltatori QNX . Sisteme software QNX. Consultat la 13 septembrie 2008. Arhivat din original la 23 octombrie 2008. Ce este nou în această referință . Referință pentru biblioteca QNX . Sisteme software QNX. Consultat la 18 decembrie 2012. Arhivat din original la 18 octombrie 2012.
  8. Sistem de operare Solaris 10 Rețea - Performanță extremă a rețelei . Microsisteme solare . Consultat la 13 septembrie 2008. Arhivat din original la 20 aprilie 2009.
  9. SctpDrv: un driver SCTP pentru Microsoft Windows (downlink) . Consultat la 4 februarie 2011. Arhivat din original pe 8 ianuarie 2011. 
  10. SCTP Network Kernel Extension pentru Mac OS X. Preluat la 10 martie 2017. Arhivat din original la 11 iunie 2018.
  11. O stivă portabilă SCTP userland . Preluat la 10 martie 2017. Arhivat din original la 20 decembrie 2018.
  12. Pagina de descărcare SCTP (29 mai 2006). Preluat la 4 februarie 2011. Arhivat din original la 22 aprilie 2019.
  13. Instalator de biblioteci SCTP Windows . Consultat la 4 februarie 2011. Arhivat din original pe 11 septembrie 2016.
  14. Seggelmann, R.; Tuxen, M.; Rathgeb, EP SSH peste SCTP - Optimizarea unui protocol multicanal prin adaptarea lui la SCTP  // Communication Systems, Networks & Digital Signal Processing (  CSNDSP), 2012 8th International Symposium on : journal. - 2012. - 18 iulie. - P. 1-6 . — ISBN 978-1-4577-1473-3 . - doi : 10.1109/CSNDSP.2012.6292659 .

Link -uri