Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Skrevet av Vegard Flovikholm Farstad og Joar Krohn Mauseth

 

Widget Connector
urlhttps://www.youtube.com/watch?v=UTNkCZZTbV8&feature=youtu.be&hd=1

TDAT2004 - Datakommunikasjon med nettverksprogrammering

Tema 28 - Transportlaget: UDP header sjekksum

 

Litt om UDP

Oppbyggingen av en UDP-pakke (egentlig datagram):

...

UDP (User Datagram Protocol) er en protokoll som plasseres på transportlaget iht. OSI-modellen for lagdelt kommunikasjon. UDP er forbindelsesløst og upålitelig, men gir rask respons bl.a. p.g.a. lite pakkeoverhead, ingen tilstandsorientering og ingen retransmisjon av pakker. RFC 768 inneholder bestemmelser for UDP protokollen og beregning av sjekksummen.

 

Sjekksum er en headerlinje av pakkehodet som er frivillig (den kan settes til 0).
Sjekksum åpner opp for deteksjon av feil, og feilruting av pakker.

...

Skal beregne sjekksummen til dette UDP datagrammet:

Image RemovedImage Added

UDP-headere: Avsenderport: 60330, mottakerport: 80, lengde: 14. Nyttelast er 0x484549 som e ASCII for “HEI”"HEI".
Vi skal sende fra IP adresse 192.168.1.45 til 192.168.1.22. UDP har protokollnummer 17 (0x21).
Da ser pseudo-headeren vår slik ut:
 

 




Vi grupperer hvert felt av pseudo-headeren i segmenter på 16-bits hver.

(COA8+012D+C0A8+0116+0021+000E)16=183C216Image Added

Dere ser kanskje at summen på 20 bits, som gjør at vi får overflow på en 16-bits enhet. Vi gjør all mellomregning først, så tar vi hånd om dette til slutt, for husk; det er kun satt av 16-bits til checksum i UDP-headeren.

Nå som vi har summert feltene i pseudo-headeren, er det på tide å summere dette med feltene i UDP-headeren:

(183C2+EBAA+001E+000E+4845+0049)16=2B82616Image Added

Merk at vi har to tilfeller her. Når sender beregner sjekksum, er sjekksumfeltet i UDP headeren 0. Når mottaker beregner den, er den forskjellig fra 0.

...

Splitter summen i to deler: 0x47D9 og 0x0002, og summerer disse og får:

(1011 1000 0010 1000)2=B82816Image Added

Nå gjør vi en bitvis NOT operasjon og får 0x47D7

...

(Dersom summen av 16. bit blir større enn 1, vil tillegget adderes inn bakfra)

=   0101 1011 1010 10011001 

= 0x5BA9

Adderer med sjekksummen oppgitt av sender:

...

1-er komplement av foreløpig sjekksum:

(0101 1100 0111 1111)2=5C7F16FFFF16Image Added

Sjekksummen inneholder ikke utelukkende 1-ere → mottaker vet at pakken inneholder feil.

...