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
).
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 .
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.
Bibliografia
Autor :Maciej Skorulski