Suma Kontrolna TCP/IP

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

Dlaczego Potrzebujemy Wykrywania Błędów? Analogia Kartki Pocztowej

Wyobraźmy sobie, że wysyłamy ręcznie napisaną kartkę pocztową do przyjaciela. Wiele rzeczy może pójść nie tak podczas jej podróży. Deszcz może rozmazać atrament, uniemożliwiając odczytanie adresu. Maszyna sortująca pocztę może naderwać róg. Sama treść wiadomości może ulec zmianie, zmieniając znaczenie zdania. Kiedy Twój przyjaciel ją otrzyma, może zauważyć, że coś jest nie tak – zamazane słowo, naderwany brzeg – i zrozumieć, że wiadomość może nie być dokładnie tym, co napisałeś.

Dane podróżujące przez internet napotykają podobne niebezpieczeństwa. Cyfrowa kartka pocztowa, czyli , przemierza długą i skomplikowaną trasę przez kable, routery i przełączniki. Po drodze zakłócenia elektryczne, awarie sprzętu lub błędy oprogramowania mogą losowo zmienić bit z 0 na 1 lub z 1 na 0. Nazywa się to uszkodzeniem danych (ang. data corruption).

Jeden odwrócony bit może mieć katastrofalne konsekwencje. Może zmienić liczbę w transakcji finansowej, uszkodzić instrukcję w aktualizacji oprogramowania lub stworzyć zakłócenie w strumieniu wideo. Aby temu przeciwdziałać, protokoły sieciowe potrzebują mechanizmu sprawdzającego, czy dane, które otrzymały, są takie same jak dane, które zostały wysłane. Suma kontrolna internetowa TCP/IP to prosta i szybka metoda używana w protokołach takich jak TCP, UDP i IP do przeprowadzania tej podstawowej weryfikacji integralności. Działa jak szybki test na rozmazanie dla naszych cyfrowych pocztówek.

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 to po prostu jej bitowa inwersja. Bierzemy liczbę i odwracamy każdy pojedynczy bit: każde 0 staje się 1, a każde 1 staje się 0. Jest to ostatni krok w obliczaniu samej 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

To jest serce obliczeń sumy kontrolnej. Wygląda jak standardowe dodawanie binarne, ale z jedną specjalną zasadą.

  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:

16-bitowa suma 0, z przeniesieniem
11111111 11110000 (65520)
+00000000 00010000 (16)
(1)
00000000 00000000
Zawiń bit przeniesienia
Wynik końcowy: 1
+1
00000000 00000001

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 wszystkie dane do zabezpieczenia (na przykład nagłówek TCP plus dane aplikacji). Kluczową częścią tego kroku jest tymczasowe ustawienie pola sumy kontrolnej w nagłówku na same zera (00000000 0000000000000000\ 00000000). Jest to konieczne, ponieważ samo pole sumy kontrolnej jest częścią danych, które są sumowane, więc musi zaczynać od znanej, neutralnej wartości.

    Jeśli całkowita długość danych jest nieparzystą liczbą bajtów, na końcu dodawany jest tymczasowy bajt wypełniający składający się z samych zer. Zapewnia to, że dane można idealnie podzielić na 16-bitowe słowa. Ten bajt wypełniający nie jest faktycznie 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 teraz kompletny i gotowy do transmisji przez sieć.

Jak Weryfikowana Jest Suma Kontrolna (Po Stronie Odbiorcy)

Elegancja sumy kontrolnej w dopełnieniu do jedności polega na tym, jak łatwo ją zweryfikować. Odbiorca nie musi wiedzieć, jaka była oryginalna suma kontrolna; wykonuje tylko jedno obliczenie na całym otrzymanym pakiecie.

  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 dokładnie ten sam proces co nadawca: dzieli wszystkie otrzymane dane (włączając nagłówek z sumą kontrolną nadawcy) na 16-bitowe słowa i dodaje je wszystkie, 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 patrzy na końcową 16-bitową sumę. Magia arytmetyki dopełnień do jedności zapewnia, ż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 cokolwiek innego niż same jedynki, odbiorca wie, że pakiet został uszkodzony w tranzycie. Natychmiast odrzuca pakiet, zakładając, że protokół wyższej warstwy (taki jak TCP) zajmie się retransmisją.

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

Aby lepiej zrozumieć koncepcję, użyjmy uproszczonego przykładu z 4-bitowymi słowami z Twoich notatek. Załóżmy, że dane do wysłania składają się z trzech 4-bitowych słów: 11011101, 10001000, i 01100110.

Po Stronie Nadawcy

  1. Nadawca dodaje słowa danych używając dodawania w dopełnieniu do jedności:
    Suma to 0101 z przeniesieniem 1
    1101
    +1000
    (1)
    0101
    Zawiń przeniesienie
    Suma pośrednia
    +1
    0110
    Suma końcowa. Tym razem bez przeniesienia
    0110
    +0110
    1100
  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:
    To jest suma pierwszych trzech słów, obliczona powyżej
    Dodaj sumę kontrolną
    1100
    +0011
    1111
  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. Wyobraź sobie, że 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.
    Po przeniesieniu okrężnym → 0101
    1100
    +1000
    (1)
    0100
    0101
    +0110
    1011
    1011
    +0011
    1110
  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 zaprojektowana z myślą o szybkości, a nie doskonałości. Jest to prosty algorytm, który można zaimplementować bardzo wydajnie w oprogramowaniu, co było kluczowe we wczesnych dniach sieci, gdy cykle procesora były cenne. Jednak jej prostota wiąże się 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.

Może się to wydawać poważną wadą, ale jest to akceptowalny kompromis. Powodem jest to, że 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, wystarczająco dobry test dla jego specyficznej roli w stosie sieciowym.

Interaktywny Kalkulator Sumy Kontrolnej (demo 4-bit)

Wprowadź 4‑bitowe słowa. Obliczamy sumę kontrolną (wersja demonstracyjna) i weryfikujemy transmisję.

Proces nadawcy

  1. Zero checksum field (pole sumy kontrolnej = 0)
  2. Dodaj wszystkie 4‑bitowe słowa, zawijając przeniesienia
  3. Odwróć wszystkie bity sumy
  4. Wstaw wynik w pole sumy kontrolnej

Weryfikacja odbiorcy

  1. Odbiorca dodaje wszystkie słowa razem z sumą kontrolną
  2. Zawija przeniesienia (end-around carry)
  3. Wynik samych jedynek → brak błędu; inaczej → błąd

Kroki Dodawania (Dopełnienie do jedności z przeniesieniem okrężnym)

#Poprzednia suma+ SłowoPo dodaniuPrzeniesieniePo zawinięciu
100001101110101101
211011000010110110
301100110110001100
Obliczona suma kontrolna
0011
Suma kontrolna wstawiona (gotowe do transmisji)
[...] 0011

Weryfikacja odbiorcy

#SumujPo dodaniuPrzen.Po zaw.
11101110101101
21000010110110
30110110001100
40011111101111
Wynik to same jedynki (1111) – pakiet zaakceptowany (brak wykrytego błędu).
    Suma Kontrolna TCP/IP | Teleinf Edu