Aling feature ang bentahe ng udp transport protocol. Tingnan kung ano ang "UDP" sa ibang mga diksyunaryo. Layunin ng udp packet fields
Ang UDP ay isang simpleng protocol at may partikular na saklaw. Una sa lahat, ito ay mga pakikipag-ugnayan ng client-server at multimedia. Gayunpaman, karamihan sa mga application sa Internet ay nangangailangan ng maaasahan at pare-parehong pagpapadala. Hindi natutugunan ng UDP ang mga kinakailangang ito, kaya kailangan ng ibang protocol. Ang protocol na ito ay tinatawag na TCP at ang workhorse ng Internet.
Mga Pangunahing Kaalaman sa TCP
Ang TCP (Transmission Control Protocol) ay partikular na idinisenyo upang magbigay ng maaasahang end-to-end na byte stream sa isang hindi mapagkakatiwalaang internet. Ang isang internetwork ay naiiba sa isang standalone na network dahil ang iba't ibang seksyon nito ay maaaring magkaroon ng ibang-iba na topology, bandwidth, latency value, laki ng packet, at iba pang mga parameter. Sa panahon ng pagbuo ng TCP, ang pangunahing pokus ay ang kakayahan ng protocol na umangkop sa mga katangian ng internetwork at fault tolerance kung sakaling magkaroon ng iba't ibang problema.
Ang TCP protocol ay inilarawan sa RFC 793. Sa paglipas ng panahon, iba't ibang mga error at kamalian ang natuklasan, at ang ilan sa mga kinakailangan ay nagbago. Detalyadong Paglalarawan ang mga paglilinaw at pagwawasto na ito ay ibinibigay sa RFC 1122. Ang mga extension ng protocol ay ibinibigay sa RFC 1323.
Ang bawat makina na sumusuporta sa TCP protocol ay may TCP transport entity, na maaaring isang library routine, proseso ng user, o bahagi ng kernel ng system. Sa alinmang kaso, pinamamahalaan ng transport entity ang mga daloy ng TCP at ang interface sa IP layer. Ang TCP entity ay tumatanggap ng mga stream ng data ng user mula sa mga lokal na proseso, pinaghiwa-hiwalay ang mga ito sa mga piraso na hindi hihigit sa 64 KB (sa pagsasagawa, ang numerong ito ay karaniwang katumbas ng 460 bytes ng data, na nagpapahintulot sa kanila na mailagay sa isang Ethernet frame na may mga IP at TCP header) , at ipinapadala ang mga ito sa hiwalay na mga IP datagram. Kapag dumating sa makina ang mga datagram ng IP na may data ng TCP, ipinapasa ang mga ito sa entity ng TCP, na nagpapanumbalik ng orihinal na byte stream. Para sa pagiging simple, kung minsan ay gagamitin namin ang "TCP" upang sumangguni sa isang TCP transport entity (isang piraso ng software) o isang TCP protocol (isang hanay ng mga panuntunan). Mula sa konteksto ay magiging malinaw kung ano ang ibig sabihin. Halimbawa, sa expression na "Nagpapadala ang user ng data ng TCP", natural na ipinahiwatig ang transport entity ng TCP.
Hindi ginagarantiyahan ng layer ng IP ang tamang paghahatid ng mga datagram, kaya nasa TCP na subaybayan ang mga nag-expire na timeout at, kung kinakailangan, muling magpadala ng mga packet. Ito ay nangyayari na ang mga datagram ay dumating sa maling pagkakasunud-sunod. Kinakailangan din ng TCP na mabawi ang mga mensahe mula sa mga naturang datagram. Kaya, ang TCP protocol ay idinisenyo upang magbigay ng pagiging maaasahan na pinapangarap ng maraming mga gumagamit at hindi ibinigay ng IP protocol.
Modelo ng serbisyo ng TCP
Sa puso ng serbisyo ng TCP ay ang tinatawag na mga socket (mga socket o endpoint) na nilikha ng parehong nagpadala at tagatanggap. Tinalakay ang mga ito sa seksyong Berkeley Sockets. Ang bawat socket ay may numero (address) na binubuo ng IP address ng host at isang 16-bit na numero na lokal sa host, na tinatawag na port. Ang isang port sa TCP ay tinatawag na isang TSAP address. Upang ma-access ang isang serbisyo ng TCP, ang isang tahasang koneksyon ay dapat na maitatag sa pagitan ng socket sa machine ng nagpadala at ng socket sa machine ng receiver.
Ang isang socket ay maaaring gamitin para sa maramihang mga koneksyon sa parehong oras. Sa madaling salita, ang dalawa o higit pang mga koneksyon ay maaaring wakasan sa parehong socket. Ang mga koneksyon ay nakikilala sa pamamagitan ng mga socket ID sa magkabilang dulo - (socket1, socket2). Hindi ginagamit ang mga virtual circuit number o iba pang identifier.
Ang mga numero ng port sa ibaba 1024, na tinatawag na mga sikat na port, ay inilalaan ng mga karaniwang serbisyo. Halimbawa, ang anumang proseso na gustong kumonekta sa isang host upang maglipat ng file gamit ang FTP protocol ay maaaring makipag-ugnayan sa port 21 ng destination host at sa gayon ay ma-access ang FTP daemon nito. Ang isang listahan ng mga sikat na port ay makukuha sa www.iana.org.
Maaari naming, siyempre, itali ang FTP daemon sa port 21 sa oras ng boot, pagkatapos ay itali ang telnet daemon sa port 23, at iba pa. , sa katunayan, karamihan idle time. Sa halip, karaniwan nang gumamit ng isang daemon, na tinatawag na inetd sa UNIX, na nagbubuklod sa maraming port at naghihintay para sa unang papasok na koneksyon. Kapag nangyari ito, gagawa ang inetd ng bagong proseso kung saan hinihiling ang naaangkop na daemon upang iproseso ang kahilingan. Kaya, ang inetd lamang ang patuloy na aktibo, ang iba ay tinatawag lamang kapag may trabaho para sa kanila. Ang Inetd ay may espesyal na configuration file kung saan matututo ito tungkol sa mga port assignment. Nangangahulugan ito na maaaring i-configure ng system administrator ang system upang ang mga persistent na daemon ay itali sa mga pinaka-abalang port (halimbawa, 80), at inetd sa iba pa.
Ilang reserved port |
||
Protocol |
Paggamit |
|
21 |
FTP |
Paglipat ng file |
23 |
telnet |
Malayong Pag-login |
25 |
SMTP |
|
69 |
TFTP |
Ang pinakasimpleng file transfer protocol |
79 |
daliri |
Paghahanap ng impormasyon ng gumagamit |
80 |
http |
World Wide Web |
110 |
POP-3 |
Malayong pag-access sa email |
119 |
NNTP |
Mga newsgroup |
Ang lahat ng koneksyon sa TCP ay full duplex at point to point. Nangangahulugan ang full duplex na maaaring maglakbay ang trapiko sa magkasalungat na direksyon sa parehong oras. Ang isang point-to-point na koneksyon ay nagpapahiwatig na mayroon itong dalawang endpoint. Ang TCP broadcast at multicast ay hindi suportado.
Ang isang koneksyon sa TCP ay isang byte stream, hindi isang stream ng mensahe. Ang mga hangganan sa pagitan ng mga mensahe ay hindi pinapanatili. Halimbawa, kung ang proseso ng pagpapadala ay nagsusulat ng apat na 512-byte na chunks ng data sa TCP stream, ang data na iyon ay maaaring maihatid sa proseso ng pagtanggap bilang apat na 512-byte na chunks, dalawang 1024-byte na chunks, isang 2048-byte na chunk, o ano pa man. . Walang paraan para matukoy ng tatanggap kung paano isinulat ang data.
Ang mga file sa isang UNIX system ay mayroon ding katangiang ito. Ang program na nagbabasa ng rayl ay hindi maaaring matukoy kung paano isinulat ang file na ito: harangan bawat bloke, byte bawat byte, o lahat nang sabay-sabay. Tulad ng kaso sa mga file ng system ng UNIX, ang mga programa ng TCP ay hindi alam o nagmamalasakit sa layunin ng mga byte. Ang isang byte ay isang byte lamang sa kanila.
Sa pagtanggap ng data mula sa application, ang TCP protocol ay maaaring ipadala ito kaagad o i-buffer ito upang maipadala kaagad. malaking bahagi data, sa iyong pagpapasya. Gayunpaman, kung minsan ang isang application ay nangangailangan ng data upang maipadala kaagad. Sabihin nating, halimbawa, na ang isang user ay nag-log in sa isang malayuang makina. Matapos niyang ipasok ang command at pinindot ang Enter key, mahalagang maihatid kaagad sa remote machine ang linyang pinapasok niya, at hindi i-buffer hanggang sa makapasok ang susunod na linya. Upang pilitin ang paglipat ng data nang walang pagkaantala, maaaring itakda ng isang application ang PUSH flag (push).
Ginamit ng ilang mas lumang application ang PUSH flag bilang separator ng mensahe. Bagama't minsan gumagana ang trick na ito, hindi lahat ng pagpapatupad ng TCP protocol ay nagpapasa ng PUSH flag sa tumatanggap na application. Bilang karagdagan, kung bago ang unang packet na may PUSH flag set ay ipinadala sa linya, ang TCP entity ay makakatanggap ng ilang higit pang mga naturang packet (iyon ay, ang output line ay abala), ang TCP entity ay magkakaroon ng karapatang ipadala ang lahat ng data na ito. bilang isang solong datagram, hindi hinahati ang mga ito sa magkakahiwalay na bahagi.
Ang panghuling tampok ng serbisyo ng TCP na dapat banggitin ay ang agarang data. Kapag pinindot ng isang interactive na user ang Delete o Ctrl-C key upang i-abort ang isang remote na proseso na nagsimula, ang pagpapadala ng application ay naglalagay ng control information sa output stream at ipinapasa ito sa TCP service kasama ang URGENT (urgent) flag. Ang flag na ito ay nagiging sanhi ng TCP entity na huminto sa pagkuha ng data at agad na ilipat sa network ang lahat ng mayroon ito para sa koneksyon na ito.
Kapag dumating ang apurahang data sa patutunguhan nito, naaantala ang pagtanggap ng application (iyon ay, "nakakatanggap ng signal," sa terminolohiya ng UNIX), pagkatapos nito ay mababasa nito ang data mula sa input stream at makakahanap ng apurahan sa kanila. Ang pagtatapos ng apurahang data ay minarkahan upang makilala ng application kung saan ito magtatapos. Ang simula ng agarang data ay hindi minarkahan. Kailangang malaman ito ng app. Ang ganitong pamamaraan ay isang krudo na mekanismo ng pagbibigay ng senyas, na iniiwan ang lahat ng iba pa sa aplikasyon.
TCP protocol
Tatalakayin ng seksyong ito ang TCP protocol sa sa mga pangkalahatang tuntunin. Sa susunod na seksyon, tatalakayin natin ang header ng protocol, field by field.
Ang pangunahing katangian ng TCP, na tumutukoy sa buong istraktura ng protocol, ay na sa isang koneksyon sa TCP, ang bawat byte ay may sariling 32-bit na sequence number. Sa mga unang taon ng Internet, ang pangunahing rate ng paglipat ng data sa pagitan ng mga router sa mga naupahang linya ay 56 Kbps. Ang isang host na patuloy na nagtutulak ng data sa pinakamabilis na rate ay aabutin ng higit sa isang linggo para sa mga numero ng pagkakasunud-sunod na maging ganap na bilog. Sa kasalukuyang bilis, ang mga numero ng pagkakasunud-sunod ay maaaring maubos nang napakabilis, higit pa sa susunod. Ang mga hiwalay na 32-bit na sequence number ay ginagamit para sa mga kumpirmasyon at para sa mekanismo ng sliding window, na tatalakayin din sa ibang pagkakataon.
Ang pagpapadala at pagtanggap ng mga entity ng TCP ay nagpapalitan ng data sa anyo ng mga segment. Ang isang segment ay binubuo ng isang nakapirming 20-byte na header (kasama ang isang opsyonal na bahagi) na maaaring sundan ng mga byte ng data. Ang laki ng mga segment ay tinutukoy ng TCP software. Maaari itong pagsamahin ang data na nakuha bilang isang resulta ng ilang mga operasyon ng pagsulat sa isang segment, o, sa kabaligtaran, ipamahagi ang resulta ng isang pagsulat sa ilang mga segment. Ang laki ng segment ay nililimitahan ng dalawang limitasyon. Una, dapat magkasya ang bawat segment, kabilang ang TCP header, sa 65,515-byte na payload field ng isang IP packet. Pangalawa, ang bawat network ay may Maximum Transfer Unit (MTU), at dapat magkasya ang bawat segment sa MTU. Sa pagsasagawa, ang laki ng maximum transmission unit ay karaniwang 1500 bytes (naaayon sa laki ng Ethernet payload field) at sa gayon ay tumutukoy ng pinakamataas na limitasyon sa laki ng segment.
Ang pangunahing protocol na ginagamit ng mga TCP entity ay ang sliding window protocol. Kapag nagpapadala ng segment, magsisimula ang nagpadala ng timer. Kapag dumating ang isang segment sa patutunguhan nito, ang tumatanggap na TCP entity ay nagpapadala ng isang segment (na may data kung mayroong anumang ipapadala, o walang data) na may numero
pagkilala na katumbas ng sequence number ng susunod na inaasahang segment. Kung mag-time out ang pagkilala, ipapadala muli ng nagpadala ang segment.
Bagama't mukhang simple ang protocol na ito, may ilang mga detalye na dapat isaalang-alang nang mas detalyado. Maaaring dumating ang mga segment sa maling pagkakasunud-sunod. Kaya, halimbawa, ang isang sitwasyon ay posible kung saan ang mga byte 3072 hanggang 4095 ay dumating na, ngunit ang isang pagkilala para sa kanila ay hindi maipadala, dahil ang mga byte 2048 hanggang 3071 ay hindi pa natatanggap. Bilang karagdagan, ang mga segment ay maaaring magtagal sa network nang napakatagal na ang nagpadala ay nag-time out at muling ipinadala ang mga ito. Ang isang na-retransmit na segment ay maaaring may kasama na ng iba't ibang hanay ng mga fragment, kaya napakaingat na pangangasiwa ay kinakailangan upang matukoy ang mga byte number na natanggap na nang tama. Gayunpaman, dahil ang bawat byte sa stream ay natatanging tinukoy ng offset nito, ito ay isang tunay na gawain.
Ang TCP protocol ay dapat na kayang harapin ang mga problemang ito at malutas ang mga ito nang mahusay. Napakaraming pagsisikap ang ginawa sa pag-optimize ng pagganap ng mga stream ng TCP. Sa susunod na seksyon, tatalakayin natin ang ilang mga algorithm na ginagamit sa iba't ibang pagpapatupad ng TCP protocol.
Header ng segment ng TCP
Ang bawat segment ay nagsisimula sa isang 20-byte na nakapirming format na header. Maaaring sundan ito ng mga karagdagang field. Pagkatapos ng karagdagang mga patlang, hanggang sa 65 535 - 20 - 20 = 65 495 byte ng data ay matatagpuan, kung saan ang unang 20 byte ay ang IP header, at ang pangalawa ay ang TCP header. Ang mga segment ay maaari o hindi naglalaman ng data. Ang ganitong mga segment ay kadalasang ginagamit upang magpadala ng mga pagkilala at kontrol ng mga mensahe.
Isaalang-alang ang field ng TCP header ayon sa field. Ang mga field ng Destination Port at Sender Port ay mga identifier para sa mga lokal na endpoint ng koneksyon. Ang numero ng port, kasama ang IP address ng host, ay bumubuo ng isang natatanging 48-bit na endpoint identifier. Ang isang pares ng naturang source at destination identifier ay natatanging kinikilala ang isang koneksyon.
Ang mga field ng Sequence Number at Confirmation Number ay gumaganap ng kanilang normal na function. Tandaan na ang field ng Acknowledgment Number ay tumutukoy sa susunod na byte na inaasahan, hindi ang huling byte na natanggap. Parehong 32-bit dahil ang bawat byte ng data ay binibilang sa isang stream ng TCP.
Ang field ng TCP Header Length ay naglalaman ng haba ng TCP header na ipinahayag sa 32-bit na salita. Ang impormasyong ito ay kinakailangan dahil ang field na Opsyonal na Mga Patlang, at kasama nito ang buong header, ay maaaring may variable na haba. Sa pangkalahatan, tinutukoy ng field na ito ang offset mula sa simula ng segment hanggang sa field ng data, na sinusukat sa 32-bit na salita. Ito ay kapareho ng haba ng header.
Isang hindi nagamit na 6-bit na field ang sumusunod. Ang katotohanan na ang larangang ito ay nakaligtas sa loob ng isang-kapat ng isang siglo ay isang patunay kung gaano kahusay ang pag-iisip ng disenyo ng TCP.
Sinusundan ito ng anim na 1-bit na flag. Ang URG bit ay nakatakda sa 1 kung ginamit ang field ng Data Urgent Pointer, na naglalaman ng byte offset mula sa kasalukuyang byte sequence number hanggang sa lokasyon ng apurahang data. Ito ay kung paano ipinapatupad ang mga interrupt na mensahe sa TCP protocol. Tulad ng nabanggit na, tinitiyak lamang ng TCP protocol na ang signal ng user ay naihatid sa tatanggap, nang hindi interesado sa sanhi ng pagkaantala.
Kung ang ACK bit ay nakatakda sa 1, ang field ng Acknowledgment Number ay naglalaman ng makabuluhang data. Kung hindi, ang segment na ito ay hindi naglalaman ng isang pagkilala, at ang field ng numero ng pagkilala ay binabalewala lamang.
Ang PSH bit ay mahalagang PUSH flag, kung saan hinihiling ng nagpadala sa receiver na maghatid ng data sa application sa sandaling matanggap ang packet, sa halip na iimbak ito sa buffer hanggang sa mapuno ito. (Maaaring buffer ang receiver para sa higit na kahusayan.)
Ang RST bit ay ginagamit upang i-reset ang estado ng isang koneksyon na deadlock dahil sa pagkabigo ng host o iba pang dahilan. Ginagamit din ito upang tanggihan ang isang hindi wastong segment o isang pagtatangka na lumikha ng isang koneksyon. Kung nakatanggap ka ng isang segment na may RST bit set, may ilang problema.
Ang SYN bit ay ginagamit upang magtatag ng isang koneksyon. Ang kahilingan sa koneksyon ay may SYN bit na 1 at isang ACK bit na 0, na nangangahulugan na ang field ng pagkilala ay hindi ginagamit. Ang tugon sa kahilingang ito ay naglalaman ng isang pagkilala, kaya ang mga halaga ng mga bit na ito sa loob nito ay: SYN = 1, ACK- 1. Kaya, ang SYN bit ay ginagamit upang ipahiwatig ang CONNECTION REQUEST at CONNECTION ACCEPTED na mga segment, at ang ACK bit ay ginagamit upang makilala sila sa isa't isa.
Ang FIN bit ay ginagamit upang wakasan ang koneksyon. Ito ay nagpapahiwatig na ang nagpadala ay wala nang data na ipapadala. Gayunpaman, kahit na pagkatapos isara ang koneksyon, ang proseso ay maaaring magpatuloy na makatanggap ng data nang walang katiyakan. Ang mga segment na may FIN at SYN bits ay may mga sequence number upang matiyak na ang mga ito ay naisakatuparan sa tamang pagkakasunod-sunod.
Ang kontrol sa daloy sa TCP protocol ay isinasagawa gamit ang isang sliding window na may variable na laki. Ang patlang na Laki ng Window ay nagsasabi kung gaano karaming mga byte ang maaaring ipadala pagkatapos ng kinikilalang byte. Ang halaga ng field na Laki ng Window ay maaaring maging zero, na nangangahulugan na ang lahat ng byte hanggang sa Acknowledgment Number-1 ay natanggap na, ngunit ang tatanggap ay may ilang mga problema sa ngayon at hindi pa maaaring tanggapin ang natitirang mga byte. Ang pahintulot para sa karagdagang paghahatid ay maaaring makuha sa pamamagitan ng pagpapadala ng isang segment na may parehong halaga ng field ng Acknowledgment Number at isang non-zero na halaga ng field na Laki ng Window.
Sa ilang protocol, nauugnay ang mga frame acknowledgement sa mga pahintulot na magpatuloy sa paghahatid. Ang relasyon na ito ay bunga ng nakapirming laki ng sliding window sa mga protocol na ito. Sa TCP, ang mga pagkilala ay hiwalay sa mga pahintulot na maglipat ng data. Sa katunayan, maaaring sabihin ng receiver, "Nakatanggap ako ng mga byte hanggang k-ro, ngunit ayaw kong magpatuloy sa pagtanggap ng data sa ngayon." Ang paghihiwalay na ito (ipinahayag bilang isang sliding window na may variable na laki) ay nagbibigay sa protocol ng karagdagang flexibility. Tatalakayin natin ang aspetong ito nang mas detalyado sa susunod.
Ang Checksum field ay ginagamit upang mapabuti ang pagiging maaasahan. Naglalaman ito ng checksum ng header, data at pseudo header. Kapag nagsasagawa ng mga kalkulasyon, ang Checksum field ay nakatakda sa zero, at ang data field ay nilagyan ng zero byte kung ang haba nito ay isang kakaibang numero. Ang checksum algorithm ay idinaragdag lamang ang lahat ng 16-bit na salita sa dalawa's complement at pagkatapos ay kinukuwenta ang dalawa's complement ng buong kabuuan. Bilang resulta, kapag binasa ng receiver ang checksum ng buong segment, kasama ang Checksum field, ang resulta ay dapat na 0.
Ang pseudo-header ay naglalaman ng 32-bit na source at destination IP address, ang protocol number para sa TCP (6), at ang byte count para sa TCP segment (kabilang ang header). Ang pagsasama ng pseudo-header sa TCP checksum ay nakakatulong na matukoy ang mga maling naihatid na packet, bagama't sinisira nito ang hierarchy ng protocol dahil ang mga IP address dito ay kabilang sa IP layer, hindi sa TCP layer. Ginagamit ng UDP ang parehong pseudo-header para sa checksum.
Ang field na Opsyonal na Mga Patlang ay nagbibigay ng mga karagdagang opsyon na hindi sakop ng karaniwang header. Sa isa sa mga field na ito, maaaring tukuyin ng bawat host ang maximum na laki ng field ng payload na maaari nitong tanggapin. Kung mas malaki ang mga segment na ginamit, mas mahusay ang kahusayan, dahil binabawasan nito ang overhead ng 20-byte na mga header, ngunit hindi lahat ng host ay may kakayahang tumanggap ng napakalaking mga segment. MAAARING sabihin ng mga host sa isa't isa ang maximum na laki ng field ng payload sa panahon ng pag-setup ng koneksyon. Bilang default, ang laki na ito ay 536 bytes. Ang lahat ng mga host ay kinakailangang tumanggap ng mga segment ng TCP na 536 + 20 = 556 bytes. Ang bawat direksyon ay maaaring magkaroon ng sarili nitong maximum na laki ng field ng payload.
Para sa mga link na may mataas na bit rate at/o mataas na latency, masyadong maliit ang 64 KB na window. Kaya, para sa isang TK line (44.736 Mbps), ang isang buong window ay maaaring ilipat sa linya sa loob lamang ng 12 ms. Kung ang oras ng round trip ay 50 ms (na karaniwan para sa isang transcontinental optical cable), 3/4 ng oras ang nagpadala ay maghihintay para sa isang pagkilala. Kapag nakikipag-usap sa pamamagitan ng satellite, mas malala ang sitwasyon. Ang mas malaking laki ng window ay mapapabuti ang pagganap, ngunit pinipigilan ito ng 16-bit na field na Sukat ng Window. Iminungkahi ang RFC 1323 bagong parameter Isang window scale na maaaring magkasundo ang dalawang host kapag nagtatatag ng koneksyon. Binibigyang-daan ka ng numerong ito na ilipat ang field ng Window Size hanggang 14 bits pakaliwa, na nagpapahintulot sa laki ng window na lumawak sa 230 bytes (1 GB). Karamihan sa mga pagpapatupad ng TCP protocol ay kasalukuyang sumusuporta sa tampok na ito.
Ang isa pang posibilidad, na iminungkahi sa RFC 1106 at malawakang ginagamit ngayon, ay ang paggamit ng selective replay protocol sa halip na mag-backtrack sa n. Kung ang destinasyon ay makakatanggap ng isang masamang segment at pagkatapos malaking bilang ng mabuti, ang normal na TCP protocol ay magtatapos at muling ipapadala ang lahat ng hindi kinikilalang mga segment, kabilang ang mga natanggap nang tama. Iminungkahi ng RFC 1106 ang paggamit ng mga negatibong pagkilala (NAK), na nagpapahintulot sa tatanggap na humiling ng isang segment o maramihang mga segment. Sa pagtanggap nito, maaaring kilalanin ng receiving side ang lahat ng data na nakaimbak sa buffer, kaya nababawasan ang dami ng muling ipinadalang data.
User Datagram Protocol - UDP
UDP protocol ay isa sa dalawang transport layer protocol na ginagamit sa TCP/IP protocol stack. Pinapayagan ng UDP ang isang application na magpadala ng mga mensahe nito sa network na may kaunting overhead na nauugnay sa pag-convert ng mga protocol ng layer ng application sa IP. Gayunpaman, sa parehong oras, programa ng aplikasyon ito mismo ang dapat mag-ingat sa pagkumpirma na ang mensahe ay naihatid na sa destinasyon nito. Ang header ng UDP datagram (mensahe) ay may form na ipinapakita sa Figure 2.10.
kanin. 2.10. UDP na istraktura ng header ng mensahe
Ang data unit ng UDP protocol ay tinatawag na UDP packet o isang user datagram. Ang isang UDP packet ay binubuo ng isang header at isang data field na naglalaman ng application layer packet. Ang header ay may simpleng format at binubuo ng apat na dalawang-byte na field:
UDP source port - numero ng port ng proseso ng nagpadala,
UDP destination port - numero ng port ng proseso ng patutunguhan,
Haba ng mensahe ng UDP - haba ng UDP packet sa bytes,
UDP checksum - UDP packet checksum
Hindi lahat ng field sa isang UDP packet ay dapat punan. Kung ang datagram na ipinapadala ay hindi nangangailangan ng tugon, ang mga zero ay maaaring ilagay sa lugar ng address ng nagpadala. Maaari mo ring tanggihan na kalkulahin ang checksum, gayunpaman, pakitandaan na ang IP protocol ay kinakalkula ang checksum para lamang sa header ng IP packet, hindi pinapansin ang field ng data.
Ang mga port sa header ay tumutukoy sa UDP protocol bilang isang multiplexer na nagbibigay-daan sa iyong mangolekta ng mga mensahe mula sa mga application at ipadala ang mga ito sa layer ng protocol. Sa kasong ito, ang application ay gumagamit ng isang partikular na port. Ang mga application na nakikipag-ugnayan sa network ay maaaring gumamit ng iba't ibang port, na makikita sa packet header. May kabuuang 216 iba't ibang port ang maaaring tukuyin. Ang unang 256 port ay itinalaga sa tinatawag na "mga kilalang serbisyo", na kinabibilangan, halimbawa, UDP port 53, na itinalaga sa serbisyo ng DNS.
Patlang Ang haba tumutukoy sa kabuuang haba ng mensahe. Patlang Checksum nagsisilbing kontrolin ang integridad ng data. Dapat pangalagaan ng isang application na gumagamit ng UDP protocol ang integridad ng mismong data sa pamamagitan ng pag-parse ng Checksum at Length field. Bilang karagdagan, kapag nagpapalitan ng data sa pamamagitan ng UDP, ang application program mismo ay dapat mag-ingat sa pagkontrol sa paghahatid ng data sa addressee. Karaniwang nakakamit ito sa pamamagitan ng pagpapalitan ng mga pagkilala sa paghahatid sa pagitan ng mga aplikasyon.
Ang pinakakilalang UDP-based na serbisyo ay ang BIND Domain Name Service at ang NFS Distributed File System. Kung babalikan ang halimbawa ng traceroute, ginagamit din ng program na ito ang UDP transport. Sa totoo lang, ito ay ang mensahe ng UDP na ipinadala sa network, ngunit ito ay gumagamit ng isang port na walang serbisyo, kung kaya't ang isang ICMP packet ay nabuo, na nakikita ang kakulangan ng serbisyo sa receiving machine kapag ang packet ay nakarating sa destinasyon. makina.
Transfer Control Protocol - TCP
Kung para sa kontrol ng kalidad ng aplikasyon ng paghahatid ng data sa network ay mahalaga, kung gayon sa kasong ito ang TCP protocol ay ginagamit. Ang protocol na ito ay tinatawag ding isang maaasahan, nakatuon sa koneksyon, at naka-orient sa stream na protocol. Bago talakayin ang mga katangian ng protocol na ito, isaalang-alang ang format ng isang datagram na ipinadala sa isang network (Larawan 2.11). Ayon sa istrukturang ito, ang TCP, tulad ng UDP, ay may mga port. Ang unang 256 na port ay itinalaga sa WKS, ang mga port 256 hanggang 1024 ay itinalaga sa mga serbisyo ng Unix, at ang iba ay maaaring gamitin ayon sa gusto mo. Sa field sequence number ang isang packet number ay tinukoy sa packet sequence na bumubuo sa buong mensahe, na sinusundan ng isang acknowledgement field Bilang ng Pagpapahalaga at iba pang impormasyon sa pagkontrol.
kanin. 2.11. Istruktura ng TCP packet
Ang source port (SOURS PORT) ay sumasakop ng 2 byte, kinikilala ang proseso ng nagpadala;
Ang DESTINATION PORT ay 2 byte at kinikilala ang patutunguhan na proseso;
Ang sequential number (SEQUENCE NUMBER) ay sumasakop ng 4 na byte, ay nagpapahiwatig ng byte number na tumutukoy sa offset ng segment na nauugnay sa stream ng data na ipinapadala;
Ang kinikilalang numero (ACNOWLEDGEMENT NUMBER) ay sumasakop ng 4 na byte, naglalaman ng maximum na byte na numero sa natanggap na segment, na nadagdagan ng isa; ang halagang ito ang ginagamit bilang isang resibo;
Haba ng Header (HLEN) ay 4 bits ang haba at nagpapahiwatig ng haba ng TCP segment header na sinusukat sa 32-bit na salita. Ang haba ng header ay hindi naayos at maaaring mag-iba depende sa mga halagang itinakda sa field na Mga Opsyon;
Ang Reserve (RESERVED) ay sumasakop ng 6 bits, ang field ay nakalaan para magamit sa ibang pagkakataon;
Ang mga code bit (CODE BITS) ay sumasakop ng 6 na bits, naglalaman ng impormasyon ng serbisyo tungkol sa uri ng segment na ito, na itinakda sa pamamagitan ng pagtatakda ng kaukulang mga bit ng field na ito sa isa:
URG - agarang mensahe;
ACK - resibo para sa natanggap na segment;
PSH - humiling na magpadala ng mensahe nang hindi naghihintay na mapunan ang buffer;
RST - kahilingan sa pagbawi ng koneksyon;
SYN - mensaheng ginagamit upang i-synchronize ang mga counter ng ipinadalang data kapag nagtatatag ng isang koneksyon;
Ang FIN ay isang senyales na naabot na ng nagpapadalang bahagi ang huling byte sa stream ng ipinadalang data.
Window (WINDOW) occupies 2 bytes, naglalaman ng ipinahayag na halaga ng laki ng window sa bytes;
Ang Checksum (CHECKSUM) ay sumasakop ng 2 byte, na kinakalkula bawat segment;
Ang Urgent Pointer (URGENT POINTER) ay sumasakop ng 2 byte, na ginagamit kasabay ng URG code bit, ay nagpapahiwatig ng pagtatapos ng data na dapat na agarang matanggap sa kabila ng buffer overflow;
Mga Opsyon (OPTIONS) - ang field na ito ay may variable na haba at maaaring wala sa kabuuan, ang maximum na halaga ng field ay 3 bytes; ginagamit upang malutas ang mga pantulong na problema, halimbawa, kapag pumipili ng maximum na laki ng segment;
Ang padding (PADDING) ay maaaring may variable na haba, ay isang dummy field na ginagamit upang dalhin ang laki ng header sa isang integer na bilang ng mga 32-bit na salita.
Ang pagiging maaasahan ng TCP ay nakasalalay sa katotohanang inuulit ng pinagmumulan ng data ang kanilang pagpapadala, maliban kung ito ay nakatanggap ng kumpirmasyon mula sa patutunguhan sa loob ng isang tiyak na tagal ng panahon na sila ay matagumpay na natanggap. Ang mekanismong ito ay tinatawag Positibong Assumption na may Retransmission (PAR). Gaya ng nauna naming tinukoy, ang yunit ng paglilipat (packet ng data, mensahe, atbp.) sa mga termino ng TCP ay tinatawag na isang segment. Mayroong checksum field sa TCP header. Kung nasira ang data sa panahon ng paghahatid, maaaring matukoy ito ng module na kumukuha ng mga segment ng TCP mula sa mga IP packet sa pamamagitan ng checksum. Ang sira na packet ay nawasak at walang ipinadala sa pinagmulan. Kung ang data ay hindi nasira, pagkatapos ay ipinapasa ito sa pagpupulong ng mensahe ng aplikasyon, at isang pagkilala ay ipinadala sa pinagmulan.
Ang oryentasyon ng koneksyon ay tinutukoy ng katotohanan na bago magpadala ng isang segment ng data, ang pinagmulan at patutunguhan na mga module ng TCP ay nagpapalitan ng impormasyon ng kontrol. Ang ganitong palitan ay tinatawag pakikipagkamay(literal na "pagkakamay"). Gumagamit ang TCP ng three-phase hand-shake:
Ang pinagmulan ay nagtatatag ng koneksyon sa receiver sa pamamagitan ng pagpapadala dito ng isang packet na may flag na Synchronize Sequence Numbers (SYN). Tinutukoy ng sequence number ang packet number sa mensahe ng application. Hindi ito kailangang maging 0 o isa. Ngunit ang lahat ng iba pang mga numero ay gagamitin ito bilang isang base, na magpapahintulot sa iyo na kolektahin ang mga pakete sa tamang pagkakasunud-sunod;
Ang tatanggap ay tumugon sa isang numero sa SYN acknowledgement field na tumutugma sa numerong itinakda ng pinagmulan. Bilang karagdagan, ang field ng Sequence Number ay maaari ding mag-ulat ng numero na hiniling ng pinagmulan;
Kinikilala ng source na natanggap nito ang patutunguhang segment at ipinadala ang unang bahagi ng data.
Sa graphically, ang prosesong ito ay ipinapakita sa Figure 2.12.
kanin. 2.12. Pagtatatag ng koneksyon sa TCP
Matapos maitatag ang koneksyon, ang pinagmulan ay nagpapadala ng data sa tatanggap at naghihintay para sa kumpirmasyon mula sa kanya tungkol sa kanilang resibo, pagkatapos ay ipapadala muli ang data, atbp., hanggang sa matapos ang mensahe. Nagtatapos ang mensahe kapag ang FIN bit ay nakatakda sa field ng mga flag, na nangangahulugang "wala nang data".
Ang streaming na katangian ng protocol ay tinutukoy ng katotohanan na ang SYN ay tumutukoy sa isang panimulang numero para sa pagbibilang ng mga naipadalang byte, hindi mga packet. Nangangahulugan ito na kung ang SYN ay itinakda sa 0 at 200 byte ang inilipat, ang numerong itinakda sa susunod na packet ay magiging 201, hindi 2.
Malinaw na ang streaming na kalikasan ng protocol at ang pangangailangan na kilalanin ang pagtanggap ng data ay nagbibigay ng problema sa data transfer rate. Upang malutas ito, gamitin ang "window" - ang field - window. Ang ideya ng paggamit ng window ay medyo simple: magpadala ng data nang hindi naghihintay ng kumpirmasyon ng kanilang resibo. Nangangahulugan ito na ang pinagmulan ay nagpapadala ng isang tiyak na halaga ng data na katumbas ng window nang hindi naghihintay ng kumpirmasyon ng kanilang resibo, at pagkatapos nito ay hihinto ang paghahatid at naghihintay para sa kumpirmasyon. Kung makakatanggap ito ng pagkilala para lamang sa isang bahagi ng ipinadalang data, magsisimula itong magpadala ng bagong bahagi mula sa numerong kasunod ng nakumpirmang isa. Sa graphically, ito ay ipinapakita sa Figure 2.13.
kanin. 2.13. TCP Data Transfer Mechanism
AT halimbawang ito ang window ay nakatakda sa 250 bytes ang lapad. Nangangahulugan ito na ang kasalukuyang segment ay ang segment na may SYN offset na 250 bytes. Gayunpaman, pagkatapos na mailipat ang buong window, ang pinagmulang TCP ay nakatanggap ng pagkilala sa pagtanggap lamang ng unang 100 byte. Samakatuwid, magsisimula ang paglipat sa byte 101, hindi byte 251.
Kaya, isinasaalang-alang namin ang lahat ng mga pangunahing katangian ng TCP protocol. Ito ay nananatiling lamang upang pangalanan ang pinakasikat na mga application na ginagamit ng TCP upang makipagpalitan ng data. Pangunahing ito ang TELNET at FTP, gayundin ang HTTP protocol, na siyang puso ng World Wide Web.
Huminto tayo saglit tungkol sa mga protocol at ibaling ang ating pansin sa isang mahalagang bahagi ng buong TCP / IP system bilang mga IP address.
Gumagamit ang UDP ng isang simpleng modelo ng paghahatid, na walang mga implicit na handshake, upang matiyak ang pagiging maaasahan, pag-order, o integridad ng data. Kaya, ang UDP ay nagbibigay ng isang hindi mapagkakatiwalaang serbisyo, at ang mga datagram ay maaaring dumating nang hindi maayos, madoble, o mawala nang walang bakas. Ipinahihiwatig ng UDP na ang pagsuri at remediation ng error ay hindi kinakailangan o dapat gawin ng application. Ang mga application na sensitibo sa oras ay madalas na gumagamit ng UDP, dahil mas mainam na mag-drop ng mga packet kaysa maghintay para sa mga naantalang packet, na maaaring hindi posible sa mga real-time na system. Kung kinakailangan upang iwasto ang mga error sa layer ng interface ng network, maaaring gamitin ng application ang TCP o SCTP, na idinisenyo para sa layuning ito.
Ang katangian ng UDP bilang stateless protocol ay kapaki-pakinabang din para sa mga server na tumutugon sa maliliit na query mula sa malaking bilang ng mga kliyente, tulad ng DNS at streaming media application tulad ng IPTV, Voice over IP, IP tunneling protocol, at maraming online na laro.
Mga port ng serbisyo
Ang UDP ay hindi nagbibigay ng mga garantiya sa paghahatid ng mensahe para sa itaas na layer ng protocol at hindi nag-iimbak ng estado ng mga ipinadalang mensahe. Para sa kadahilanang ito, minsan ay tinutukoy ang UDP bilang ang Unreliable Datagram Protocol.
Bago kalkulahin ang checksum, ang mensahe ng UDP ay nilagyan ng zero bits sa dulo sa isang haba na maramihang 16 bits (ang pseudo-header at padding zero bits ay hindi ipinadala kasama ng mensahe). Checksum field sa UDP header sa panahon ng pagkalkula ng checksum ipinadala ang mga mensahe ay itinuturing na null.
Upang kalkulahin ang checksum, ang pseudo-header at ang mensahe ng UDP ay nahahati sa mga salita (1 salita = 2 byte (octets) = 16 bits). Pagkatapos ay kalkulahin ang komplemento ng bitwise ng kabuuan ng lahat ng salita na may komplemento ng bit. Ang resulta ay nakasulat sa kaukulang field sa UDP header.
Ang isang checksum value na zero ay nakalaan, ibig sabihin, ang datagram ay walang checksum. Kung ang kalkuladong checksum ay katumbas ng zero, ang field ay puno ng mga binary.
Sa pagtanggap ng mensahe, kinakalkula muli ng tatanggap ang checksum (isinasaalang-alang na ang checksum field), at kung ang resulta ay isang binary na numero ng labing-anim na numero (iyon ay, 0xffff), kung gayon ang checksum ay itinuturing na nagtagpo. Kung ang kabuuan ay hindi nadagdagan (ang data ay nasira sa transit), ang datagram ay masisira.
Halimbawa ng pagkalkula ng checksum
Halimbawa, kalkulahin natin ang checksum ng ilang 16-bit na salita: 0x398a, 0xf802, 0x14b2, 0xc281 . Hanapin ang kanilang kabuuan na may bitwise complement.
0x398a + 0xf802 = 0x1318c → 0x318d
0x318d + 0x14b2 = 0x0463f → 0x463f
0x463f + 0xc281 = 0x108c0 → 0x08c1
Ngayon nakita namin ang bitwise na karagdagan sa yunit ng resulta na nakuha:
0x08c1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xf73e or else 0xffff − 0x08c1 = 0xf73e . Ito ang gustong checksum.
Kapag kinakalkula ang checksum, muling ginagamit ang isang pseudo-header, na ginagaya ang isang tunay na IPv6 header:
bits | 0 – 7 | 8 – 15 | 16 – 23 | 24 – 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Address ng pinagmulan | |||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||
128 | Address ng tatanggap | |||||||||||||||||||||||||||||||
160 | ||||||||||||||||||||||||||||||||
192 | ||||||||||||||||||||||||||||||||
224 | ||||||||||||||||||||||||||||||||
256 | Haba ng UDP | |||||||||||||||||||||||||||||||
288 | Mga zero | Susunod na pamagat | ||||||||||||||||||||||||||||||
320 | Pinagmulan na port | Destination Port | ||||||||||||||||||||||||||||||
352 | Ang haba | Suriin ang kabuuan | ||||||||||||||||||||||||||||||
384+ | Data |
Ang source address ay kapareho ng sa IPv6 header. Address ng tatanggap - huling tatanggap; kung ang IPv6 packet ay hindi naglalaman ng isang Routing header, ito ang magiging destination address mula sa IPv6 header, kung hindi, sa panimulang node, ito ang magiging address ng huling elemento ng routing header, at sa destination node, ang patutunguhang address mula sa IPv6- header. Ang halaga ng "Next Header" ay katumbas ng halaga ng protocol - 17 para sa UDP. UDP Length - Ang haba ng UDP header at data.
Mga solusyon sa pagiging maaasahan at kasikipan
Dahil sa kakulangan ng katatagan, ang mga aplikasyon ng UDP ay dapat na handa para sa ilang mga pagkalugi, pagkakamali, at pagdoble. Ang ilan sa mga ito (halimbawa, TFTP) ay maaaring magdagdag ng mga paunang mekanismo ng pagiging maaasahan ng application-layer kung kinakailangan.
Ngunit mas madalas ang gayong mga mekanismo ay hindi ginagamit ng mga aplikasyon ng UDP at kahit na nakakasagabal sa kanila. Ang streaming media, real-time na multiplayer na mga laro, at VoIP ay mga halimbawa ng mga application na kadalasang gumagamit ng UDP protocol. Sa mga partikular na application na ito, ang pagkawala ng packet ay karaniwang hindi isang malaking problema. Kung kailangan ng aplikasyon mataas na lebel pagiging maaasahan, maaari kang gumamit ng isa pang protocol (TCP) o mga erasure code.
Ang isang mas malubhang potensyal na problema ay na, hindi katulad ng TCP, ang mga application na nakabatay sa UDP ay hindi kinakailangang magkaroon ng mahusay na kontrol sa pagsisikip at mga mekanismo ng pag-iwas. Ang mga application na UDP na sensitibo sa pagsisikip na gumagamit ng malaking halaga ng magagamit na bandwidth ay maaaring makompromiso ang katatagan ng Internet.
Ang mga mekanismo ng network ay idinisenyo upang mabawasan ang mga posibleng epekto ng kasikipan sa ilalim ng hindi nakokontrol, mataas na bilis ng pagkarga. Ang mga elemento ng network tulad ng mga router na gumagamit ng packet queuing at flushing technique ay kadalasang ang tanging tool na magagamit upang pabagalin ang labis na trapiko ng UDP. Ang DCCP (Datagram Congestion Control Protocol) ay idinisenyo bilang isang bahagyang solusyon sa potensyal na problemang ito sa pamamagitan ng pagdaragdag ng mga mekanismo sa end host upang subaybayan ang congestion para sa mga high-speed na stream ng UDP tulad ng streaming media.
Mga aplikasyon
Maraming pangunahing application sa Internet ang gumagamit ng UDP, kabilang ang DNS (kung saan ang mga query ay dapat na mabilis at binubuo lamang ng isang query na sinusundan ng isang solong response packet), Simple Network Management Protocol (SNMP), Routing Information Protocol (RIP), Dynamic Host Configuration (DHCP) .
Ang trapiko ng boses at video ay karaniwang ipinapadala gamit ang UDP. Ang mga real-time na video at audio streaming protocol ay idinisenyo upang pangasiwaan ang random na pagkawala ng packet upang ang kalidad ay bahagyang bumaba sa halip na mahabang pagkaantala kapag ang mga nawawalang packet ay muling ipinadala. Dahil parehong gumagana ang TCP at UDP sa parehong network, napansin ng maraming kumpanya na ang kamakailang pagtaas sa trapiko ng UDP dahil sa mga real-time na application na ito ay humahadlang sa pagganap ng mga TCP application tulad ng mga database system o accounting. Dahil ang parehong negosyo at real-time na mga aplikasyon ay mahalaga sa mga kumpanya, ang pagbuo ng mga de-kalidad na solusyon sa isang problema ay nakikita ng ilan bilang isang pangunahing priyoridad.
Paghahambing ng UDP at TCP
Ang TCP ay isang protocol na nakatuon sa koneksyon, na nangangahulugan na ang isang "pagkakamay" ay kinakailangan upang magtatag ng isang koneksyon sa pagitan ng dalawang host. Kapag naitatag na ang isang koneksyon, maaaring magpadala ang mga user ng data sa parehong direksyon.
- pagiging maaasahan- Pinamamahalaan ng TCP ang pagkilala, muling pagpapadala, at timeout ng mga mensahe. Maramihang mga pagtatangka ang ginawa upang maihatid ang mensahe. Kung mawala ito sa daan, muling hihilingin ng server ang nawalang bahagi. Sa TCP, walang nawawalang data, o (sa kaso ng maraming timeout) ang mga nag-drop na koneksyon.
- kaayusan- kung magkasunod na ipinadala ang dalawang mensahe, unang makakarating ang unang mensahe sa tatanggap na aplikasyon. Kung ang mga data chunks ay dumating sa maling pagkakasunud-sunod, ang TCP ay nagpapadala ng out-of-order na data sa buffer hanggang sa lahat ng data ay ma-order at maipasa sa application.
- kabigatan- Kailangan ng TCP ng tatlong packet para magtatag ng socket connection bago magpadala ng data. Sinusubaybayan ng TCP ang pagiging maaasahan at kasikipan.
- Threading- Ang data ay binabasa bilang isang stream ng mga byte, walang espesyal na notasyon para sa mga hangganan ng mensahe o mga segment na ipinadala.
Ang UDP ay isang mas simple, walang koneksyon, nakabatay sa mensahe na protocol. Ang mga uri ng protocol na ito ay hindi nagtatag ng isang nakalaang koneksyon sa pagitan ng dalawang host. Ang komunikasyon ay nakakamit sa pamamagitan ng pagpasa ng impormasyon sa isang direksyon mula sa pinagmulan patungo sa destinasyon nang hindi sinusuri ang kahandaan o estado ng destinasyon. Gayunpaman, ang pangunahing bentahe ng UDP sa TCP ay nasa Voice over Internet Protocol (Voice over IP, VoIP) na mga application, kung saan ang anumang "pagkakamay" ay makakasagabal sa magandang komunikasyon ng boses. Sa VoIP, ipinapalagay na ang mga end user ay magbibigay ng anumang kinakailangang real-time na pagkilala na ang isang mensahe ay natanggap.
- Hindi mapagkakatiwalaan- kapag ang isang mensahe ay ipinadala, ito ay hindi alam kung ito ay makakarating sa kanyang patutunguhan - ito ay maaaring mawala sa daan. Walang ganoong mga konsepto gaya ng pagkilala, muling pagpapadala, pag-timeout.
- kaguluhan- kung ang dalawang mensahe ay ipinadala sa parehong tatanggap, kung gayon ang pagkakasunud-sunod ng kanilang pagkamit ng layunin ay hindi mahulaan.
- kagaanan- walang pag-order ng mga mensahe, walang pagsubaybay sa koneksyon, atbp. Ito ay isang maliit na layer ng transportasyon na binuo sa IP.
- mga datagram- Ang mga pakete ay ipapadala nang paisa-isa at sinusuri ang integridad lamang kung dumating na ang mga ito. Ang mga packet ay may tinukoy na mga hangganan na iginagalang sa pagtanggap, ibig sabihin, ang isang read operation sa receiving socket ay magbabalik ng mensahe gaya ng orihinal na ipinadala nito.
- Walang overload control- Ang UDP mismo ay hindi umiiwas sa pagsisikip. Posible para sa mga application na may mataas na bandwidth na maging sanhi ng pagbagsak ng congestion maliban kung nagpapatupad sila ng mga kontrol sa layer ng application.
Mga link sa mga RFC
- RFC 768 - User Datagram Protocol
- RFC 2460 - Bersyon 6 ng Detalye ng Internet Protocol (IPv6)
- RFC 2675 - IPv6 Jumbograms
- RFC 4113 - Base ng Impormasyon sa Pamamahala para sa UDP
- RFC 5405 - Mga Alituntunin sa Paggamit ng Unicast UDP para sa Mga Designer ng Application
Tingnan din
Mga link
- Kurose, J. F.; Ross, K. W. (2010). Computer Networking: Isang Top-Down Approach (5th ed.). Boston, MA: Edukasyon ng Pearson. ISBN 978-0-13-136548-3.
- Forouzan, B.A. (2000). TCP/IP: Protocol Suite, 1st ed. New Delhi, India: Tata McGraw-Hill Publishing Company Limited.
- [email protected]"UDP Protocol Overview". ipv6.com. Hinango noong 17 Agosto 2011.
- Clark, M.P. (2003). Mga Network ng Data IP at ang Internet, 1st ed. West Sussex, England: John Wiley & Sons Ltd.
- Postel, J. (Agosto 1980). RFC 768: User Datagram Protocol. Task Force sa Internet Engineering. Nakuha mula sa http://tools.ietf.org/html/rfc768
- Deering S. & Hinden R. (Disyembre 1998). RFC 2460: Internet Protocol, Bersyon 6 (IPv6) Detalye. Task Force sa Internet Engineering. Nakuha mula sa http://tools.ietf.org/html/rfc2460
- "Ang epekto ng UDP sa Mga Application ng Data". networkperformancedaily.com. Hinango noong 17 Agosto 2011.
- D. Comer. Internetworking gamit ang TCP/IP. Kabanata 11
Pangunahing TCP / IP Protocol ng OSI Model Layers (Listahan ng TCP at UDP Ports) | |
---|---|
Pisikal | |
ducted | |
network | |
Transportasyon | |
session | |
Representasyon | |
User Datagram Protocol (UDP)(User Datagram Protocol) ay isang TCP/IP protocol na tinukoy sa RFC 768, "User Datagram Protocol (UDP)". Ginagamit ang UDP sa halip na TCP para sa mabilis at hindi mapagkakatiwalaang transportasyon ng data sa pagitan ng mga TCP/IP host.
UDP protocol nagbibigay ng serbisyong walang koneksyon, kaya hindi ginagarantiya ng UDP ang paghahatid o pagkakasunud-sunod para sa anumang datagram. Ang isang host na nangangailangan ng maaasahang komunikasyon ay dapat gumamit ng alinman sa TCP protocol o isang programa na susubaybay sa pagkakasunud-sunod ng mga datagram at kinikilala ang pagtanggap ng bawat packet.
Ang mga application na sensitibo sa oras ay madalas na gumagamit ng UDP (data ng video), dahil mas mainam na mag-drop ng mga packet kaysa maghintay para sa mga naantalang packet, na maaaring hindi posible sa mga real-time na system. Gayundin, ang pagkawala ng isa o higit pang mga frame kapag nagpapadala ng data ng video sa pamamagitan ng UDP ay hindi masyadong kritikal, sa kaibahan sa pagpapadala ng mga binary file, kung saan ang pagkawala ng isang packet ay maaaring humantong sa pagbaluktot ng buong file. Ang isa pang bentahe ng UDP protocol ay ang haba ng UDP header ay 4 bytes, habang ang TCP protocol ay 20 bytes.
Ang mga mensahe ng UDP ay naka-encapsulated at ipinadala bilang mga IP datagram.
UDP header
Ipinapakita ng figure ang mga field na nasa header ng UDP.
- Sender port - tinutukoy ng field na ito ang port number ng nagpadala. Ang halagang ito ay dapat na tukuyin ang port kung saan ipapadala ang tugon kung kinakailangan. Kung hindi, ang value ay dapat na 0. Kung ang source host ay isang kliyente, ang port number ay malamang na ephemeral. Kung ang pinagmulan ay isang server, kung gayon ang port nito ay magiging isa sa "kilalang".
- Destination Port - Ang field na ito ay kinakailangan at naglalaman ng destination port. Katulad ng source port, kung ang client ang destination host, ang port number ay ephemeral, kung hindi (ang server ang destination) ito ay isang "kilalang port".
- Haba ng datagram - isang field na tumutukoy sa haba ng buong datagram (header at data) sa mga byte. Ang minimum na haba ay katumbas ng haba ng header - 8 bytes. Sa teorya, ang maximum na laki ng field ay 65535 bytes para sa isang UDP datagram (8 bytes para sa header at 65527 para sa data). Ang aktwal na limitasyon sa haba ng data kapag gumagamit ng IPv4 ay 65507 (bilang karagdagan sa 8 byte bawat UDP header, kailangan ng isa pang 20 byte bawat IP header).
- Checksum - Ang checksum field ay ginagamit upang suriin ang header at data para sa mga error. Kung ang halaga ay hindi nabuo ng transmitter, kung gayon ang field ay puno ng mga zero.
Isaalang-alang ang istraktura ng heading UDP gamit ang Wireshark network analyzer:
Mga port ng UDP
Dahil ang ilang mga programa ay maaaring tumakbo sa parehong computer, upang maghatid ng isang UDP packet tiyak na programa, ang natatanging identifier o numero ng port ng bawat programa ay ginagamit.
Numero ng port ay isang kondisyon na 16-bit na numero mula 1 hanggang 65535 na nagsasaad kung aling programa ang nilalayon ng packet.
Ang mga UDP port ay nagbibigay ng kakayahang magpadala at tumanggap ng mga mensahe ng UDP. Ang UDP port ay gumagana bilang isang queue ng mensahe upang matanggap ang lahat ng datagrams na nakalaan para sa program na tinukoy ng protocol port number. Nangangahulugan ito na ang mga programa ng UDP ay maaaring makatanggap ng higit sa isang mensahe sa isang pagkakataon.
Lahat ng UDP port number na mas mababa sa 1024 ay nakareserba at nakarehistro sa Internet Assigned Numbers Authority (IANA).
Ang mga numero ng port ng UDP at TCP ay hindi nagsasapawan.
Ang bawat UDP port ay nakikilala sa pamamagitan ng isang nakalaan o kilalang numero ng port. Ang sumusunod na talahanayan ay nagpapakita ng isang bahagyang listahan ng mga kilalang UDP port number na ginagamit ng mga karaniwang UDP program.
Ang hanay ng mga protocol ng network para sa Internet. Sa UDP mga aplikasyon sa kompyuter ay maaaring magpadala ng mga mensahe (sa kasong ito ay tinatawag na datagrams) sa iba pang mga host sa isang IP network nang hindi nangangailangan ng isang naunang mensahe upang mag-set up ng mga espesyal na channel ng paghahatid o mga landas ng data. Ang protocol ay binuo ni David P. Reid noong 1980 at pormal na tinukoy sa RFC 768.
Gumagamit ang UDP ng isang simpleng modelo ng paghahatid, na walang mga implicit na handshake, upang matiyak ang pagiging maaasahan, pag-order, o integridad ng data. Kaya, ang UDP ay nagbibigay ng isang hindi mapagkakatiwalaang serbisyo, at ang mga datagram ay maaaring dumating nang hindi maayos, nadoble, o ganap na mawala nang walang bakas. Ang UDP ay nagpapahiwatig na ang pag-check at remediation ng error ay hindi kailangan o dapat gawin sa application. Ang mga application na sensitibo sa oras ay madalas na gumagamit ng UDP dahil mas mainam na mag-drop ng mga packet kaysa maghintay para sa mga naantalang packet, na maaaring hindi posible sa mga real-time na system. Kung kinakailangan upang iwasto ang mga error sa layer ng interface ng network, maaaring gamitin ng application ang TCP o SCTP, na idinisenyo para sa layuning ito.
Ang katangian ng UDP bilang stateless protocol ay kapaki-pakinabang din para sa mga server na tumutugon sa maliliit na query mula sa malaking bilang ng mga kliyente, gaya ng DNS at streaming/multimedia/streaming na mga application tulad ng IPTV, Voice over IP, IP tunneling protocol, at maraming online na laro.
Encyclopedic YouTube
-
Mga subtitle
1 / 5
✪ Mga port at pagpapasa/pagbubukas ng port. Mga tagubilin at paliwanag sa iyong mga kamay!
Mga port ng serbisyo
Ang UDP ay hindi nagbibigay ng mga garantiya sa paghahatid ng mensahe para sa upstream na protocol at hindi nag-iimbak ng estado ng mga ipinadalang mensahe. Para sa kadahilanang ito, minsan ay tinutukoy ang UDP bilang ang Unreliable Datagram Protocol.
Suriin ang kabuuan
Ang checksum field ay ginagamit upang suriin ang header at data para sa mga error. Kung ang halaga ay hindi nabuo ng transmitter, kung gayon ang field ay puno ng mga zero. Opsyonal ang field para sa IPv4.
Pagkalkula ng checksum
Ang paraan para sa pagkalkula ng checksum ay tinukoy sa RFC 1071.
Bago kalkulahin ang checksum, kung kakaiba ang haba ng mensahe ng UDP sa mga byte, ang mensahe ng UDP ay may palaman na zero byte sa dulo (ang pseudo-header at ang karagdagang zero byte ay hindi ipinadala kasama ng mensahe, ginagamit ang mga ito lamang kapag kinakalkula ang checksum). Ang field ng checksum sa header ng UDP ay ipinapalagay na zero sa panahon ng pagkalkula ng checksum.
Upang kalkulahin ang checksum, ang pseudo-header at ang mensahe ng UDP ay nahahati sa dalawang-byte na salita. Pagkatapos ang kabuuan ng lahat ng mga salita ay kinakalkula sa aritmetika ng inverse code (iyon ay, isang code kung saan ang isang negatibong numero ay nakuha mula sa isang positibong numero sa pamamagitan ng pag-invert ng lahat ng mga digit ng numero at mayroong dalawang mga zero: 0x0000 (na tinutukoy ng + 0) at 0xffff (na tinukoy ng -0)). Ang resulta ay nakasulat sa kaukulang field sa UDP header.
Ang halaga ng checksum na katumbas ng 0x0000 (+0 sa reverse code) ay nakalaan at nangangahulugan na ang checksum ay hindi kinakalkula para sa pagpapadala. Kung ang checksum ay kinakalkula at naging katumbas ng 0x0000, pagkatapos ay ang halaga na 0xffff (-0 sa reverse code) ay ipinasok sa checksum field.
Sa pagtanggap ng mensahe, kinakalkula muli ng receiver ang checksum (isinasaalang-alang na ang checksum field), at kung ang resulta ay -0 (iyon ay, 0xffff), ang checksum ay itinuturing na nag-converge. Kung ang kabuuan ay hindi nagtatagpo (ang data ay nasira sa panahon ng paghahatid, o ang checksum ay hindi wastong nakalkula sa bahagi ng pagpapadala), kung gayon ang desisyon sa karagdagang mga aksyon ay ginawa ng tumatanggap na bahagi. Bilang isang patakaran, sa karamihan sa mga modernong device na gumagana sa mga UDP / IP packet, may mga setting na nagbibigay-daan sa iyo na huwag pansinin ang mga naturang packet o laktawan ang mga ito para sa karagdagang pagproseso, anuman ang hindi tamang checksum.
Halimbawa ng pagkalkula ng checksum
Halimbawa, kalkulahin natin ang checksum ng ilang 16-bit na salita: 0x398a, 0xf802, 0x14b2, 0xc281 .
Upang gawin ito, maaari mo munang idagdag ang mga numero sa mga pares, na isinasaalang-alang ang mga ito bilang 16-bit na hindi naka-sign na mga numero, na sinusundan ng pagbawas sa isang karagdagang code sa pamamagitan ng pagdaragdag ng isa sa resulta, kung sa panahon ng karagdagan ay nagkaroon ng paglipat sa pinakamataas na (ika-17) bit (iyon ay, de facto, sa pamamagitan ng operasyong ito ay nagko-convert kami ng negatibong numero mula sa complementary to inverse code). O, pareho, maaari nating isaalang-alang na ang carry ay idinagdag sa hindi bababa sa makabuluhang digit ng numero.
0x398a + 0xf802 = 0x1318c → 0x318d (high order carry) 0x318d + 0x14b2 = 0x0463f → 0x463f (positibong numero) 0x463f + 0xc281 = 0xc281 = 0x1081 = 0x1081
Sa dulo, ang lahat ng mga piraso ng resultang numero ay baligtad
0x08c1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xf73e or else 0xffff − 0x08c1 = 0xf73e . Ito ang gustong checksum.
Kapag kinakalkula ang checksum, muling ginagamit ang isang pseudo-header, na ginagaya ang isang tunay na IPv6 header:
bits | 0 - 7 | 8 - 15 | 16 - 23 | 24 - 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Address ng pinagmulan | |||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||
128 | Address ng tatanggap | |||||||||||||||||||||||||||||||
160 | ||||||||||||||||||||||||||||||||
192 | ||||||||||||||||||||||||||||||||
224 | ||||||||||||||||||||||||||||||||
256 | Haba ng UDP | |||||||||||||||||||||||||||||||
288 | Mga zero | Susunod na pamagat | ||||||||||||||||||||||||||||||
320 | Pinagmulan na port | Destination Port | ||||||||||||||||||||||||||||||
352 | Ang haba | Suriin ang kabuuan | ||||||||||||||||||||||||||||||
384+ | Data |
Ang source address ay kapareho ng sa IPv6 header. Address ng tatanggap - huling tatanggap; kung ang IPv6 packet ay hindi naglalaman ng isang Routing header, ito ang magiging destination address mula sa IPv6 header, kung hindi, sa panimulang node, ito ang magiging address ng huling elemento ng routing header, at sa destination node, ang patutunguhang address mula sa IPv6- header. Ang halaga ng "Next Header" ay katumbas ng halaga ng protocol - 17 para sa UDP. UDP Length - Ang haba ng UDP header at data.
Mga solusyon sa pagiging maaasahan at labis na karga
Dahil sa kakulangan ng katatagan, ang mga aplikasyon ng UDP ay dapat na handa para sa ilang pagkawala, mga bug, at pagdoble. Ang ilan sa mga ito (halimbawa, TFTP) ay maaaring magdagdag ng mga elementarya na mekanismo para sa pagtiyak ng pagiging maaasahan sa layer ng aplikasyon kung kinakailangan.
Ngunit mas madalas ang gayong mga mekanismo ay hindi ginagamit ng mga aplikasyon ng UDP at kahit na nakakasagabal sa kanila. Ang streaming media, real-time na multiplayer na paglalaro, at VoIP ay mga halimbawa ng mga application na kadalasang gumagamit ng UDP protocol. Sa mga partikular na application na ito, ang pagkawala ng packet ay karaniwang hindi isang malaking problema. Kung kailangan ng application ng mataas na antas ng pagiging maaasahan, maaari kang gumamit ng isa pang protocol (TCP) o gumamit ng mga pamamaraan ng Erasure code. en tl).
Ang isang mas malubhang potensyal na problema ay na, hindi katulad ng TCP, ang mga application na nakabatay sa UDP ay hindi kinakailangang magkaroon ng mahusay na kontrol sa pagsisikip at mga mekanismo ng pag-iwas. Ang mga application na UDP na sensitibo sa pagsisikip na gumagamit ng malaking halaga ng magagamit na bandwidth ay maaaring makompromiso ang katatagan ng Internet.
Ang mga mekanismo ng network ay idinisenyo upang mabawasan ang mga posibleng epekto ng kasikipan sa ilalim ng hindi nakokontrol, mataas na bilis ng pagkarga. Ang mga elemento ng network tulad ng mga router na gumagamit ng packet queuing at flushing technique ay kadalasang ang tanging tool na magagamit upang pabagalin ang labis na trapiko ng UDP. Ang DCCP (Datagram Congestion Control Protocol) ay idinisenyo bilang isang bahagyang solusyon sa potensyal na problemang ito sa pamamagitan ng pagdaragdag ng mga mekanismo sa end host upang subaybayan ang congestion para sa mga high-speed na stream ng UDP tulad ng streaming media.
Mga aplikasyon
Maraming pangunahing application sa Internet ang gumagamit ng UDP, kabilang ang DNS (kung saan ang mga query ay dapat na mabilis at binubuo lamang ng isang query na sinusundan ng isang solong response packet), Simple Network Management Protocol (SNMP), Routing Information Protocol (RIP), Dynamic Host Configuration (DHCP) .
Ang trapiko ng boses at video ay karaniwang ipinapadala gamit ang UDP. Ang mga real-time na video at audio streaming protocol ay idinisenyo upang pangasiwaan ang random na pagkawala ng packet upang ang kalidad ay bahagyang bumaba sa halip na mahabang pagkaantala kapag ang mga nawawalang packet ay muling ipinadala. Dahil parehong gumagana ang TCP at UDP sa parehong network, napansin ng maraming kumpanya na ang kamakailang pagtaas sa trapiko ng UDP dahil sa mga real-time na application na ito ay humahadlang sa pagganap ng mga TCP application tulad ng mga database system o accounting. Dahil ang parehong negosyo at real-time na mga aplikasyon ay mahalaga sa mga kumpanya, ang pagbuo ng mga de-kalidad na solusyon sa isang problema ay nakikita ng ilan bilang isang pangunahing priyoridad.
Paghahambing ng UDP at TCP
Ang TCP ay isang protocol na nakatuon sa koneksyon, na nangangahulugan na ang isang "pagkakamay" ay kinakailangan upang magtatag ng isang koneksyon sa pagitan ng dalawang host. Kapag naitatag na ang isang koneksyon, maaaring magpadala ang mga user ng data sa parehong direksyon.
- pagiging maaasahan- Pinamamahalaan ng TCP ang pagkilala, muling pagpapadala, at timeout ng mga mensahe. Maramihang mga pagtatangka ang ginawa upang maihatid ang mensahe. Kung mawala ito sa daan, muling hihilingin ng server ang nawalang bahagi. Sa TCP, walang nawawalang data, o (sa kaso ng maraming timeout) ang mga nag-drop na koneksyon.
- kaayusan- kung magkasunod na ipinadala ang dalawang mensahe, unang makakarating ang unang mensahe sa tatanggap na aplikasyon. Kung ang mga data chunks ay dumating sa maling pagkakasunud-sunod, ang TCP ay nagpapadala ng out-of-order na data sa buffer hanggang sa lahat ng data ay ma-order at maipasa sa application.
- kabigatan- Kailangan ng TCP ng tatlong packet para magtatag ng socket connection bago magpadala ng data. Sinusubaybayan ng TCP ang pagiging maaasahan at kasikipan.
- Threading- Ang data ay binabasa bilang isang stream ng mga byte, walang espesyal na notasyon para sa mga hangganan ng mensahe o mga segment na ipinadala.
Ang UDP ay isang mas simple, walang koneksyon, nakabatay sa mensahe na protocol. Ang mga uri ng protocol na ito ay hindi nagtatag ng isang nakalaang koneksyon sa pagitan ng dalawang host. Ang komunikasyon ay nakakamit sa pamamagitan ng pagpasa ng impormasyon sa isang direksyon mula sa pinagmulan patungo sa destinasyon nang hindi sinusuri ang kahandaan o estado ng destinasyon. Sa Voice over Internet Protocol (Voice over IP, TCP/IP) na mga application, ang UDP ay may kalamangan sa TCP kung saan ang anumang "pagkakamay" ay makakasagabal sa magagandang komunikasyong boses. Sa VoIP, ipinapalagay na ang mga end user ay magbibigay ng anumang kinakailangang real-time na pagkilala na ang isang mensahe ay natanggap.
- Hindi mapagkakatiwalaan- kapag ang isang mensahe ay ipinadala, ito ay hindi alam kung ito ay makakarating sa kanyang patutunguhan - ito ay maaaring mawala sa daan. Walang ganoong mga konsepto gaya ng pagkilala, muling pagpapadala, pag-timeout.
- kaguluhan- kung ang dalawang mensahe ay ipinadala sa parehong tatanggap, kung gayon ang pagkakasunud-sunod ng kanilang pagkamit ng layunin ay hindi mahulaan.
- kagaanan- walang pag-order ng mensahe, walang pagsubaybay sa koneksyon, atbp. Ito ay isang maliit na layer ng transportasyon na idinisenyo sa IP.
- mga datagram- Ang mga pakete ay ipapadala nang paisa-isa at sinusuri ang integridad lamang kung dumating na ang mga ito. Ang mga packet ay may tinukoy na mga hangganan na iginagalang sa pagtanggap, ibig sabihin, ang isang read operation sa receiving socket ay magbabalik ng mensahe gaya ng orihinal na ipinadala nito.
- Walang overload control- Ang UDP mismo ay hindi umiiwas sa pagsisikip. Posible para sa mga application na may mataas na bandwidth na maging sanhi ng pagbagsak ng congestion maliban kung nagpapatupad sila ng mga kontrol sa layer ng application.