udp

Autres langues

Langue: ru

Autres versions - même langue

Version: 2 ÏËÔ 1998 (openSuse - 09/10/07)

Section: 7 (Divers)

îáú÷áîéå

udp - ÐÒÏÔÏËÏÌ UDP (User Datagram Protocol) ÐÏ×ÅÒÈ ÐÒÏÔÏËÏÌÁ IPv4.

ïâúïò

#include <sys/socket.h>
#include <netinet/in.h>
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);

ïðéóáîéå

üÔÏ ÒÅÁÌÉÚÁÃÉÑ User Datagram Protocol (ðÒÏÔÏËÏÌÁ ðÏÌØÚÏ×ÁÔÅÌØÓËÉÈ äÁÔÁÇÒÁÍÍ, UDP), ËÏÔÏÒÙÊ ÏÐÉÓÁÎ × RFC768. ïÎ ÏÂÅÓÐÅÞÉ×ÁÅÔ ÎÅÎÁÄÅÖÎÕÀ ÐÅÒÅÄÁÞÕ ÄÁÔÁÇÒÁÍÍ ÂÅÚ ÕÓÔÁÎÏ×ÌÅÎÉÑ ÓÏÅÄÉÎÅÎÉÑ. ðÒÉ ÐÅÒÅÓÙÌËÅ ÐÁËÅÔÙ ÍÏÇÕÔ ÄÕÂÌÉÒÏ×ÁÔØÓÑ, Á ÉÈ ÐÏÒÑÄÏË ÍÏÖÅÔ ÂÙÔØ ÎÁÒÕÛÅÎ. UDP ÇÅÎÅÒÉÒÕÅÔ É ÐÒÏ×ÅÒÑÅÔ ËÏÎÔÒÏÌØÎÙÅ ÓÕÍÍÙ, ÞÔÏÂÙ ÏÔÌÏ×ÉÔØ ÏÛÉÂËÉ ÐÅÒÅÄÁÞÉ.

ðÒÉ ÓÏÚÄÁÎÉÉ UDP-ÓÏËÅÔÁ ÅÇÏ ÌÏËÁÌØÎÙÊ É ÕÄÁÌÅÎÎÙÊ ÁÄÒÅÓ ÎÅ ÕËÁÚÙ×ÁÀÔÓÑ. äÁÔÁÇÒÁÍÍÙ ÍÏÇÕÔ ÂÙÔØ ÐÏÓÌÁÎÙ ÎÅÍÅÄÌÅÎÎÏ Ó ÐÏÍÏÝØÀ sendto(2) ÉÌÉ sendmsg(2), Ó ÐÒÁ×ÉÌØÎÙÍ ÁÄÒÅÓÏÍ ÎÁÚÎÁÞÅÎÉÑ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ. ëÏÇÄÁ ÄÌÑ ÓÏËÅÔÁ ×ÙÚÙ×ÁÅÔÓÑ connect(2), ÔÏ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ É Ó ÜÔÏÇÏ ÍÏÍÅÎÔÁ ÄÁÔÁÇÒÁÍÍÙ ÍÏÇÕÔ ÏÔÓÙÌÁÔØÓÑ Ó ÐÏÍÏÝØÀ send(2) ÉÌÉ write(2), ÂÅÚ ÕËÁÚÁÎÉÑ ÁÄÒÅÓÁ ÎÁÚÎÁÞÅÎÉÑ. ðÒÉ ÜÔÏÍ ×ÓÅ ÅÝÅ ÓÏÈÒÁÎÑÅÔÓÑ ×ÏÚÍÏÖÎÏÓÔØ ÐÏÓÌÁÔØ ÐÁËÅÔ ÄÒÕÇÏÍÕ ÁÄÒÅÓÁÔÕ, ÐÅÒÅÄÁ×ÁÑ ÅÇÏ ÁÄÒÅÓ ÐÒÏÃÅÄÕÒÁÍ sendto(2) ÉÌÉ sendmsg(2). äÌÑ ÐÏÌÕÞÅÎÉÑ ÐÁËÅÔÏ× ÓÏËÅÔ ÓÎÁÞÁÌÁ ÍÏÖÎÏ ÐÒÉ×ÑÚÁÔØ Ë ÌÏËÁÌØÎÏÍÕ ÁÄÒÅÓÕ Ó ÐÏÍÏÝØÀ bind(2). ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÓÏËÅÔÎÙÊ ÕÒÏ×ÅÎØ Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÉÓ×ÏÉÔ Ó×ÏÂÏÄÎÙÊ ÌÏËÁÌØÎÙÊ ÐÏÒÔ ÉÚ ÄÉÁÐÁÚÏÎÁ, ÚÁÄÁÎÎÏÇÏ × net.ipv4.ip_local_port_range, É ÐÒÉ×ÑÖÅÔ ÓÏËÅÔ Ë INADDR_ANY.

