| ±à¼ÍƼö: |
±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÁËʲôÊÇUDP£¬UDPµÄÌØÕ÷£¬ÏûÏ¢±ß½ç£¬UDPÊý¾Ý±¨·â×°¸ñʽ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ51CTO£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼ÍƼö¡£ |
|
ʲôÊÇUDP?
UDPÊÇUser Datagram Protocol(Óû§Êý¾Ý±¨ÐÒé)µÄËõд£¬ËüÊÇÒ»¸ö¼òµ¥µÄÐÒ飬¼òµ¥µ½UDP¹æ·¶RFC0768Ö»ÓÐÇøÇø3Ò³¡£
UDPÊǹ¤×÷ÔÚIP²ãÖ®ÉϵĴ«Êä²ãÐÒ飬UDP¶ÔIPÖ÷ÒªÓÐÁ½¸öÀ©Õ¹£º
À©Õ¹³ö¶Ë¿ÚºÅʹµÃIPÊý¾Ý±¨¿ÉÒÔ¶à··Ö·¢µ½Óû§½ø³Ì¡£
À©Õ¹³öУÑéºÍÌá¹©ÍøÂç´«Êä¹ý³ÌÖÐÊý¾Ý²î´íµÄ¼ìÑé¡£
IPÌṩÁËÒ»ÖÖ¾¡Á¦¶øÎª¡¢ÎÞÁ¬½ÓµÄÊý¾Ý±¨½»¸¶·þÎñ¡£IP»ùÓÚIPµØÖ·ÊµÏÖ·ÓɺͷÖ×éת·¢£¬¿ÉÒÔ½«Ò»¸öIPÊý¾Ý±¨´ÓÍøÂçµÄһ̨Ö÷»ú´«Ë͵½Áíһ̨Ö÷»ú£¬IPµØÖ·¾ö¶¨IPÊý¾Ý±¨½«±»ËÍÍùÄĸöÖ÷»ú¡£ËùÒÔ£¬IPÌṩÖ÷»úµ½Ö÷»úµÄÊý¾Ý±¨´«Êä·þÎñ¡£
IPÊý¾Ý±¨µ½´ïÄ¿µÄÖ÷»úºó£¬Äں˲ãʵÏÖµÄIPÄ£¿é£¬»á¸ºÔð½ÓÊÕÍø¿¨ÉϵÄIPÊý¾Ý±¨£¬µ«Ö÷»úÉÏͨ³£»áͬʱÔËÐжà¸ö½ø³Ì£¬IPÊý¾Ý±¨Ó¦¸Ã½»¸øÄĸö½ø³ÌÈ¥´¦ÀíÄØ?IP¸ã²»¶¨¡£
¶Ë¿ÚºÅ(λÓÚUDPÊײ¿)¾ö¶¨Êý¾Ý±¨½»¸øÖ÷»úÉϵÄÄĸö½ø³Ì´¦Àí¡£ËùÒÔ£¬UDPΪ¶ËÖ÷»úÉÏÔËÐеÄÓ¦ÓóÌÐòÌṩÁ˶˵½¶Ë·þÎñ¡£
UDPµÄÌØÕ÷
UDPÊÇÎÞÁ¬½ÓµÄ£¬Í¨ÐÅ֮ǰÎÞÐ뽨Á¬±ã¿ÉÖ±½Ó·¢ËÍÊý¾Ý±¨£¬¶øTCPÊÇÃæÏòÁ¬½ÓµÄ¡£
UDP²»Ìṩ²î´í¾ÀÕý£¬µ«UDPÌṩ²î´í¼ì²â(¶Ëµ½¶ËУÑéºÍ)¡£
UDP²»×öÖØ¸´Ïû³ý¡£
UDP²»×öÁ÷Á¿¿ØÖÆ¡£
UDP²»×öÓµÈû¿ØÖÆ£¬Ã»ÓÐÐÒé»úÖÆ·ÀÖ¹¸ßËÙUDPÁ÷Á¿¶ÔÆäËûÍøÂçÓû§µÄÏû¼«Ó°Ïì¡£
UDP²»±£Ö¤Ë³Ðò£¬Êý¾Ý±¨µÝ½»Ó¦ÓõÄ˳Ðò¡£
UDP²»¿É¿¿£¬UDPÖ»¸ºÔð°ÑÓ¦ÓóÌÐò´«¸øIP²ãµÄÊý¾Ý·¢ËͳöÈ¥£¬²¢²»Äܱ£Ö¤Êý¾Ý±¨µ½´ïÄ¿µÄµØ£¬¿É¿¿´«µÝÐèÒªÓ¦ÓóÌÐòȥʵÏÖ¡£
UDPÖ§³Ö×é²¥½»¸¶¡£
UDPÊÇÒ»ÖÖ±£ÁôÏûÏ¢±ß½çµÄ´«Êä²ãÐÒé¡£
ÏûÏ¢±ß½ç
Ó¦ÓóÌÐòÿÇëÇóÒ»´ÎUDPÊä³ö½«²úÉúÒ»¸öUDPÊý¾Ý±¨£¬´Ó¶ø·¢ËÍÒ»¸öIPÊý¾Ý±¨£¬¶ø½ÓÊÕ¶ËÿÇëÇóÒ»´ÎUDP½ÓÊÕ¶¼½«½ÓÊÕÒ»¸öÍêÕûµÄUDP±¨(Èç¹ûÓÐ)£¬Õâ¸úÃæÏòÊý¾ÝÁ÷µÄTCP²»Ò»Ñù¡£
¼ÙÉèÖ÷»úA¸øÖ÷»úB·¢ËÍ2´ÎÊý¾Ý£¬***´Î4×Ö½Ú¡°abcd¡±£¬µÚ¶þ´Î3×Ö½Ú¡°xyz¡±£¬¶øÖ÷»úB½ÓÊÕ2´Î£¬·Ö±ð·µ»Ø¡°abcd¡±¡¢¡°xyz¡±Á½¸öÏûÏ¢£¬Ò²¿ÉÒÔ·µ»Ø¡°xyz¡±£¬¡°abcd¡±Á½¸öÏûÏ¢(˳Ðò²»ÖØÒª)£¬ÄÇôÕâ¾ÍÊDZ£ÁôÏûÏ¢±ß½ç¡£
UDPÊDZ£ÁôÏûÏ¢±ß½çµÄ´«Êä²ãÐÒ飬ÀûÓÃUDPͨÐŵÄÓ¦ÓóÌÐòÿ´Î·¢ËͲÙ×÷»á²úÉúÒ»¸öIPÊý¾Ý±¨(²»¿¼ÂÇ·ÖÆ¬)£¬Õâ¾ÍÔ¼ÊøÃ¿´Î·¢Ë͵ÄÊý¾ÝÁ¿²»ÄÜ´óÓÚMTU(***´«Êäµ¥Ôª)£¬½ÓÊÕ¶Ëÿ´Î½ÓÊÕ¶¼»á·µ»ØÒ»¸ö¸öUDPÊý¾Ý±¨µÄÍêÕû¸ºÔØ£¬²»»á³öÏÖ·µ»Ø°ë¸öÊý¾Ý±¨¸ºÔصÄÇé¿ö¡£
¶øTCPÊDz»±£ÁôÏûÏ¢±ß½çµÄÁ÷ÐÒ飬·¢ËͶ˵÷Ó÷¢Ë͵ĴÎÊýºÍÿ´Î·¢Ë͵ÄÊý¾ÝÁ¿£¬¸ú½ÓÊն˵÷ÓýÓÊյĴÎÊýºÍÿ´Î½ÓÊÕµÄÊý¾ÝÁ¿£¬Ã»ÓÐÈκζÔÓ¦¹ØÏµ£¬ËùÒÔʹÓÃTCPµÄÓ¦ÓóÌÐòÐèҪȥ´¦ÀíÏûÏ¢±ß½ç¡£
UDPÊý¾Ý±¨·â×°¸ñʽ
IPv4ÐÒé(Protocol)×Ö¶ÎÓÃÖµ17À´±êʶUDP£¬UDPÊý¾Ý±¨Í·²¿Í¨³£ÊÇ8×Ö½Ú£¬IPv4Í·²¿Ö®ºó½ô½Ó×ÅÊÇUDPÍ·²¿£¬È»ºóÊÇUDPÊý¾ÝPayload(ÈçÓÐ)¡£

