Protokół transmisji sterowania strumieniem
Pakiet protokołów internetowych |
---|
Warstwa aplikacji |
Warstwa transportowa |
warstwa internetowa |
Warstwa łącza |
Stream Control Transmission Protocol ( SCTP ) jest protokołem komunikacyjnym sieci komputerowych w warstwie transportowej zestawu protokołów internetowych . Pierwotnie przeznaczony do Systemu Sygnalizacji 7 (SS7) w telekomunikacji, protokół zapewnia zorientowaną na komunikaty funkcję User Datagram Protocol (UDP), zapewniając jednocześnie niezawodny, sekwencyjny transport komunikatów z kontrolą przeciążenia , taką jak protokół kontroli transmisji (TCP). W przeciwieństwie do UDP i TCP, protokół obsługuje multihoming i nadmiarowe ścieżki w celu zwiększenia odporności i niezawodności.
SCTP jest standaryzowany przez Internet Engineering Task Force (IETF) w dokumencie RFC 9260 . Implementacja referencyjna SCTP została wydana jako część FreeBSD w wersji 7 i od tego czasu była szeroko przenoszona na inne platformy.
Nadzór formalny
IETF Signaling Transport ( SIGTRAN ) zdefiniowała protokół (numer 132) w październiku 2000 r., a grupa robocza IETF Transport Area (TSVWG) utrzymuje go . RFC 9260 definiuje protokół. Dokument RFC 3286 zawiera wprowadzenie.
Multistreaming oparty na wiadomościach
Aplikacje SCTP przesyłają dane do transmisji w komunikatach (grupach bajtów) do warstwy transportowej SCTP. SCTP umieszcza komunikaty i informacje kontrolne w osobnych porcjach (porcjach danych i porcjach kontrolnych), z których każda jest identyfikowana przez nagłówek porcji . Protokół może podzielić komunikat na wiele fragmentów danych, ale każdy fragment danych zawiera dane tylko z jednego komunikatu użytkownika. SCTP łączy fragmenty w pakiety SCTP. Pakiet SCTP, który jest przesyłany do protokołu internetowego , składa się z nagłówka pakietu, fragmentów kontrolnych SCTP (jeśli to konieczne), a następnie fragmentów danych SCTP (jeśli są dostępne).
SCTP można scharakteryzować jako zorientowany na komunikaty, co oznacza, że przesyła sekwencję komunikatów (z których każdy jest grupą bajtów), zamiast transportować nieprzerwany strumień bajtów, jak w przypadku protokołu TCP. Podobnie jak w UDP, w SCTP nadawca wysyła wiadomość w jednej operacji, a ta dokładna wiadomość jest przekazywana do odbierającego procesu aplikacji w jednej operacji. Natomiast TCP jest protokołem zorientowanym na strumienie, transportującym strumienie bajtów rzetelnie iw porządku. Jednak TCP nie pozwala odbiorcy dowiedzieć się, ile razy aplikacja nadawcy wywołała transport TCP przekazujący mu grupy bajtów do wysłania. U nadawcy protokół TCP po prostu dodaje więcej bajtów do kolejki bajtów oczekujących na wysłanie przez sieć, zamiast utrzymywać kolejkę pojedynczych oddzielnych komunikatów wychodzących, które muszą być zachowane jako takie.
Termin wielostrumieniowość odnosi się do zdolności SCTP do równoległego przesyłania kilku niezależnych strumieni fragmentów, na przykład przesyłania obrazów stron internetowych jednocześnie z tekstem strony internetowej. Zasadniczo obejmuje to łączenie kilku połączeń w jedno powiązanie SCTP, operujące na komunikatach (lub porcjach), a nie na bajtach.
Protokół TCP zachowuje kolejność bajtów w strumieniu, umieszczając numer sekwencji bajtów w każdym segmencie . Z drugiej strony SCTP przypisuje numer sekwencyjny lub identyfikator wiadomości do każdej wiadomości wysyłanej w strumieniu. Pozwala to na niezależne porządkowanie komunikatów w różnych strumieniach. Jednak kolejność wiadomości jest opcjonalna w SCTP; aplikacja odbierająca może zdecydować się na przetwarzanie wiadomości w kolejności odbioru zamiast w kolejności wysyłania.
Cechy
Funkcje SCTP obejmują:
- Niezawodna transmisja zarówno uporządkowanych, jak i nieuporządkowanych strumieni danych
- Obsługa multihoming, w której jeden lub oba punkty końcowe połączenia mogą składać się z więcej niż jednego adresu IP, umożliwiając przejrzyste przełączanie awaryjne między redundantnymi ścieżkami sieciowymi
- Dostarczanie fragmentów w ramach niezależnych strumieni eliminuje niepotrzebne blokowanie początku linii , w przeciwieństwie do dostarczania strumienia bajtów TCP.
- Jawna częściowa niezawodność
- Wybór i monitorowanie ścieżki w celu wybrania podstawowej ścieżki transmisji danych i przetestowania łączności toru transmisji
- Mechanizmy sprawdzania poprawności i potwierdzania chronią przed atakami typu flooding i powiadamiają o zduplikowanych lub brakujących porcjach danych.
- Ulepszone wykrywanie błędów odpowiednie dla ramek typu jumbo w sieci Ethernet
Projektanci SCTP pierwotnie przeznaczyli go do transportu telefonii (tj. Systemu Sygnalizacji 7) przez protokół internetowy, mając na celu powielenie niektórych atrybutów niezawodności sieci sygnalizacyjnej SS7 w protokole IP. Ten wysiłek IETF jest znany jako SIGTRAN . W międzyczasie zaproponowano inne zastosowania, na przykład Diameter i Reliable Server Pooling (RSerPool).
Motywacja i adopcja
Protokół TCP zapewnił podstawowe środki niezawodnego przesyłania danych przez Internet. Jednak protokół TCP nałożył ograniczenia na kilka aplikacji. Z dokumentu RFC 4960 :
- Protokół TCP zapewnia zarówno niezawodny transfer danych, jak i dostarczanie danych w ścisłej kolejności transmisji. Niektóre aplikacje wymagają niezawodnego transferu bez utrzymywania kolejności, podczas gdy inne zadowoliłyby się częściowym uporządkowaniem danych. W obu tych przypadkach właściwość blokowania początku linii protokołu TCP powoduje niepotrzebne opóźnienie.
- W przypadku aplikacji wymieniających odrębne rekordy lub komunikaty zorientowany na strumień charakter protokołu TCP wymaga dodania wyraźnych znaczników lub innego kodowania w celu wytyczenia poszczególnych rekordów.
- Aby uniknąć wysyłania wielu małych pakietów IP, gdzie wystarczyłby jeden większy pakiet, implementacja protokołu TCP może opóźniać przesyłanie danych, czekając, aż aplikacja ustawi w kolejce prawdopodobnie więcej danych (algorytm Nagle'a ) . Jeśli i kiedy takie małe opóźnienie jest niepożądane, aplikacja musi jawnie zażądać nieopóźnionej transmisji w poszczególnych przypadkach, używając funkcji push (tj. ustawiając flagę PSH w nagłówku pakietu TCP). Z drugiej strony SCTP umożliwia skonfigurowanie transmisji bez opóźnień jako domyślnej dla powiązania, eliminując wszelkie niepożądane opóźnienia, ale kosztem wyższego narzutu transferu.
- Ograniczony zakres [ niejasny ] gniazd TCP komplikuje zadanie zapewnienia wysoce dostępnych możliwości przesyłania danych przy użyciu hostów wieloadresowych.
- TCP jest stosunkowo podatny na ataki typu „odmowa usługi”, takie jak ataki SYN .
Adopcja została spowolniona przez brak świadomości, brak wdrożeń (szczególnie w systemie Microsoft Windows), brak obsługi aplikacji i brak obsługi sieci.
Multihoming
SCTP zapewnia nadmiarowe ścieżki w celu zwiększenia niezawodności.
Każdy punkt końcowy SCTP musi sprawdzić osiągalność adresów podstawowych i nadmiarowych zdalnego punktu końcowego za pomocą pulsu . Każdy punkt końcowy SCTP musi potwierdzać uderzenia serca odbierane ze zdalnego punktu końcowego.
Kiedy SCTP wysyła wiadomość na zdalny adres, o interfejsie źródłowym decyduje tylko tablica routingu hosta (a nie SCTP).
W asymetrycznym multihomingu jeden z dwóch punktów końcowych nie obsługuje multihomingu.
W przypadku lokalnego multihomingu i zdalnego pojedynczego bazowania, jeśli zdalny adres podstawowy nie jest osiągalny, powiązanie SCTP nie powiedzie się, nawet jeśli możliwa jest alternatywna ścieżka.
Struktura pakietu
Pakiet SCTP składa się z dwóch podstawowych sekcji:
- Wspólny nagłówek , który zajmuje pierwsze 12 bajtów i jest podświetlony na niebiesko.
- Fragmenty danych , które zajmują pozostałą część pakietu. Pierwszy fragment jest podświetlony na zielono, a ostatni z N fragmentów (Chunk N) jest podświetlony na czerwono.
Bity | 0–7 | 8–15 | 16-23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | Port źródłowy | Port docelowy | ||||||||||||||||||||||||||||||
32 | Etykieta weryfikacyjna | |||||||||||||||||||||||||||||||
64 | Suma kontrolna | |||||||||||||||||||||||||||||||
96 | Kawałek 1 rodzaj | Kawałek 1 flagi | Kawałek 1 długości | |||||||||||||||||||||||||||||
128 | Dane z części 1 | |||||||||||||||||||||||||||||||
… | … | |||||||||||||||||||||||||||||||
… | Kawałek typu N | Fragment N flag | Długość kawałka N | |||||||||||||||||||||||||||||
… | Fragment N danych |
Każda porcja zaczyna się od jednobajtowego identyfikatora typu, z 15 typami porcji zdefiniowanymi przez RFC 9260 i co najmniej 5 innymi zdefiniowanymi przez dodatkowe RFC. Osiem bitów flagi, pole o długości dwóch bajtów i dane składają się na pozostałą część porcji. Jeśli porcja nie tworzy wielokrotności 4 bajtów (tj. długość nie jest wielokrotnością 4), to jest dopełniana zerami, które nie są zawarte w długości porcji. Dwubajtowe pole długości ogranicza długość każdej porcji do 65 535 bajtów (w tym pola typu, flag i długości).
Bezpieczeństwo
Chociaż szyfrowanie nie było częścią oryginalnego projektu SCTP, SCTP został zaprojektowany z funkcjami zwiększającymi bezpieczeństwo, takimi jak 4-kierunkowy uzgadnianie (w porównaniu z 3-kierunkowym uzgadnianiem TCP ) w celu ochrony przed atakami typu SYN flood oraz duże „ciasteczka” do weryfikacji powiązania i autentyczności.
Niezawodność była również kluczowym elementem projektu bezpieczeństwa SCTP. Multihoming umożliwia powiązanie, które pozostaje otwarte, nawet gdy niektóre trasy i interfejsy są wyłączone. Ma to szczególne znaczenie dla SIGTRAN , ponieważ przenosi SS7 przez sieć IP przy użyciu SCTP i wymaga silnej odporności podczas przerw w łączu, aby utrzymać usługi telekomunikacyjne nawet w przypadku długotrwałych anomalii sieciowych.
SCTP jest czasem dobrym kandydatem do pobierania odcisków palców . Niektóre systemy operacyjne są dostarczane z włączoną obsługą protokołu SCTP, a ponieważ protokół ten nie jest tak dobrze znany jak protokół TCP lub UDP, jest czasami pomijany w konfiguracjach zapory ogniowej i wykrywania włamań, co często umożliwia sondowanie ruchu.
Implementacje
Implementacja referencyjna SCTP działa na systemach FreeBSD, Mac OS X, Microsoft Windows i Linux.
Następujące systemy operacyjne implementują protokół SCTP:
- AIX wersja 5 i nowsze
- NetBSD od wersji 8.0
- Cisco IOS 12 i nowsze
- DragonFly BSD od wersji 1.4, jednak wsparcie jest przestarzałe w wersji 4.2
- FreeBSD w wersji 7 i nowszych zawiera referencyjną implementację SCTP
- HP-UX , 11i v2 i nowsze
- iluminacje
- Linuksa 2.4 i nowsze
- QNX Neutrino Realtime OS, 6.3.0 do 6.3.2, przestarzałe od 6.4.0
- Tru64 z pakietem dodatkowym Compaq SCTP
- Sun Solaris 10 i nowsze
- VxWorks od 6.2.x do 6.4.x oraz 6.7 i nowsze
Sterowniki innych firm:
-
Microsoft Windows :
- sterownik jądra SctpDrv jest portem stosu BSD SCTP do systemu Windows (opuszczony po 2012 r.)
-
MacOS :
- Rozszerzenie jądra sieci SCTP dla systemu Mac OS X
- Przenośny stos obszaru użytkownika SCTP
-
- Windows XP Port
- Oracle Java SE 7
- Erlang/OTP
Następujące aplikacje implementują protokół SCTP:
Tunelowanie przez UDP
W przypadku braku natywnej obsługi SCTP w systemach operacyjnych możliwe jest tunelowanie SCTP przez UDP, a także mapowanie wywołań API TCP na wywołania SCTP, aby istniejące aplikacje mogły korzystać z SCTP bez modyfikacji.
Dokumenty RFC
- RFC 9260 Protokół transmisji sterowania strumieniem
- RFC 8540 Stream Control Transmission Protocol: Errata i problemy w RFC 4960 (przestarzałe przez RFC 9260)
- RFC 7829 SCTP-PF: algorytm szybkiego przełączania awaryjnego dla protokołu transmisji Stream Control
- RFC 7765 TCP i Stream Control Transmission Protocol (SCTP) RTO Restart
- RFC 7496 Dodatkowe zasady dotyczące częściowo niezawodnego rozszerzenia protokołu transmisji sterowania strumieniem
- RFC 7053 SACK-IMMEDIATELY Rozszerzenie protokołu Stream Control Transmission Protocol (przestarzałe przez RFC 9260)
- RFC 6951 UDP Hermetyzacja pakietów Stream Control Transmission Protocol (SCTP) do komunikacji między hostami końcowymi
- RFC 6525 Stream Control Transmission Protocol (SCTP) Rekonfiguracja strumienia
- RFC 6458 Sockets API Extensions for Stream Control Transmission Protocol (SCTP)
- RFC 6096 Stream Control Transmission Protocol (SCTP) Chunk Flags Registration (przestarzały przez RFC 9260)
- RFC 5062 Wykryto ataki bezpieczeństwa na protokół transmisji sterowania strumieniem (SCTP) i obecne środki zaradcze
- RFC 5061 Stream Control Transmission Protocol (SCTP) Dynamiczna rekonfiguracja adresu
- RFC 5043 Adaptacja protokołu Stream Control Transmission Protocol (SCTP) Direct Data Placement (DDP).
- RFC 4960 Stream Control Transmission Protocol (przestarzały przez RFC 9260)
- RFC 4895 Uwierzytelnione fragmenty dla protokołu transmisji sterowania strumieniem (SCTP)
- RFC 4820 Padding Chunk i parametr protokołu Stream Control Transmission Protocol (SCTP)
- RFC 4460 Stream Control Transmission Protocol (SCTP) Specyfikacja Errata i problemy (przestarzałe przez RFC 9260)
- RFC 3873 Stream Control Transmission Protocol (SCTP) Management Information Base (MIB)
- RFC 3758 Stream Control Transmission Protocol (SCTP) Częściowe rozszerzenie niezawodności
- RFC 3554 W sprawie korzystania z protokołu Stream Control Transmission Protocol (SCTP) z IPsec
- RFC 3436 Transport Layer Security over Stream Control Transmission Protocol
- RFC 3309 Stream Control Transmission Protocol (SCTP) Zmiana sumy kontrolnej (przestarzały przez RFC 4960)
- RFC 3286 Wprowadzenie do protokołu transmisji Stream Control
- RFC 3257 Oświadczenie o zastosowaniu protokołu transmisji sterowania strumieniem
- RFC 2960 Stream Control Transmission Protocol (zaktualizowany przez RFC 3309 i przestarzały przez RFC 4960)
Zobacz też
- Warstwa transportowa § Porównanie protokołów warstwy transportowej
- Session Initiation Protocol (SIP) – który może inicjować wiele strumieni przez SCTP, TCP lub UDP
- Wielościeżkowy protokół TCP — umożliwia połączenie TCP na korzystanie z wielu ścieżek w celu maksymalizacji wykorzystania zasobów i zwiększenia redundancji
- Happy Eyeballs – pierwotnie zaprojektowany do sprawnego wyboru IPv4 lub IPv6 dla połączenia; można również dostosować do wyboru różnych protokołów transportowych, takich jak TCP i SCTP