Transport

Suma Kontrolna TCP/IP

Metoda dopełnień do jedności do wykrywania błędów w warstwach transportu i sieci.

Po co Wykrywać Błędy? Przykład Transmisji

Podczas transmisji dane mogą zostać zmienione przez zakłócenia elektryczne, awarie sprzętu, błędy oprogramowania lub problemy na ścieżce sieciowej. Odbiorca potrzebuje więc sposobu wykrycia, że odebrane bity różnią się od bitów wysłanych. Sam fakt odebrania pakietu nie potwierdza poprawności jego zawartości.

Dane podróżujące przez internet przechodzą przez kable, routery i przełączniki. Jednostka danych, czyli , przemierza tę trasę jako uporządkowany nagłówek i dane użytkowe. Po drodze pojedynczy bit może zmienić wartość z 0 na 1 lub z 1 na 0. Nazywa się to uszkodzeniem danych (ang. data corruption).

Jeden odwrócony bit może zmienić liczbę w transakcji finansowej, uszkodzić instrukcję aktualizacji oprogramowania lub wywołać zakłócenie w strumieniu wideo. Protokoły potrzebują więc mechanizmu sprawdzającego, czy odebrane dane zgadzają się z danymi wysłanymi. Internetowa suma kontrolna TCP/IP jest prostą i szybką metodą używaną między innymi przez TCP, UDP oraz IPv4 do podstawowej kontroli integralności. IPv6 nie ma sumy w podstawowym nagłówku, lecz protokoły wyższych warstw nadal mogą stosować własne sumy kontrolne.

Podstawowa Koncepcja: Arytmetyka Dopełnień do Jedności

Algorytm sumy kontrolnej internetowej opiera się na specyficznym rodzaju matematyki binarnej, zwanej arytmetyką dopełnień do jedności. Aby ją zrozumieć, musimy omówić dwie proste operacje. We wszystkich przykładach założymy, że pracujemy na 16-bitowych liczbach, ponieważ jest to standardowy rozmiar dla sumy kontrolnej.

1. Dopełnienie do Jedności (Inwersja Bitowa)

Dopełnienie do jedności liczby binarnej jest jej bitową inwersją. Bierzemy liczbę i odwracamy każdy bit: każde 0 staje się 1, a każde 1 staje się 0. Jest to ostatni krok w obliczaniu wartości sumy kontrolnej.

Przykład:

Oryginalna liczba 16-bitowa:

10110010 1100101010110010\ 11001010

Dopełnienie do jedności (odwrócona):

01001101 0011010101001101\ 00110101

2. Dodawanie w Kodzie Dopełnień do Jedności z Przeniesieniem Okrężnym

Obliczenie przypomina standardowe dodawanie binarne, lecz ma jedną dodatkową zasadę dotyczącą bitu przeniesienia.

  1. Wykonaj Dodawanie Binarne: Dodaj dwie 16-bitowe liczby tak, jak w normalnej arytmetyce binarnej.
  2. Obsłuż Bit Przeniesienia (Specjalna Zasada): Jeśli suma 16-bitowych liczb jest większa niż to, co 16 bitów może pomieścić, generowany jest 17. bit, zwany . W wielu rodzajach arytmetyki ten bit jest odrzucany. Jednak w dodawaniu w kodzie dopełnień do jedności ten bit przeniesienia jest zawijany i dodawany z powrotem do najmniej znaczącego bitu (bitu po prawej stronie) wyniku. Nazywa się to przeniesieniem okrężnym (ang. end-around carry).

Przykład Przeniesienia Okrężnego:

Jak Obliczana Jest Suma Kontrolna (Po Stronie Nadawcy)

Nadawca pakietu wykonuje prosty czteroetapowy proces w celu wygenerowania sumy kontrolnej.

  1. Krok 1: Przygotuj Dane

    Nadawca bierze dane do zabezpieczenia, na przykład nagłówek TCP oraz dane aplikacji. Tymczasowo ustawia pole sumy kontrolnej w nagłówku na same zera (00000000 0000000000000000\ 00000000), ponieważ to pole należy do obszaru sumowania i musi rozpoczynać obliczenie od znanej wartości.

    W TCP i UDP do obliczenia dołącza się także pseudo-nagłówek zawierający adresy IP, numer protokołu oraz długość. Pseudo-nagłówek służy do weryfikacji właściwego kontekstu datagramu lub segmentu i nie jest przesyłany jako jego osobna część.

    W IPv4 zerowa suma UDP oznacza pominięcie tej kontroli. W zwykłym ruchu IPv6 suma UDP jest wymagana. Przesłana wartość zero jest więc niepoprawna i odbiorca ją odrzuca, z wyjątkiem trybów tunelowych IPv6 określonych w standardach, które zezwalają na sumę zerową.

    W IPv4 osobno oblicza się sumę kontrolną nagłówka IP, a router może ją przeliczać po zmianie pól takich jak TTL. IPv6 nie zawiera pola sumy kontrolnej w podstawowym nagłówku.

    Jeśli łączna długość bajtów objętych obliczeniem jest nieparzysta, na końcu dodawany jest tymczasowy bajt wypełniający składający się z samych zer. Pozwala to podzielić objęty obliczeniem obszar na 16-bitowe słowa. Ten bajt wypełniający nie jest przesyłany z pakietem.

  2. Krok 2: Zsumuj Dane

    Dane są dzielone na 16-bitowe słowa. Następnie nadawca dodaje wszystkie te słowa, używając dodawania w kodzie dopełnień do jedności, upewniając się, że zawija wszystkie bity przeniesienia, jak opisano wcześniej. Ten proces trwa, dopóki wszystkie 16-bitowe słowa nie zostaną zsumowane w jedną 16-bitową sumę.

  3. Krok 3: Odwróć Sumę

    Końcowa 16-bitowa suma z Kroku 2 jest odwracana poprzez wzięcie jej dopełnienia do jedności (odwrócenie wszystkich bitów). Otrzymana liczba to suma kontrolna internetowa.

  4. Krok 4: Wstaw Sumę Kontrolną

    Nadawca umieszcza tę obliczoną wartość sumy kontrolnej z powrotem w teraz pustym polu sumy kontrolnej w nagłówku pakietu. Pakiet jest gotowy do transmisji przez sieć.