÷ÓÅ ÏÐÅÒÁÃÉÉ ÐÒÉÅÍÁ ×ÏÚ×ÒÁÝÁÀÔ ÔÏÌØËÏ ÏÄÉÎ ÐÁËÅÔ. åÓÌÉ ÐÁËÅÔ ÍÅÎØÛÅ, ÞÅÍ ÒÁÚÍÅÒ ÂÕÆÅÒÁ ÐÒÉÅÍÁ, ÔÏ ÏÎ ×ÏÚ×ÒÁÝÁÅÔÓÑ ÃÅÌÉËÏÍ; ÅÓÌÉ ÐÁËÅÔ ÂÏÌØÛÅ, ÔÏ ÏÎ ÏÂÒÅÚÁÅÔÓÑ É ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÆÌÁÇ MSG_TRUNC. MSG_WAITALL ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ.

ïÐÃÉÉ IP ÍÏÇÕÔ ÂÙÔØ ÐÏÓÌÁÎÙ ÉÌÉ ÐÏÌÕÞÅÎÙ ÐÒÉ ÐÏÍÏÝÉ ÏÐÃÉÊ ÓÏËÅÔÁ, ÏÐÉÓÁÎÎÙÈ × ip(7). ïÎÉ ÏÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÑÄÒÏÍ, ÅÓÌÉ ×ËÌÀÞÅÎÏ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ sysctl-ÚÎÁÞÅÎÉÅ (ÎÏ ÄÁÖÅ ÅÓÌÉ ÏÎÏ ÏÔËÌÀÞÅÎÏ, ÏÐÃÉÉ ×ÓÅ ÒÁ×ÎÏ ÐÅÒÅÄÁÀÔÓÑ ÐÏÌØÚÏ×ÁÔÅÌÀ). óÍÏÔÒÉ ip(7).

åÓÌÉ ÐÒÉ ÏÔÓÙÌËÅ ÕÓÔÁÎÏ×ÌÅÎ ÆÌÁÇ MSG_DONTROUTE, ÔÏ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ ÄÏÌÖÅÎ ÕËÁÚÙ×ÁÔØ ÎÁ ÁÄÒÅÓ ÌÏËÁÌØÎÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, É ÐÁËÅÔÙ ÐÏÓÙÌÁÀÔÓÑ ÔÏÌØËÏ ÎÁ ÜÔÏÔ ÉÎÔÅÒÆÅÊÓ.

UDP ÆÒÁÇÍÅÎÔÉÒÕÅÔ ÐÁËÅÔ, ÅÓÌÉ ÅÇÏ ÏÂÝÉÊ ÒÁÚÍÅÒ ÐÒÅ×ÙÛÁÅÔ ÚÎÁÞÅÎÉÅ MTU (Maximum Transmission Unit) ÉÎÔÅÒÆÅÊÓÁ. âÏÌÅÅ ÄÒÕÖÅÌÀÂÎÏÊ ÄÌÑ ÓÅÔÉ ÁÌØÔÅÒÎÁÔÉ×ÏÊ Ñ×ÌÑÅÔÓÑ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÍÅÔÏÄÁ ÏÂÎÁÒÕÖÅÎÉÑ MTU ÍÁÒÛÒÕÔÁ, ËÏÔÏÒÙÊ ÏÐÉÓÁÎ × ÒÁÚÄÅÌÅ IP_PMTU_DISCOVER ÓÔÒÁÎÉÃÙ ÒÕËÏ×ÏÄÓÔ×Á ip(7).

