udp(7) Miscellaneous Information Manual udp(7) NUME udp - protocolul de datagrama-utilizator pentru IPv4 SINOPSIS #include #include #include udp_socket = socket(AF_INET, SOCK_DGRAM, 0); DESCRIERE Aceasta este o implementare a protocolului de dategrama de utilizator descris in RFC 768. Acesta implementeaza un serviciu de pachete de date fara conexiune, nesigur. Pachetele pot fi reordonate sau duplicate inainte de a ajunge la destinaie. UDP genereaza i verifica sumele de control pentru a detecta erorile de transmisie. Atunci cand se creeaza un soclu UDP, adresele sale locale i la distana nu sunt specificate. Datagramele pot fi trimise imediat folosind sendto(2) sau sendmsg(2) cu o adresa de destinaie valida ca argument. Atunci cand connect(2) este apelat pe soclu, adresa de destinaie implicita este definita, iar datagramele pot fi acum trimise utilizand send(2) sau write(2) fara a specifica o adresa de destinaie. Este in continuare posibila trimiterea catre alte destinaii prin transmiterea unei adrese catre sendto(2) sau sendmsg(2). Pentru a primi pachete, soclul poate fi legat mai intai la o adresa locala utilizand bind(2). In caz contrar, stratul de soclu va atribui automat un port local liber din intervalul definit de /proc/sys/net/ipv4/ip_local_port_range i va lega soclul la INADDR_ANY. Toate operaiile de recepie returneaza un singur pachet. Atunci cand pachetul este mai mic decat tamponul transmis, se returneaza doar acea cantitate de date; atunci cand este mai mare, pachetul este trunchiat i se activeaza fanionul MSG_TRUNC. MSG_WAITALL nu este acceptat. Opiunile IP pot fi trimise sau primite utilizand opiunile de soclu descrise in ip(7). Acestea sunt prelucrate de nucleu numai atunci cand parametrul /proc corespunzator este activat (dar sunt transmise utilizatorului chiar i atunci cand acesta este dezactivat). A se vedea ip(7). Atunci cand fanionul MSG_DONTROUTE este activat la trimitere, adresa de destinaie trebuie sa se refere la adresa unei interfee locale, iar pachetul este trimis numai catre acea interfaa. In mod implicit, Linux UDP face descoperirea traseului MTU (Maximum Transmission Unit). Aceasta inseamna ca nucleul va ine evidena MTU catre o anumita adresa IP inta i va returna EMSGSIZE atunci cand scrierea unui pachet UDP il depaete. Atunci cand se intampla acest lucru, aplicaia ar trebui sa reduca dimensiunea pachetului. Descoperirea MTU a rutei poate fi, de asemenea, dezactivata utilizand opiunea de soclu IP_MTU_DISCOVER sau fiierul /proc/sys/net/ipv4/ip_no_pmtu_disc; consultai ip(7) pentru detalii. Atunci cand este dezactivat, UDP va fragmenta pachetele UDP ieite care depaesc MTU-ul interfeei. Cu toate acestea, dezactivarea nu este recomandata din motive de performana i fiabilitate. Formatul adreselor UDP utilizeaza formatul de adresa IPv4 sockaddr_in descris in ip(7). Gestionarea erorilor Toate erorile fatale vor fi transmise utilizatorului ca raspuns la eroare, chiar i atunci cand soclul nu este conectat. Aceasta include erorile asincrone primite din reea. Putei primi o eroare pentru un pachet anterior care a fost trimis pe acelai soclu. Acest comportament difera de multe alte implementari de soclu BSD care nu transmit nicio eroare decat daca soclul este conectat. Comportamentul Linux este impus de RFC 1122. Pentru compatibilitate cu codul vechi, in Linux 2.0 i 2.2 a fost posibila definirea opiunii SO_BSDCOMPAT SOL_SOCKET pentru a primi erori la distana numai atunci cand soclul a fost conectat (cu excepia EPROTO i EMSGSIZE). Erorile generate la nivel local sunt intotdeauna transmise. Suportul pentru aceasta opiune de soclu a fost eliminat in nucleele ulterioare; consultai socket(7) pentru informaii suplimentare. Atunci cand opiunea IP_RECVERR este activata, toate erorile sunt stocate in coada de erori a soclului i pot fi primite de recvmsg(2) cu fanionul MSG_ERRQUEUE activat. Interfee ,,/proc" Reglajele parametrilor UDP la nivelul intregului sistem pot fi accesate de fiierele din directorul /proc/sys/net/ipv4/. udp_mem (incepand cu Linux 2.6.25) Acesta este un vector format din trei numere intregi care guverneaza numarul de pagini permise pentru coada de ateptare de catre toate soclurile UDP. min Sub acest numar de pagini, UDP nu este preocupat de apetitul sau pentru memorie. Atunci cand cantitatea de memorie alocata de UDP depaete acest numar, UDP incepe sa modereze utilizarea memoriei. pressure Aceasta valoare a fost introdusa pentru a respecta formatul tcp_mem (a se vedea tcp(7)). max Numarul de pagini admise in coada de ateptare de catre toate soclurile UDP. Valorile implicite pentru aceste trei elemente sunt calculate la pornire din cantitatea de memorie disponibila. udp_rmem_min (numar intreg; valoare implicita: PAGE_SIZE; incepand cu Linux 2.6.25) Dimensiunea minima, in octei, a tampoanelor de recepie utilizate de soclurile UDP in mod moderat. Fiecare soclu UDP este capabil sa utilizeze dimensiunea pentru primirea datelor, chiar daca paginile totale ale soclurilor UDP depaesc pragul udp_mem. udp_wmem_min (numar intreg; valoare implicita: PAGE_SIZE; incepand cu Linux 2.6.25) Dimensiunea minima, in octei, a tamponului de trimitere utilizat de soclurile UDP in mod moderat. Fiecare soclu UDP este capabil sa utilizeze dimensiunea pentru trimiterea de date, chiar daca numarul total de pagini ale soclurilor UDP depaete pragul udp_mem. Opiuni de soclu Pentru a defini sau a obine o opiune de soclu UDP, apelai getsockopt(2) pentru a citi sau setsockopt(2) pentru a scrie opiunea cu argumentul de nivel al opiunii stabilit la IPPROTO_UDP. Daca nu se specifica altfel, optval este un indicator catre un int. In continuare este prezentata o lista a opiunilor de soclu specifice UDP. Pentru detalii despre alte opiuni de soclu care sunt de asemenea aplicabile soclurilor UDP, consultai socket(7). UDP_CORK (incepand cu Linux 2.5.44) Daca aceasta opiune este activata, atunci toate datele transmise pe acest soclu sunt acumulate intr-o singura datagrama care este transmisa atunci cand opiunea este dezactivata. Aceasta opiune nu ar trebui utilizata in codul destinat sa fie portabil. UDP_SEGMENT (incepand cu Linux 4.18) Activeaza descarcarea de segmentare UDP. Descarcarea de segmentare reduce costul send(2) prin transferul mai multor datagrame de date sub forma unui singur pachet mare prin ruta de transmisie a nucleului, chiar i atunci cand aceasta depaete MTU. Cat mai tarziu posibil, pachetul mare este imparit in funcie de dimensiunea segmentului intr-o serie de datagrame. Aceasta etapa de descarcare a segmentarii este amanata la hardware daca este acceptata, in caz contrar fiind efectuata in software. Aceasta opiune ia o valoare in intervalul [0, USHRT_MAX] care stabilete dimensiunea segmentului: dimensiunea sarcinii utile a datagramelor, excluzand antetul UDP. Dimensiunea segmentului trebuie aleasa astfel incat cel mult 64 de datagrame sa fie trimise intr-un singur apel i ca datagramele dupa segmentare sa respecte aceleai reguli MTU care se aplica datagramelor trimise fara aceasta opiune. Descarcarea segmentarii depinde de descarcarea sumelor de control, deoarece sumele de control ale datagramelor sunt calculate dupa segmentare. Opiunea poate fi, de asemenea, definita pentru apelurile individuale sendmsg(2) prin transmiterea acesteia ca cmsg(3). O valoare de zero dezactiveaza caracteristica. Aceasta opiune nu ar trebui utilizata in codul destinat sa fie portabil. UDP_GRO (incepand cu Linux 5.0) Activeaza descarcarea recepiei UDP. Daca este activata, soclul poate primi mai multe datagrame de date ca un singur tampon mare, impreuna cu un cmsg(3) care conine dimensiunea segmentului. Aceasta opiune este inversa descarcarii de segmentare. Aceasta reduce costurile de recepie prin gestionarea mai multor datagrame de date ca un singur pachet mare in ruta de recepie a nucleului, chiar i atunci cand aceasta depaete MTU. Aceasta opiune nu ar trebui utilizata in codul destinat sa fie portabil. Ioctl-uri Aceste ioctl-uri pot fi accesate folosind ioctl(2). Sintaxa corecta este: int value; error = ioctl(udp_socket, ioctl_type, &value); FIONREAD (SIOCINQ) Obine un indicator la un numar intreg ca argument. Returneaza dimensiunea urmatoarei datagrame in ateptare in numar intreg, in octei, sau 0 atunci cand nu exista nicio datagrama in ateptare. Avertisment: Utilizand FIONREAD, este imposibil sa se distinga cazul in care nu exista nicio datagrama in ateptare de cazul in care urmatoarea datagrama in ateptare conine zero octei de date. Este mai sigur sa utilizai select(2), poll(2) sau epoll(7) pentru a distinge aceste cazuri. TIOCOUTQ (SIOCOUTQ) Returneaza numarul de octei de date din coada de expediere locala. Compatibil numai cu Linux 2.4 i versiunile ulterioare. In plus, sunt acceptate toate ioctl-urile documentate in ip(7) i socket(7). ERORI-IEIRE Toate erorile documentate pentru socket(7) sau ip(7) pot fi returnate de o trimitere sau o primire pe un soclu UDP. ECONNREFUSED Niciun receptor nu a fost asociat cu adresa de destinaie. Acest lucru ar putea fi cauzat de un pachet anterior trimis prin soclu. VERSIUNI IP_RECVERR a aparut ca o caracteristica noua in Linux 2.2. CONSULTAI I ip(7), raw(7), socket(7), udplite(7) Fiierul sursa al nucleului Documentation/networking/ip-sysctl.txt. RFC 768 pentru Protocolul Datagrama Utilizator- UDP. RFC 1122 pentru cerinele privind gazdele. RFC 1191 pentru o descriere a descoperirii MTU a rutei. TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 17 mai 2025 udp(7)