Do spisu tresci tematu 8

8.3.1 Protokol komunikacyjny UDP



Spis tresci


Wprowadzenie

Protokol datagramow uzytkownika (User Datagram Protocol - UDP) jest protokolem bezpolaczeniowym procesow uzytkownika ( w odroznieniu od protokolu TCP).
Zostal on wymyslony w celu szybkiego przesylania pakietow danych, z wykozystaniem minimalnego mechanizmu ich opakowywania i kontroli.Jest on stosowany przez protokol TFTP, ze wzgledu na jego prostote i maly rozmiar.
Jest to protokol warstwy transportowej (w modelu OSI).W nizszej warstwie kozysta on z protokolu IP, dlatego jest czesto opisywany lacznie z nim pod nazwa rodziny protokolow UDP/IP.
Przed przekazaniem obslugi pakietu na nizszy poziom (IP),dane sa opakowywane, tzn. zostaja poprzedzone 8-mio bajtowym naglowkiem UDP. Naglowek ten pozwala na jednoznaczne okreslenie nadawcy i adresata na podstawie unikalnych numerow portow.
Jest to protokol zawodny.Nie zapewnia:


Liczona jest jedynie suma kontrolna dla naglowka i danych ( ale nie zawsze ).


Budowa naglowka protokolu UDP

Naglowek UDP: 

struct udphdr {
unsigned short source;
( Source Port )
unsigned short dest; ( Destination Port )
unsigned short len; ( Lenght )
unsigned short check; ( Checksum )
};

Naglowek UDP ma rozmiar 8-mio bajtowy.

Naglowek zdefiniowany jest w pliku /include/linux/udp.h .


Opis niektorych funkcji

Ponizsze funkcje zdefiniowane sa w pliku /net/ipv4/udp.c .

Funkcja udp_check():

Oblicza 16-to bitowa sume kontrolna dla naglowka udp i danych.
Wywoluje funkcje sum_tcpudp_magic(). Jest to ta sama funkcja ktora wywoluje protokol TCP.

Funkcja udp_getfrag():

Wywoluje funkcje udp_check().
Kopiuje pakiet wraz z naglowkiem do bufora, przygotowujac go do przeslania w warstwie sieciowej.

Funkcja udp_getfrag_nosum():

Dzialanie jak wyzej, ale bez wywolania funkcji udp_check().

Funkcja udp_send():

Wypelnia strukture ufh ( typu udpfakehdr ) zawierajaca naglowek UDP.
Wywoluje funkcje ip_bulid_xmit() ( /net/ipv4/ip_output.c ), przekazujac obsluge pakietu, opatrzonego naglowkiem UDP, na nizszy poziom (IP).Jednym z parametrow wywolania jest wskaznik na funkcje udp_getfrag() lub udp_getfrag_nosum(), zalezy od pola no_check stryktury sock ( struktura opisujaca gniazdo ).

Funkcja udp_quene_rcv_skb():

Laduje odpakowany pakiet do gniazda. Jezeli nie ma nan miejsca, to go porzuca.

Funkcja udp_deliver():

Praktycznie wywoluje udp_quene_rcv_skb().

Funkcja udp_rcv():

Wyodrebnia naglowek UDP z otrzymanego pakietu. Jezeli suma kontrolna byla liczona ( >0 ), to ja sprawdza. Zatwierdza pakiet, tzn. sprawdza np. czy jego dlugosc jest odpowiednia.
Wywoluje udp_deliver(). Nie zwraca komunikatu o niepowodzeniu transmisji. Odnotowuje to jedynie w statystykach.


Zrodla


Bibliografia

  1. W. Richard Stevens: Programowanie zastosowan sieciowych w systemie UNIX. WNT 1995.
  2. Postel J.:(red.) User Datagram Protocol. RFC 768.


Autor :Maciej Skorulski