æïòíáô áäòåóá

UDP ÉÓÐÏÌØÚÕÅÔ ÆÏÒÍÁÔ ÁÄÒÅÓÁ IPv4 sockaddr_in, ËÏÔÏÒÙÊ ÏÐÉÓÁÎ × ip(7).

ïâòáâïôëá ïûéâïë

÷ÓÅ ÆÁÔÁÌØÎÙÅ ÏÛÉÂËÉ ÂÕÄÕÔ ÐÅÒÅÄÁ×ÁÔØÓÑ ÐÏÌØÚÏ×ÁÔÅÌÀ × ×ÉÄÅ ËÏÄÁ ÏÛÉÂËÉ, ËÏÔÏÒÙÊ ×ÏÚ×ÒÁÝÁÅÔÓÑ, ÄÁÖÅ ÅÓÌÉ ÓÏËÅÔ ÎÅ ÓÏÅÄÉÎÅÎ. üÔÏ ÏÔÎÏÓÉÔÓÑ ÔÁËÖÅ É Ë ÁÓÉÎÈÒÏÎÎÙÍ ÏÛÉÂËÁÍ, ÐÏÌÕÞÅÎÎÙÍ ÉÚ ÓÅÔÉ. ÷Ù ÍÏÖÅÔÅ ÐÏÌÕÞÉÔØ ÏÛÉÂËÕ, ÏÔÎÏÓÑÝÕÀÓÑ Ë ÂÏÌÅÅ ÒÁÎÎÅÍÕ ÐÁËÅÔÕ, ÐÏÓÌÁÎÎÏÍÕ ÎÁ ÔÏÍ ÖÅ ÓÏËÅÔÅ. ôÁËÏÅ ÐÏ×ÅÄÅÎÉÅ ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÐÏ×ÅÄÅÎÉÑ ÍÎÏÇÉÈ ÄÒÕÇÉÈ ÒÅÁÌÉÚÁÃÉÊ BSD-ÓÏËÅÔÏ×, ËÏÔÏÒÙÅ ÎÉËÏÇÄÁ ÎÅ ÐÅÒÅÄÁÀÔ ËÏÄÙ ÏÛÉÂÏË, ÅÓÌÉ ÎÁ ÓÏËÅÔÅ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÏ ÓÏÅÄÉÎÅÎÉÅ. ðÏ×ÅÄÅÎÉÅ Linux × ÜÔÏÍ ÓÌÕÞÁÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ RFC1122.

äÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ ÓÏ ÓÔÁÒÙÍ ËÏÄÏÍ ÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÏÐÃÉÀ SOL_SOCKET SO_BSDCOMPAT, ÞÔÏÂÙ ÐÏÌÕÞÁÔØ ÕÄÁÌÅÎÎÙÅ ÏÛÉÂËÉ, ÔÏÌØËÏ ÅÓÌÉ ÓÏËÅÔ ÂÙÌ ÓÏÅÄÉÎÅÎ (ËÒÏÍÅ ÏÛÉÂÏË EPROTO É EMSGSIZE). ïÄÎÁËÏ ÌÕÞÛÅ ÉÓÐÒÁ×ÉÔØ ËÏÄ, ÞÔÏÂÙ ÏÎ ÐÒÁ×ÉÌØÎÏ ÏÂÒÁÂÁÔÙ×ÁÌ ÏÛÉÂËÉ, ÞÅÍ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÕ ÏÐÃÉÀ. ïÛÉÂËÉ, ×ÏÚÎÉËÛÉÅ ÌÏËÁÌØÎÏ, ÐÅÒÅÄÁÀÔÓÑ ×ÓÅÇÄÁ.

åÓÌÉ ×ËÌÀÞÅÎÁ ÏÐÃÉÑ IP_RECVERR, ÔÏ ×ÓÅ ÏÛÉÂËÉ ÈÒÁÎÑÔÓÑ × ÏÞÅÒÅÄÉ ÏÛÉÂÏË ÓÏËÅÔÁ É ÍÏÇÕÔ ÂÙÔØ ÐÏÌÕÞÅÎÙ Ó ÐÏÍÏÝØÀ ÆÕÎËÃÉÉ recvmsg(2) Ó ÕÓÔÁÎÏ×ÌÅÎÎÙÍ ÆÌÁÇÏÍ MSG_ERRQUEUE.

