Internetowa suma kontrolna
Internetowa suma kontrolna , zwana także sumą kontrolną nagłówka IPv4 , jest sumą kontrolną używaną w wersji 4 protokołu internetowego (IPv4) do wykrywania uszkodzeń w nagłówku pakietów IPv4. Jest przenoszony w nagłówku pakietu IP i reprezentuje 16-bitowy wynik sumowania słów nagłówka.
Protokół IPv6 nie używa sum kontrolnych nagłówka. Jej projektanci uznali, że sumowanie kontrolne całej warstwy łącza pakietowego zapewniane w protokołach, takich jak PPP i Ethernet , w połączeniu z wykorzystaniem sum kontrolnych w protokołach wyższych warstw, takich jak TCP i UDP , jest wystarczające. W ten sposób routery IPv6 są zwolnione z zadania ponownego obliczania sumy kontrolnej za każdym razem, gdy pakiet się zmienia, na przykład poprzez obniżenie licznika limitu przeskoków przy każdym przeskoku.
Internetowa suma kontrolna jest obowiązkowa do wykrywania błędów w pakietach IPV6 UDP (w tym w ładunku danych).
Internetowa suma kontrolna służy do wykrywania błędów w pakietach ICMP (w tym w ładunku danych).
Obliczenie
Obliczanie sumy kontrolnej jest zdefiniowane w dokumencie RFC 791:
Pole sumy kontrolnej jest sumą uzupełnień 16-bitowych jedynek wszystkich 16-bitowych słów w nagłówku. Dla celów obliczenia sumy kontrolnej wartość pola sumy kontrolnej wynosi zero.
Jeśli nie ma uszkodzeń, wynikiem sumowania całego nagłówka IP, w tym sumy kontrolnej, powinno być zero. Przy każdym przeskoku suma kontrolna jest weryfikowana. Pakiety z niezgodną sumą kontrolną są odrzucane. Router musi dostosować sumę kontrolną, jeśli zmienia nagłówek IP (na przykład podczas zmniejszania TTL).
Procedura jest szczegółowo wyjaśniona w dokumencie RFC 1071 „Obliczanie internetowej sumy kontrolnej”. Optymalizacje przedstawiono w dokumencie RFC 1624 „Obliczanie sumy kontrolnej Internetu za pomocą aktualizacji przyrostowej” (z erratą), aby uwzględnić przypadek routerów, które muszą ponownie obliczyć sumę kontrolną nagłówka podczas przekazywania pakietów, gdy zmieniło się tylko jedno pole.
Przykłady
Obliczanie sumy kontrolnej nagłówka IPv4
Weźmy następujący skrócony fragment pakietu IPv4. Nagłówek jest pogrubiony, a suma kontrolna jest podkreślona.
4500 0073 0000 4000 4011 b861 c0a8 0001
c0a8 00c7 0035 e97c 005f 279f 1e4b 8180
W przypadku dodawania dopełnienia do jedynek za każdym razem, gdy występuje przeniesienie, musimy dodać 1 do sumy. Kontrola przeniesienia i korekta mogą być wykonywane przy każdym dodaniu lub jako proces końcowy po wszystkich dodaniach. Jeśli w wyniku korekty zostanie wygenerowane kolejne przeniesienie, do sumy zostanie dodana kolejna 1.
Aby obliczyć sumę kontrolną, możemy najpierw obliczyć sumę każdej 16-bitowej wartości w nagłówku, pomijając tylko samo pole sumy kontrolnej. Należy zauważyć, że te wartości są w szesnastkowej . 4500 + 0073 + 0000 + 4000 + 4011 + c0a8 + 0001 + c0a8 + 00c7 = 2479c
Pierwsza cyfra to liczba przeniesień i jest dodawana do sumy: 2 + 479c = 479e
(jeśli przez to dodanie powstaje kolejne przeniesienie, kolejne 1 należy dodać do sumy) Aby otrzymać sumę kontrolną, bierzemy dopełnienie jedności tego wyniku: b861
(jak pokazano podkreślone w oryginalnym nagłówku pakietu IP).
Weryfikacja sumy kontrolnej nagłówka IPv4
Podczas sprawdzania sumy kontrolnej stosowana jest ta sama procedura, co powyżej, z wyjątkiem tego, że oryginalna suma kontrolna nagłówka nie jest pomijana. 4500 + 0073 + 0000 + 4000 + 4011 + b861 + c0a8 + 0001 + c0a8 + 00c7 = 2fffd
Dodaj bity przeniesienia: fffd + 2 = ffff
Dopełnienie do jedynek (odwrócenie każdego bitu) daje 0000, co oznacza, że nie ma błędu wykryte. Suma kontrolna nagłówka IP nie sprawdza prawidłowej kolejności wartości 16-bitowych w nagłówku.