FCS w PPP



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "PA" <przetwornice_at_nospam_poczta.onet.pl>
Subject: FCS w PPP
Date: Tue, 10 Dec 2002 07:11:03 +0100


Może ktoś zna odpowiedź lub grupę na której mogą znać odpowiedź.
A problem jest taki: w protokole PPP istnieje potrzeba obliczenia sumy
kontrolnej FCS. Jak ją dokładnie się liczy?
Próbowałem różnie: sumę w dopełnieniu jedynkowym tak jak w wyższych
warstwach IP, próbowałem algorytmu podanego w RFC 1661(1662). Nigdy mi się
nie zgodziła.
Wg tego co przeczytałem powinna być liczona przed enkapsulacją, czyli dla
oryginalnego datagramu (w drugą stronę przy sprawdzaniu po
rozkapsułkowaniu). Ale próbowałem i przed i po i nic nie wychodzi.
Dla informacji, (chociaż uwżam, że to nieistotne) połączenie prubuję
nawiązać z erainternet i analizuję przede wszystkim pierwszy przychodzący
pakiet configuration-request (dla innych otrzymanych w trakcie podsłuchanych
sesji też nigdy mi nie wyszło).
Bogdan Gutknecht



Poprzedni Następny
Wiadomość
Spis treści
From: Jan Dubiec <jdx_at_nospam_slackware.pl>
Subject: Re: FCS w PPP
Date: 11 Dec 2002 17:15:54 +0100


On Tue, 10 Dec 2002 07:11:03 +0100, "PA" <przetwornice_at_nospam_poczta.onet.pl> wrote:
Może ktoś zna odpowiedź lub grupę na której mogą znać odpowiedź.
Jeśli chodzi o grupę, to comp.protocols.ppp. Ale tam już byłeś. ;-)

A problem jest taki: w protokole PPP istnieje potrzeba obliczenia sumy
kontrolnej FCS. Jak ją dokładnie się liczy?
Próbowałem różnie: sumę w dopełnieniu jedynkowym tak jak w wyższych
warstwach IP, próbowałem algorytmu podanego w RFC 1661(1662). Nigdy mi się
nie zgodziła.
Nie przeczytałeś dokładnie dodatku C.2 z RFC1662 - tamten kod w C jest
OK. Przetłumaczenie go na Paszczala to już Twój problem. ;-)

Poniżej jest Twój kod, który lekko zmodyfikowałem. ;-) Kod nie jest
testowany - nie mam w tej chwili kompilatora Paszczala pod reką.

begin
fcs:=$ffff; {* inicjalizacja; bardzo ważne *}
while len>0 do
begin
fcs:=(fcs shr 8) xor fcstab[(fcs xor Byte(cp^)) and $ff];
Inc(cp);
Dec(len);
end;
pppfcs16:=fcs xor $ffff; {* bardzo ważne, można też użyć negacji, może uda się
zaoszczędzić kilka cykli zegara *}
end;

Wg tego co przeczytałem powinna być liczona przed enkapsulacją, czyli dla
oryginalnego datagramu (w drugą stronę przy sprawdzaniu po
rozkapsułkowaniu). Ale próbowałem i przed i po i nic nie wychodzi.
Enkapsulacja w przypadku PPP polega na obudowaniu pakietu danych w
bajt adresu (0xff), bajt controlny (0x03) i kodu protokołu (1 lub 2
bajty) na początku oraz w dwu lub czterobajtowy FCS na końcu
pakietu. Przy liczeniu FCS-a musisz wziąć pod uwagę również te
pierwsze 3/4 bajty (przeczytaj dokładnie rozdział 3.1 z RFC1662).

Regards,
/J.D.