IPv4 UDPÊý¾Ý±¨·â×°¸ñʽ
IPv4·â×°°ü¶ÔÓ¦µÄUDPÍ·²¿ÓÉÔ´¶Ë¿ÚºÅ¡¢Ä¿µÄ¶Ë¿ÚºÅ¡¢³¤¶È¡¢Ð£ÑéºÍ×é³É£¬Ã¿¸ö×ֶζ¼ÊÇ2×Ö½Ú¡£
1¡¢¶Ë¿ÚºÅ£¬´¿³éÏóµÄ±êʶ£¬Ëü²»¸úÈκÎÎïÀíʵÌåÏà¹Ø¡£
¶Ë¿ÚºÅÓÃÓÚ°ïÖúÐÒé·Ö±æ·¢ËͺͽÓÊÕ½ø³Ì¡£½ÓÊն˵ÄÄں˲ã´ÓÍø¿¨½ÓÊÕµ½IPÊý¾Ý±¨Ö®ºó£¬Ê¶±ð³öUDPÊý¾Ý±¨(IPÊý¾Ý±¨Í·²¿ÐÒé×Ö¶ÎÖµ=17)Ö®ºó£¬»á¸ù¾ÝUDPÍ·²¿µÄÄ¿µÄ¶Ë¿ÚºÅ£¬Ó³Éäµ½¶ÔÓ¦½ø³Ì£¬°ÑUDPÊý¾Ý±¨½»¸ø¶ÔÓ¦µÄ½ø³ÌÈ¥´¦Àí£¬Õâ¸öÓ³Éä¹ØÏµÓÉϵͳÄں˹ÜÀíά»¤¡£

