Protokół transmisji sterowania strumieniem — Stream Control Transmission Protocol
Pakiet protokołów internetowych |
---|
Warstwa aplikacji |
Warstwa transportowa |
Warstwa internetowa |
Warstwa łącza |
Stream Transmission Control Protocol ( SCTP ) to sieć komputerowa protokół komunikacji w warstwie transportowej z protokołów internetowych . Pierwotnie przeznaczony do transportu komunikatów Systemu Sygnalizacji 7 (SS7) w telekomunikacji, protokół zapewnia zorientowaną na komunikaty funkcję protokołu UDP ( User Datagram Protocol ), 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ół zapewnia wieloadresowe i nadmiarowe ścieżki w celu zwiększenia odporności i niezawodności. SCTP jest standaryzowany przez Internet Engineering Task Force (IETF) w RFC 4960 . Implementacja referencyjna SCTP została wydana jako część FreeBSD w wersji 7 i od tego czasu jest szeroko przenoszona na inne platformy.
Nadzór formalny
Grupa robocza IETF Signaling Transport ( SIGTRAN ) zdefiniowała protokół (nr 132) w październiku 2000 r., a grupa robocza IETF Transport Area (TSVWG) utrzymuje go. RFC 4960 definiuje protokół. RFC 3286 zawiera wprowadzenie.
Multistreaming oparty na wiadomościach
Aplikacje SCTP przesyłają dane do transmisji w wiadomościach (grupach bajtów) do warstwy transportowej SCTP. SCTP umieszcza komunikaty i informacje kontrolne w oddzielnych porcjach ( porcje danych i porcje kontrolne), z których każda jest identyfikowana przez nagłówek porcji . Protokół może podzielić wiadomość na wiele porcji danych, ale każda porcja 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), po których następują fragmenty danych SCTP (jeśli są dostępne).
SCTP może być scharakteryzowany jako zorientowany na komunikaty, co oznacza, że transportuje sekwencję komunikatów (z których każda jest grupą bajtów), zamiast transportować nieprzerwany strumień bajtów, jak w TCP. Podobnie jak w UDP, w SCTP nadawca wysyła wiadomość w jednej operacji, a dokładna wiadomość jest przekazywana do procesu aplikacji odbierającej w jednej operacji. W przeciwieństwie do tego, TCP jest protokołem zorientowanym na strumień, który niezawodnie i w porządku transportuje strumienie bajtów . Jednak TCP nie pozwala odbiorcy wiedzieć, ile razy aplikacja nadawcy odwoływała się do transportu TCP, przekazując mu grupy bajtów do wysłania. U nadawcy TCP po prostu dołącza więcej bajtów do kolejki bajtów czekających na wyjście przez sieć, zamiast utrzymywać kolejkę oddzielnych wiadomości wychodzących, które muszą być zachowane jako takie.
Określenie wiele strumieniowych odnosi się do zdolności do transmisji SCTP kilka niezależnych strumieni w kawałkach równolegle, na przykład transmisji stron internetowych obrazów równocześnie z tekstem strony internetowej. Zasadniczo polega to na łączeniu kilku połączeń w jedno powiązanie SCTP, działające na wiadomościach (lub porcjach), a nie na bajtach.
Protokół TCP zachowuje kolejność bajtów w strumieniu, dołączając do każdego segmentu numer sekwencji bajtów . Z drugiej strony SCTP przypisuje numer sekwencyjny lub identyfikator wiadomości do każdej wiadomości wysłanej w strumieniu. Pozwala to na niezależne porządkowanie wiadomości w różnych strumieniach. Jednak kolejność wiadomości jest opcjonalna w SCTP; aplikacja odbierająca może wybrać 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 multihomingu, 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 przezroczyste przełączanie awaryjne między nadmiarowymi ścieżkami sieci.
- Dostarczanie porcji w niezależnych strumieniach eliminuje niepotrzebne blokowanie nagłówka wiersza , w przeciwieństwie do dostarczania strumienia bajtów TCP.
- Wyraźna niezawodność częściowa.
- Wybór i monitorowanie ścieżki w celu wybrania podstawowego toru transmisji danych i przetestowania łączności toru transmisji.
- Mechanizmy walidacji i potwierdzania chronią przed atakami typu flooding i zapewniają powiadomienia o zduplikowanych lub brakujących porcjach danych.
- Ulepszone wykrywanie błędów odpowiednie dla ramek jumbo Ethernet .
Projektanci SCTP pierwotnie przeznaczyli go do transportu telefonii ( system sygnalizacyjny 7 ) za pośrednictwem protokołu internetowego, w celu zduplikowania niektórych atrybutów niezawodności sieci sygnalizacyjnej SS7 w IP. Ten wysiłek IETF jest znany jako SIGTRAN . W międzyczasie zaproponowano inne zastosowania, na przykład protokół Diameter i niezawodne łączenie serwerów (RSerPool).
Motywacja i adopcja
Protokół TCP zapewnił podstawowy sposób niezawodnego przesyłania danych przez Internet. Jednak TCP nałożył ograniczenia na kilka aplikacji. Z RFC 4960 :
- TCP zapewnia zarówno niezawodny transfer danych, jak i dostarczanie danych w ścisłej kolejności transmisji. Niektóre aplikacje wymagają niezawodnego transferu bez konserwacji sekwencji, podczas gdy inne zadowoliłyby się częściowym uporządkowaniem danych. W obu tych przypadkach właściwość blokowania nagłówka wiersza protokołu TCP powoduje niepotrzebne opóźnienia.
- W przypadku aplikacji wymieniających różne rekordy lub wiadomości 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 TCP może opóźnić transmisję danych, czekając na możliwość umieszczenia większej ilości danych w kolejce przez aplikację ( algorytm Nagle'a ). Jeśli i kiedy takie małe opóźnienie jest niepożądane, aplikacja musi jawnie zażądać nieopóźnionej transmisji w każdym przypadku z osobna, korzystając z funkcji push (tj. przez ustawienie flagi PSH w nagłówku pakietu TCP). Z drugiej strony SCTP umożliwia skonfigurowanie nieopóźnionej transmisji jako domyślnej dla skojarzenia, eliminując wszelkie niepożądane opóźnienia, ale kosztem wyższego narzutu transferu.
- Ograniczony zakres gniazd TCP komplikuje zadanie zapewnienia wysokiej dostępności możliwości przesyłania danych przy użyciu hostów wieloadresowych .
- Protokół TCP jest stosunkowo podatny na ataki typu „odmowa usługi”, takie jak ataki SYN .
Przyjęcie zostało spowolnione przez brak świadomości, brak implementacji (szczególnie w systemie Microsoft Windows), brak obsługi aplikacji i brak obsługi sieci.
Wiele bazowania
SCTP zapewnia nadmiarowe ścieżki w celu zwiększenia niezawodności.
Każdy punkt końcowy SCTP musi sprawdzać osiągalność podstawowych i nadmiarowych adresów zdalnego punktu końcowego za pomocą pulsu . Każdy punkt końcowy SCTP musi potwierdzić tętno, które otrzymuje ze zdalnego punktu końcowego.
Kiedy SCTP wysyła wiadomość na zdalny adres, interfejs źródłowy zostanie określony tylko przez tablicę routingu hosta (a nie przez SCTP).
Asymetryczny multihoming
W asymetrycznym multihomingu jeden z dwóch punktów końcowych nie obsługuje multihomingu.
Lokalny multi-homing — zdalny single-homing
W lokalnych multi-homing i zdalnym single homing, jeśli zdalny adres podstawowy jest nieosiągalny, skojarzenie SCTP kończy się niepowodzeniem, nawet jeśli możliwa jest alternatywna ścieżka.
Lokalny jednokierunkowy — zdalny wieloadresowy
Struktura pakietów
|
Pakiet SCTP składa się z dwóch podstawowych części:
- Wspólny nagłówek , który zajmuje pierwsze 12 bajtów i jest podświetlone na niebiesko i
- Fragmenty danych zajmujące pozostałą część pakietu. Pierwsza porcja jest podświetlona na zielono, a ostatnia z N porcji (Punkt N) jest podświetlona na czerwono.
Każda porcja zaczyna się od jednobajtowego identyfikatora typu, z 15 typami porcji zdefiniowanymi w dokumencie RFC 4960 i co najmniej 5 kolejnymi zdefiniowanymi przez dodatkowe dokumenty 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. Pole o długości dwóch bajtów ogranicza długość każdej porcji do 65 535 bajtów (łącznie z polami 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-way handshake (w porównaniu do TCP 3-way handshake ) w celu ochrony przed atakami SYN flooding oraz duże pliki „cookie” do weryfikacji skojarzeń i autentyczność.
Niezawodność była również kluczową częścią projektu zabezpieczeń SCTP. Multihoming umożliwia skojarzenie pozostanie otwarte nawet wtedy, gdy niektóre trasy i interfejsy nie działają. 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 łączach, aby utrzymać usługi telekomunikacyjne, nawet w przypadku występowania anomalii w sieci.
SCTP jest czasami dobrym kandydatem do odcisków palców . Niektóre systemy operacyjne są dostarczane z włączoną obsługą SCTP, a ponieważ nie jest ona tak dobrze znana jak TCP lub UDP, czasami jest pomijana w konfiguracjach zapory sieciowej i wykrywania włamań, co często pozwala na sondowanie ruchu.
Realizacje
Implementacja referencyjna SCTP działa na FreeBSD, Mac OS X, Microsoft Windows i Linux.
Następujące systemy operacyjne implementują SCTP:
- AIX wersja 5 i nowsze
- NetBSD od 8.0
- Cisco IOS 12
- 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
- Oparte na jądrze Linux 2.4 i nowsze
- Tru64 z dodatkowym pakietem Compaq SCTP
- QNX Neutrino Realtime OS, 6.3.0 do 6.3.2, przestarzały od 6.4.0
- Sun Solaris 10 i nowsze
- VxWorks wersje 6.2.x do 6.4.x oraz 6.7 i nowsze
- iluminaci
Sterowniki innych firm:
-
Microsoft Windows :
- Sterownik jądra SctpDrv jest portem stosu BSD SCTP do systemu Windows
-
MacOS :
- Rozszerzenie jądra sieciowego SCTP dla systemu Mac OS X
Biblioteka przestrzeni użytkownika :
- Przenośny stos przestrzeni użytkownika SCTP
- Biblioteka SCTP
- Port Windows XP
- Oracle Java SE 7
- Erlang/OTP
Następujące aplikacje implementują 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ń TCP API na wywołania SCTP, dzięki czemu istniejące aplikacje mogą korzystać z SCTP bez modyfikacji.
Historia RFC
- RFC 7829 SCTP-PF: algorytm szybkiego przełączania awaryjnego dla protokołu transmisji sterowania strumieniem
- RFC 7765 TCP i protokół transmisji sterowania strumieniem (SCTP) Restart RTO
- RFC 7496 — dodatkowe zasady dotyczące rozszerzenia częściowo niezawodnego protokołu transmisji sterowania strumieniem
- RFC 7053 SACK — NATYCHMIASTOWE rozszerzenie dla protokołu transmisji Stream Control (aktualizacje RFC 4960)
- RFC 6951 UDP Enkapsulacja pakietów protokołu transmisji sterowania strumieniem (SCTP) do komunikacji między hostem a hostem
- RFC 6525 Stream Control Transmission Protocol (SCTP) Rekonfiguracja strumienia
- RFC 6458 Sockets API Extensions dla protokołu transmisji sterowania strumieniem (SCTP)
- RFC 6096 Protokół transmisji sterowania strumieniem (SCTP) Rejestracja flag porcji (aktualizacje RFC 4960)
- RFC 5062 wykryto ataki bezpieczeństwa na protokół transmisji sterowania strumieniem (SCTP) i obecne środki zaradcze
- RFC 5061 Dynamiczna rekonfiguracja adresu protokołu transmisji sterowania strumieniem (SCTP)
- RFC 5043 Protokół transmisji sterowania strumieniem (SCTP) Adaptacja bezpośredniego umieszczania danych (DDP)
- RFC 4960 Protokół transmisji sterowania strumieniem
- RFC 4895 uwierzytelnione fragmenty dla protokołu transmisji sterowania strumieniem (SCTP)
- RFC 4820 dopełnienie fragmentu i parametr protokołu transmisji sterowania strumieniem (SCTP)
- RFC 4460 Specyfikacja protokołu transmisji sterowania strumieniem (SCTP) Errata i problemy
- RFC 3873 protokół transmisji sterowania strumieniem (SCTP) baza informacji zarządzania (MIB)
- RFC 3758 Stream Control Transmission Protocol (SCTP) — rozszerzenie częściowej niezawodności
- RFC 3554 na temat korzystania z protokołu transmisji sterowania strumieniem (SCTP) z IPsec
- RFC 3436 Transport Layer Security przez Stream Control Transmission Protocol
- RFC 3309 Stream Control Transmission Protocol (SCTP) Zmiana sumy kontrolnej (przestarzałe przez RFC 4960)
- RFC 3286 Wprowadzenie do protokołu transmisji sterowania strumieniem
- RFC 3257 Oświadczenie o zastosowaniu protokołu transmisji sterowania strumieniem
- RFC 2960 Protokół transmisji sterowania strumieniem (zaktualizowany przez RFC 3309 i przestarzały przez RFC 4960)
Zobacz też
- Warstwa transportowa § Porównanie protokołów warstwy transportowej
- Protokół inicjowania sesji (SIP) – który może inicjować wiele strumieni przez SCTP, TCP lub UDP
- Multipath TCP – który umożliwia połączeniu TCP korzystanie z wielu ścieżek w celu maksymalizacji wykorzystania zasobów i zwiększenia redundancji
- Happy Eyeballs – pierwotnie zaprojektowany do efektywnego wyboru IPv4 lub IPv6 do połączenia; może być również przystosowany do wyboru spośród różnych protokołów transportowych, np.: TCP i SCTP