IOCTL

ë ÎÉÖÅÐÅÒÅÞÉÓÌÅÎÎÙÍ ioctl ÍÏÖÎÏ ÏÂÒÁÔÉÔØÓÑ Ó ÐÏÍÏÝØÀ ioctl(2). ðÒÁ×ÉÌØÎÙÊ ÓÉÎÔÁËÓÉÓ ÔÁËÏ×:

int value;

error = ioctl(tcp_socket, ioctl_type, &value);

SIOCINQ
÷ ËÁÞÅÓÔ×Å ÐÁÒÁÍÅÔÒÁ ÐÏÌÕÞÁÅÔ ÕËÁÚÁÔÅÌØ ÎÁ ÃÅÌÏÅ ÞÉÓÌÏ. ÷ÏÚ×ÒÁÝÁÅÔ ÒÁÚÍÅÒ ÓÌÅÄÕÀÝÅÊ ÏÖÉÄÁÀÝÅÊ ÄÁÔÁÇÒÁÍÍÙ × ÂÁÊÔÁÈ, ÐÏÍÅÝÁÑ ÉÈ × ÜÔÏ ÃÅÌÏÅ ÞÉÓÌÏ, ÉÌÉ ÖÅ 0, ÅÓÌÉ ÎÅÔ ÏÖÉÄÁÀÝÅÊ ÄÁÔÁÇÒÁÍÍÙ.
SIOCOUTQ
÷ÏÚ×ÒÁÝÁÅÔ ËÏÌÉÞÅÓÔ×Ï ÂÁÊÔ ÄÁÎÎÙÈ × ÌÏËÁÌØÎÏÊ ÏÞÅÒÅÄÉ ÏÔÐÒÁ×ËÉ. ðÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ × Linux 2.4 É ×ÙÛÅ.

äÏÐÏÌÎÉÔÅÌØÎÏ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ×ÓÅ ioctl, ÄÏËÕÍÅÎÔÉÒÏ×ÁÎÎÙÅ × ip(7) É socket(7).

ëïäù ïûéâïë

÷ÓÅ ËÏÄÙ ÏÛÉÂÏË, ÏÐÉÓÁÎÎÙÅ × socket(7) ÉÌÉ ip(7), ÍÏÇÕÔ ÂÙÔØ ÐÏÌÕÞÅÎÙ ÐÒÉ ÐÏÓÙÌËÅ ÉÌÉ ÐÒÉÅÍÅ ÎÁ ÓÏËÅÔÅ UDP.

ECONNREFUSED ó ÁÄÒÅÓÏÍ ÎÁÚÎÁÞÅÎÉÑ ÎÅ Ó×ÑÚÁÎ ÎÉ ÏÄÉÎ ÐÏÌÕÞÁÔÅÌØ. üÔÁ ÏÛÉÂËÁ ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ ÐÒÅÄÙÄÕÝÉÍ ÐÁËÅÔÏÍ, ÐÏÓÌÁÎÎÙÍ ÞÅÒÅÚ ÜÔÏÔ ÓÏËÅÔ.

÷åòóéé

ïÐÃÉÑ IP_RECVERR ÐÏÑ×ÉÌÁÓØ ÔÏÌØËÏ × Linux 2.2.

á÷ôïòù

üÔÕ ÓÔÒÁÎÉÃÕ ÒÕËÏ×ÏÄÓÔ×Á ÎÁÐÉÓÁÌ Andi Kleen.

óíïôòé ôáëöå

ip(7), socket(7), raw(7).

RFC768, ÇÄÅ ÏÐÉÓÁÎ UDP.
RFC1122, ÇÄÅ ÏÐÉÓÁÎÙ ÔÒÅÂÏ×ÁÎÉÑ Ë ÈÏÓÔÕ.
RFC1191, ÇÄÅ ÏÐÉÓÁÎ ÐÒÏÃÅÓÓ ÏÂÎÁÒÕÖÅÎÉÑ MTU ÍÁÒÛÒÕÔÁ.