UDPÍ·²¿ºÍ¸ºÔØ
Ä¿µÄ¶Ë¿ÚºÅÊDZØÐëµÄ£¬µ«Ô´¶Ë¿ÚºÅÊÇ¿ÉÑ¡µÄ£¬Èç¹ûÊý¾Ý±¨·¢ËÍÕß²»ÐèÒª¶Ô·½»Ø¸´µÄ»°£¬ÔòÔ´¶Ë¿ÚºÅ¿É±»ÉèÖÃΪ0¡£
ÒòΪIP²ã¸ù¾ÝIPÍ·²¿µÄÐÒéÀàÐÍ×ֶΣ¬½«½øÈëµÄIPÊý¾Ý±¨£¬·Ö·¢µ½Ìض¨µÄ´«ÊäÐÒé(TCP»òUDPµÈ)£¬µ½ÁË´«ÊäÐÒé²ã£¬ÔÙ¸ù¾Ý¶Ë¿ÚºÅ½«ÐÒéÊý¾Ý·Ö·¢µ½²»Í¬½ø³Ì¡£ËùÒÔ£¬¶Ë¿ÚºÅÊÇÐÒé¶ÀÁ¢µÄ£¬²»Í¬ÐÒéµÄÏàͬ¶Ë¿ÚºÅ²¢²»»áÒýÆð·Ö·¢»ìÂÒ¡£
±ÈÈ磬һ̨»úÆ÷ÉϵÄÁ½¸öÍøÂç·þÎñ½ø³ÌʹÓÃÏàͬµÄIPµØÖ·ºÍ¶Ë¿ÚºÅ£¬µ«Ò»¸öʹÓÃTCPÐÒ飬ÁíÒ»¸öʹÓÃUDPÐÒ飬ÕâÑùÊÇûÓÐÎÊÌâ¡£
2¡¢³¤¶È×ֶΣ¬ÊÇÒÔ×Ö½ÚΪµ¥Î»µÄUDPÍ·²¿ºÍUDPÊý¾ÝµÄ×ܳ¤¶È£¬ÒòΪUDPÍ·²¿³¤¶ÈΪ8£¬ÇÒ¿ÕÊý¾ÝµÄUDPÊý¾Ý±¨ÊÇÔÊÐíµÄ£¬ÕâÒâζןó¤¶È×Ö¶ÎÖµ×îСΪ8¡£UDP³¤¶ÈÖµÊÇÈßÓàµÄ£¬ÒòΪ¿ÉÒÔͨ¹ýIPÊý¾Ý±¨µÄ×ܳ¤¶È¼õÈ¥IPÊײ¿µÄ³¤¶ÈÍÆµ¼³öÀ´¡£
3¡¢Ð£ÑéºÍ£¬¸²¸ÇÁËUDPÊײ¿¡¢UDPÊý¾ÝºÍÒ»¸öαÊײ¿£¬Óɳõʼ·¢ËÍ·½¼ÆË㣬ÓÉ×îÖÕÄ¿µÄ·½Ð£Ñ飬ÓÃÓÚÅжÏÊý¾Ý±¨ÔÚÍøÂç´«Êä¹ý³ÌÖÐÊÇ·ñ³ö´í£¬±ÈÈçijһλ´Ó1±ä³ÉÁË0¡£
ʹÓÃUDPµÄÓ¦ÓóÌÐòÈçºÎʵÏÖ¿É¿¿´«Êä
ÖÚËùÖÜÖª£¬UDP²»¿É¿¿¡¢²»±£Ö¤Ë³Ðò¡£
1¡¢Ê²Ã´½Ð²»¿É¿¿?A¸øB·¢ËÍÒ»¸öUDPÊý¾Ý±¨£¬¸ÃUDPÊý¾Ý±¨²»Ò»¶¨±»ÕýÈ·½»¸¶¸ø½ÓÊÕ¶ËB£¬µ«ÒòÎªÍøÂçÖÊÁ¿µÈ¸÷ÖÖÔÒò£¬¿ÉÄܶª°ü£¬IPÊý¾Ý±¨ÊǾ¡Á¦¶øÎªµÄ½»¸¶£¬Ò»ÇÐËæÔµ¡£
ÓÐûÓа취±£Ö¤£¬·¢Ë͵ÄUDPÒ»¶¨µ½´ïÄ¿µÄ¶Ë?Sorry£¬±£Ö¤²»ÁË£¬×ö²»µ½¡£
ÄÇTCPÌṩµÄ¿É¿¿´«ÊäÊÇʲôÒâ˼?TCPÌṩµÄ¿É¿¿´«Êä²¢²»ÊÇÖ¸²»¶ª°ü£¬ÒòΪTCPÒ²ÒÀÀµIP(IP²»¿É¿¿)ʵÏÖÊý¾Ý±¨½»¸¶£¬TCPµÄ¿É¿¿ÐÔÊÇÖ¸¶ªµôµÄ°ü»á±»ÖØ´«£¬Ö±µ½±»ÕýȷͶµÝ£¬²Å»á¼ÌÐø´«ÊäÏÂÒ»¸öÊý¾Ý±¨¡£
ÄÇTCPÊÇÔõô×öµ½¿É¿¿´«ÊäµÄÄØ?ºÜ¼òµ¥£¬ÊÕ±¨È·ÈÏ(ack)+¶ª°üÖØ´«¡£ËùÒÔUDPÈç¹ûÒªÌṩ¿É¿¿´«Ê䣬Ҳ¿ÉÒԲο¼TCPµÄʵÏÖ»úÖÆ£¬Ö»ÊÇTCPÊÇʵÏÖÔÚÄں˲㣬¶ø»ùÓÚUDPµÄÓ¦ÓóÌÐò£¬¿ÉÒ԰ѿɿ¿´«Êä×öµ½Ó¦Óò㡣Ҫ×öÊÕ±¨È·ÈÏ+¶ª°üÖØ´«£¬ÐèҪһЩ¶îÍâµÄÐÅÏ¢£¬±ÈÈç°üÐòÁкÅÖ®À࣬¿ÉÒԷŵ½Payload£¬Ô¼¶¨ºÃÕâЩ¶îÍâÐÅÏ¢ÔÚPayloadÖеĽṹ²¼¾Ö¼´¿É¡£
2¡¢Ê²Ã´½Ð²»±£Ö¤Ë³Ðò?A¸øB·¢ËÍÁ½¸öUDPÊý¾Ý±¨£¬Á½¸öUDPÊý¾Ý±¨»á±»·âװΪÁ½¸öIPÊý¾Ý±¨£¬Í¨¹ýIPÐÒé´«Ê䣬ÒòΪÁ½¸öIPÊý¾Ý±¨¶ÀÁ¢Â·ÓÉ£¬ËùÒÔÄĸöÏȵ½?²»Ò»¶¨£¬¿´ÐÄÇé¡£
ÓÐûÓа취±£Ö¤£¬UDPÊý¾Ý±¨°´ÕÕ·¢ËͶ˷¢Ë͵Äʱ¼ä˳Ðòµ½´ïÄ¿µÄ¶Ë?Ò²Sorry£¬°ì²»µ½¡£
ËùÒÔ£¬TCPÌṩµÄ˳ÐòÐÔ£¬ÆäʵֻÊÇÔÚ½ÓÊն˶ÔIPÊý¾Ý±¨¸ù¾Ý·¢ËÍ˳ÐòÖØÐÂÅÅÐò£¬ºÜÏÔÈ»£¬UDPÒªÖ§³ÖÖØÅÅÐò£¬Ò²ÐèҪһЩ¶îÍâÐÅÏ¢£¬Ò²Ö»ÄÜͨ¹ýpayloadЯ´ø£¬¶ø²»ÄÜÏñTCPÒ»Ñù(TCPÊײ¿µÄһЩ×Ö¶ÎÓÃÓÚ½ÓÊÕ¶ËÖØÅÅÐò)¡£
×ÛÉÏ£¬UDPÖ»Ìṩ×î¼òµ¥¶ËÖ÷»úÉÏÓ¦ÓóÌÐòµÄ¶Ëµ½¶Ë·þÎñ£¬ÆäËûµÄÌØÐÔ£¬Èç¹ûÒªÌṩ£¬ÄÇÇë²Î¿¼TCPµÄ˼·ȥʵÏÖ°É¡£
ÕâÊÇÓкô¦µÄ£ºÒòΪ¼òµ¥£¬ËùÒÔ¿ªÏúºÜС¡£¶øÄ³Ð©Ó¦Óó¡¾°£¬¿ÉÒÔÈÝÈ̶ª°ü¡¢ÂÒÐò£¬UDP¾ÍÊǺÜÊʺϵġ£±£Ê±½ÝÊǺܺ㬵«Àש»¹ÊÇÓÃÍÏÀ»ú°É¡£
UDP Socket±à³Ì
UDP SocketÍøÂç±à³ÌµÄAPI²»¶à£¬socket()ÓÃÓÚ´´½¨Ì×½Ó×Ö£¬close()ÓÃÓڹرÕÌ×½Ó×Ö£¬sendto()ÓÃÓÚ·¢ËÍÊý¾Ý£¬recvfrom()ÓÃÓÚ½ÓÊÕÊý¾Ý¡£
bind()¹ËÃû˼ÒåÊǰ󶨣¬TCP¿ÉÒ԰󶨣¬UDPÒ²¿ÉÒÔ£¬bindÓÃÓÚUDPµÈÓÚ¸æËßÄںˣºÕâ¸öÌ×½Ó×Ö¸úÍøÂçÔ¶¶ËµÄÒ»¸ö
¶øÃ»ÓÐbind֮ǰ£¬Ö»ÄÜͨ¹ýsendto()½Ó¿Ú(ͨ¹ý²ÎÊýÖ¸¶¨Ä¿µÄµØ)¡£UDPÌ×½Ó×Örecv()·µ»ØµÄÊÇUDPÊý¾Ý±¨µÄÊý¾Ý²¿·Ö(Payload)£¬²»°üÀ¨UDPÊý¾Ý±¨Êײ¿£¬ÕâÊÇÒòΪUDPÊײ¿µÄ×Ö¶ÎÓÃÓÚ·Ö·¢»òÕßУÑ飬²»ÐèҪ͸´«¸øÓ¦ÓóÌÐò¡£
ʹÓÃUDPÌ×½Ó×Ö¿ª·¢µÄÍøÂçÓ¦ÓÃServer/Client£¬ÍøÂçIOÏà¹Ø²Ù×÷ºÍÁ÷³ÌÈçÏÂͼËùʾ£º

UDPÌ×½Ó×Ö±à³Ì
|