Jak Weryfikowana Jest Suma Kontrolna (Po Stronie Odbiorcy)

Weryfikacja sumy kontrolnej w dopełnieniu do jedności jest bezpośrednia. Odbiorca nie musi odtwarzać osobnej wartości referencyjnej. Wykonuje obliczenie na całym otrzymanym obszarze, razem z polem sumy kontrolnej.

  1. Krok 1: Odbierz Pakiet

    Odbiorca otrzymuje pakiet z sieci. Pakiet zawiera dane oraz sumę kontrolną obliczoną przez nadawcę, która jest przechowywana w polu nagłówka sumy kontrolnej.

  2. Krok 2: Zsumuj Wszystko

    Odbiorca wykonuje ten sam proces co nadawca: dzieli otrzymane dane (włączając nagłówek z sumą kontrolną nadawcy) na 16-bitowe słowa i dodaje je, używając dodawania w kodzie dopełnień do jedności z przeniesieniem okrężnym.

  3. Krok 3: Sprawdź Wynik

    Po zsumowaniu wszystkich części odbiorca sprawdza końcową 16-bitową sumę. Właściwości arytmetyki dopełnień do jedności oznaczają, że:

    Jeśli podczas transmisji nie było błędów, końcowa suma po stronie odbiorcy będzie 16-bitowym słowem składającym się z samych jedynek (11111111 11111111, lub 0xFFFF w systemie szesnastkowym).

    Jeśli końcowa suma to wartość inna niż same jedynki, odbiorca wykrywa prawdopodobne uszkodzenie pakietu i reaguje zgodnie z zasadami danego protokołu. TCP może uruchomić retransmisję brakujących danych, natomiast UDP pozostawia obsługę błędu aplikacji.

Przykład Obliczeń na Słowach 4-bitowych

Rozważmy uproszczony przykład z trzema 4-bitowymi słowami: 11011101, 10001000 i 01100110.

Po Stronie Nadawcy

  1. Nadawca dodaje słowa danych używając dodawania w dopełnieniu do jedności:
  2. Końcowa suma to 11001100.
  3. Nadawca oblicza sumę kontrolną przez odwrócenie końcowej sumy: suma kontrolna=∼1100=0011\text{suma kontrolna} = \sim 1100 = 0011.
  4. Nadawca przesyła oryginalne dane, po których następuje suma kontrolna: 1101,1000,0110,00111101, 1000, 0110, 0011.

Po Stronie Odbiorcy (Bez Błędów)

  1. Odbiorca otrzymuje cztery słowa (1101,1000,0110,00111101, 1000, 0110, 0011) i dodaje je wszystkie razem:
  2. Wynik końcowy to 11111111 (same jedynki). Odbiorca stwierdza, że pakiet jest wolny od błędów i akceptuje go.

Po Stronie Odbiorcy (Z Błędem)

  1. Pierwsze słowo 11011101 zostało uszkodzone podczas transmisji i stało się 11001100.
  2. Odbiorca teraz dodaje: 1100+1000+0110+00111100 + 1000 + 0110 + 0011.
  3. Wynik końcowy to 11101110, co nie jest samymi jedynkami. Odbiorca wykrywa błąd i odrzuca pakiet.

Ważne Ograniczenia Sumy Kontrolnej Internetowej

Suma kontrolna internetowa jest projektowana pod kątem szybkiego obliczania. Prosty algorytm można wydajnie zaimplementować w oprogramowaniu, co miało znaczenie we wczesnych sieciach, gdy czas procesora był ograniczony. Ta prostota wiąże się jednak z ograniczeniami.

Suma kontrolna nie jest kryptograficznie bezpieczną funkcją skrótu. Może nie wykryć kilku typowych rodzajów błędów:

  • Jeśli dwa 16-bitowe słowa zostaną zamienione miejscami, końcowa suma pozostanie taka sama.
  • Jeśli bit w jednym słowie zostanie odwrócony z 0 na 1, a odpowiadający mu bit w innym słowie zostanie odwrócony z 1 na 0, błędy mogą się wzajemnie znieść, a suma kontrolna nadal będzie poprawna.
  • Wstawianie lub usuwanie słów zawierających same zera również może pozostać niewykryte.

Ograniczenia są akceptowalne w roli dodatkowej kontroli. Silniejsze mechanizmy wykrywania błędów, takie jak , są już stosowane na Warstwie Łącza Danych (np. przez Ethernet). Suma kontrolna internetowa zapewnia dodatkową, lekką warstwę ochrony przed błędami, które mogłyby zostać wprowadzone wewnątrz routerów, gdzie nagłówek warstwy łącza (i jego CRC) jest zdejmowany i ponownie składany dla następnego skoku. Jest to szybki test wystarczający dla tej roli w stosie sieciowym.

Powiązane artykuły