Ni ipi kati ya zifuatazo sio mfano wa kukokotoa. Mfano wa kazi. Ni vipengele gani vinavyotumika katika C?

Jedwali 4.3 linaonyesha muundo wa itifaki za teknolojia ya FDDI kwa mujibu wa mfano wa kumbukumbu OSI. Safu halisi na itifaki ndogo za MAC zimefafanuliwa safu ya kiungo.

Jedwali 4.3. Muundo wa itifaki katika teknolojia ya FDDI

Safu ya kimwili imegawanywa katika safu ndogo mbili: safu ndogo ya PHY (Physical Media Independent) na safu ndogo ya PMD (Kitegemezi cha Vyombo vya Habari vya Kimwili). Uendeshaji wa ngazi zote unadhibitiwa na itifaki ya usimamizi wa kituo cha SMT (Usimamizi wa Kituo). Safu ndogo ya PMD hutoa uwasilishaji wa data kutoka kituo kimoja hadi kingine kwa njia maalum ya kimwili, na safu ndogo ya PHY hufanya usimbaji na usimbaji wa data inayozunguka kati ya safu ndogo ya MAC na safu ndogo ya PMD, na pia hutoa muda wa ishara za habari.

Imetumika kwa Teknolojia za ATM Ngazi ya kimwili imegawanywa katika sublevels mbili: sublevel ya uratibu na mfumo wa maambukizi (Transmission Convergence, TC) na sublevel ya mazingira ya kimwili (Physical Medium - PM). Safu ndogo ya mazungumzo ya mfumo wa usambazaji hupakia seli zinazotoka kwenye safu ya juu ya muundo wa ATM hadi kwenye fremu za usafiri zinazopitishwa. Kwa mfano, ikiwa seli za ATM zinatumwa kupitia kiungo cha E3 (34 Mbit/s), lazima zijazwe kwenye sehemu ya data ya fremu ya E3. Katika kesi ambapo seli hupitishwa moja kwa moja kupitia mstari wa kimwili bila matumizi ya muafaka wa usafiri, ufungaji wa seli hauhitajiki. Katika kiwango hiki, hundi pia imehesabiwa, nk. Salaji ndogo ya kati ya kimwili inadhibiti kiwango cha uhamisho wa data na inawajibika kwa usawazishaji kati ya maambukizi na mapokezi. Katika meza 4.4 huorodhesha safu ndogo za safu halisi ya ATM.

Jedwali 4.4. Tabaka ndogo za ATM za Kimwili

Kwa sasa kuna mashirika matatu ambayo yanafafanua safu halisi ya teknolojia ya ATM: ANSI, ITU/CCITT, na Mijadala ya ATM.

ANSI T1.624 inafafanua vipimo vitatu vya safu ya kimwili kwa hali moja fiber optic cable, kulingana na teknolojia ya SONET: STS-1 (51.84 Mbit / s), STS-Zs (155.52 Mbit / s) na STS-12c (622.08 Mbit / s). Aidha, kiwango hiki kinabainisha utendakazi wa 44.736 Mbps (DS3) kwa kutumia itifaki ya PLCP (Physical Layer Convergence Protocol) kutoka. Kiwango cha IEEE 802.6.



Pendekezo la ITU 1.432 linafafanua vipimo viwili vya safu halisi kulingana na safu ya dijiti inayolandanishwa ya SDH; STM-1 (155.52 Mbit/s) na STM-4 (622.08 Mbit/s). Kwa sababu ya ukweli kwamba viwango vya STM-1 na STM-4 vinahusiana na viwango vya STS-3d na STS-12c vya teknolojia ya SONET, mwingiliano kati yao ni rahisi sana. Kwa kuongeza, kamati ya ITU imesanifisha vipimo vya ziada vya safu ya kimwili: DS1 (1.544 Mbit/s), E1 (2.048 Mbit/s), DS2 (6.312 Mbit/s), EZ (34.368 Mbit/s), DS3 (44.736 Mbit/ s) kwa kutumia PLCP na E4 (139.264 Mbit/s).

Jukwaa la ATM limefafanua vipimo vinne vya safu halisi za teknolojia ya ATM: DS3 (44.736 Mbit/s), 100 Mbit/s, 155 Mbit/s na 622 Mbit/s.

Safu ya kiungo cha data hutoa upitishaji wa data unaotegemewa kupitia chaneli halisi. Safu ya kiungo cha data hufanya kazi kwenye vizuizi vya data vinavyoitwa fremu. Mitandao ya ndani hutumia njia ya upokezaji iliyoshirikiwa. Kusudi kuu la safu ya kiungo ni kupokea sura kutoka kwa mtandao na kuituma kwenye mtandao. Wakati wa kufanya kazi hii, safu ya kiungo hufanya:

q anwani ya kimwili ya ujumbe unaotumwa;

q kufuata sheria za matumizi chaneli ya kimwili;

q utatuzi wa matatizo;

q usimamizi wa mtiririko wa habari.

Katika teknolojia ya ATM, safu ya kiungo cha data ya mfano wa OSI inalingana na safu ya ATM. Badala ya kushughulikia moja kwa moja, njia pepe na vitambulishi vya saketi hubadilishwa kuwa vichwa vya seli huku seli za taarifa zikipitia swichi za ATM. Pia imeongezwa kipengele kipya: kuzidisha na kuzidisha seli.

Njia mbili hutumiwa kupata mazingira kwenye mitandao ya ndani:

q njia ya ufikiaji bila mpangilio;

q njia ya ufikiaji wa ishara.

Njia ya ufikiaji bila mpangilio inategemea ukweli kwamba kituo chochote cha mtandao kinajaribu kupata njia ya upitishaji kwa wakati unaohitajika. Iwapo kituo kina shughuli nyingi, kituo hurudia majaribio ya ufikiaji hadi kiwe bila malipo. Mfano wa utekelezaji wa njia hii ni teknolojia ya Ethernet.

Njia ya kufikia tokeni inatumika katika mitandao ya Token Ring, ArcNet, FDDI na l00VG-AnyLan. Inategemea upitishaji wa ishara ya ufikiaji kutoka kituo kimoja cha mtandao hadi kingine. Baada ya kupokea ishara, kituo kina haki ya kusambaza taarifa zake.

Upekee wa njia hizi ni kwamba vituo vyote vinashiriki katika usambazaji kwa msingi sawa.

Teknolojia ya ATM hutumia njia ya yanayopangwa fasta kufikia njia ya upitishaji. Utekelezaji mwingi wa usafirishaji hutumia fremu za usafirishaji za ukubwa fulani ambamo seli za ATM hufungashwa.

Safu ya kiungo huhakikisha kwamba kila fremu inapitishwa kwa usahihi kwa kuongeza cheki kwenye fremu. Mpokeaji wa fremu huthibitisha usahihi wa data iliyopokelewa kwa kulinganisha hesabu za hundi zilizokokotolewa na kutumwa na fremu. Walakini, mpango huu hautumiki kila wakati. Kwa mfano, katika teknolojia ya ATM, uundaji wa uwanja wa kuangalia makosa katika kichwa cha seli kwenye upande wa kupeleka, pamoja na kugundua makosa na marekebisho kwenye upande wa kupokea, hutekelezwa kwa kiwango cha kimwili.

Kazi za safu ya kiungo zinatekelezwa imewekwa kwenye kompyuta adapta za mtandao na madereva sambamba, pamoja na vifaa mbalimbali vya mawasiliano: madaraja, swichi, routers. Vifaa hivi lazima:

q Wafanyakazi wa fomu. Katika kesi hii, kichwa kinaundwa na data iliyopokelewa kutoka ngazi ya juu imewekwa. Muafaka unaweza kuwa wa habari au huduma.

q Kuchambua na kuchakata muafaka.

q Pokea fremu kutoka kwa mtandao na utume fremu kwa mtandao. Katika teknolojia ya ATM, kichwa cha seli kinazalishwa na kuondolewa kwa kiwango hiki.

IEEE (Taasisi ya Wahandisi wa Umeme na Elektroniki) imependekeza toleo lingine, linalotumika sana la modeli ya OSI. Mfano wa IEEE hutofautiana kwa kuwa katika mitandao ya ndani safu ya kiungo cha data imegawanywa katika viwango vidogo viwili:

q Udhibiti wa Kiungo wa Kimantiki (LLC);

q Tabaka la Ufikiaji wa Vyombo vya Habari (MAC).

Safu ya LLC inawajibika kwa usambazaji wa kuaminika wa fremu kati ya vituo vya mtandao na mwingiliano na safu ya mtandao. Safu ya MAC iko chini ya safu ya LLC na hutoa ufikiaji wa kituo cha data. Safu ya LLC inatoa tabaka za juu uwezo wa kudhibiti ubora wa huduma. LLC hutoa aina tatu za huduma:

q Huduma bila uthibitisho wa utoaji na uanzishwaji wa uunganisho. Haihakikishi utoaji wa sura. Aina hii ya huduma inaitwa datagram. Inatumika zaidi katika programu zinazotumia itifaki za kiwango cha juu, ambazo zenyewe hutoa ulinzi wa makosa na usaidizi utiririshaji data;

q Huduma na kuanzisha uhusiano, uwezo wa kutoa kubadilishana kuaminika wafanyakazi;

q Huduma isiyo na muunganisho na uthibitisho wa uwasilishaji.

Kazi kuu ya safu ya MAC ni kutoa ufikiaji wa kituo. Katika ngazi hii inaundwa anwani ya kimwili kifaa kilichounganishwa kwenye chaneli. Anwani hii ya mahali pia inaitwa anwani ya MAC. Kila kifaa kwenye mtandao kinatambuliwa na anwani hii ya kipekee, ambayo imepewa wote violesura vya mtandao vifaa. Anwani ya MAC inaruhusu uelekezaji wa fremu kutoka kwa uhakika, upeperushaji anuwai, na utangazaji. Wakati wa kusambaza data kwenye mtandao, mtumaji huonyesha anwani ya MAC ya mpokeaji katika fremu inayotumwa.

Kwa kuongeza, safu ya MAC lazima ijadiliane hali ya duplex Safu ya LLC inayofanya kazi na safu ya mwili. Ili kufanya hivyo, huweka bafa fremu ili kuzisambaza hadi zinapofikiwa wakati kati inafikiwa.

Kazi za itifaki za safu ya kiungo hutofautiana kulingana na ikiwa itifaki hii kwa kusambaza habari ndani ya nchi au kwa mitandao ya kimataifa. Itifaki za safu ya kiungo katika mitandao ya ndani zinalenga matumizi ya njia ya upitishaji data iliyoshirikiwa kati ya kompyuta. Kwa hivyo, itifaki hizi zina safu ndogo ya ufikiaji wa media iliyoshirikiwa. Ingawa safu ya LAN inaweza kutoa fremu kati ya nodi zozote mbili za LAN, inafanya hivyo tu kwenye mtandao ulio na topolojia ya kiungo maalum, yaani topolojia ambayo iliundwa kwayo. KWA topolojia ya kawaida Itifaki zinazotumika na itifaki za safu ya kiungo cha mtandao wa eneo la karibu ni pamoja na: basi ya kawaida, pete na nyota.

Utumiaji wa njia ya pamoja hufanya taratibu za udhibiti wa mtiririko wa fremu zisiwe za lazima katika mitandao ya ndani. Mtandao wa ndani wa topolojia ya msingi hauwezi kuzidiwa na viunzi, kwani nodi za mtandao haziwezi kuanza kutuma fremu mpya kabla fremu ya awali kupokelewa na kituo lengwa.

Kipengele kingine cha itifaki za safu ya kiungo cha mtandao wa ndani ni matumizi makubwa ya mbinu ya datagram ya utoaji wa data. Hii inaelezwa ubora mzuri njia za mawasiliano ambazo mara chache hupotosha biti katika fremu zinazopitishwa.

Mifano ya itifaki za safu ya kiungo kwa mitandao ya eneo la karibu ni Token Gonga, Ethernet, Ethaneti ya haraka, l00VG-AnyLAN, FDDI.

Katika mitandao ya kimataifa, ambayo mara chache huwa na topolojia ya kawaida, safu ya kiungo cha data huhakikisha ubadilishanaji wa ujumbe kati ya kompyuta mbili za jirani zilizounganishwa na laini tofauti ya mawasiliano. Itifaki hizi za uhakika kwa uhakika ni pamoja na PPP, SLIP, LAP-B na LAP-D. Itifaki hizi hazitumii safu ndogo ya ufikiaji wa media, lakini zinahitaji taratibu za udhibiti wa mtiririko wa fremu kwa sababu swichi za kati zinaweza kuzidiwa wakati sauti ya trafiki iko juu sana.

Aidha, kutokana na shahada ya juu kelele njia za kimataifa Mbinu za mawasiliano katika itifaki hizi kwa kiasi kikubwa hutumia mbinu za upokezaji wa data zilizo na uanzishaji wa muunganisho wa awali na uhamishaji upya wa fremu iwapo kuna upotoshaji na hasara zake.

Katika teknolojia ya ATM, uunganisho unatekelezwa na utaratibu wa njia za kawaida na njia za kawaida zinazodhibitiwa katika ngazi ya ATM. Kila muunganisho una chaneli yake pepe na vitambulishi vya njia pepe. Katika kesi hii, njia moja ya kawaida inaweza kujumuisha kadhaa njia pepe wakati ni muhimu kuhamisha trafiki kutoka kwa watumiaji tofauti.

Sura ya 2 Tabaka la Kiungo Data

Utangulizi

Kutoka kwa Mchoro 1.4 inaweza kuonekana kuwa kazi kuu ya safu ya kiungo katika familia ya itifaki ya TCP/IP ni kutuma na kupokea (1) datagramu za IP kwa moduli ya IP, (2) maombi ya ARP na majibu ya moduli ya ARP, na. (3) Maombi ya RARP na majibu ya moduli ya RARP. TCP/IP inasaidia tabaka tofauti za kiunganishi, kulingana na aina gani ya maunzi ya mtandao inatumika: Ethernet, pete ya ishara, FDDI (Fiber Distributed Data Interface), RS-232 mistari ya mfululizo, na kadhalika.

Katika sura hii, tutaangalia kwa karibu safu ya kiungo cha Ethaneti, tabaka mbili maalum za kiunganishi za miingiliano ya serial (SLIP na PPP), na kiendesha loopback, ambayo iko katika karibu utekelezaji wote. Ethernet na SLIP ni safu za kiungo zinazotumika kwa mifano mingi katika kitabu hiki. Pia tutaangalia Kitengo cha Juu cha Usambazaji (MTU), ambacho ni sifa ya safu-unganishi ambayo tunarejelea mara nyingi katika sura hii na ifuatayo. Pia tutaonyesha baadhi ya mahesabu ambayo yanaweza kukusaidia kuchagua MTU kwa mstari wa serial.

Ethernet na IEEE 802 encapsulation

Neno Ethernet kawaida hurejelea kiwango kilichochapishwa mwaka wa 1982 na Digital Equipment Corp., Intel Corp., na Xerox Corp. Hivi sasa, hii ndiyo teknolojia kuu inayotumika katika mitandao ya ndani kwa kutumia TCP/IP. Ethernet hutumia mbinu ya ufikiaji inayoitwa CSMA/CD, ambayo inawakilisha Carrier Sense, Multiple Access, na Utambuzi wa Mgongano. Kubadilishana hufanyika kwa kasi ya 10 Mbit / sec, kwa kutumia anwani 48-bit.

Miaka michache baadaye, Kamati 802 ya Taasisi ya Wahandisi wa Umeme na Elektroniki ilichapisha viwango tofauti vya viwango. 802.3 inaelezea anuwai kamili ya mitandao ya CSMA/CD, 802.4 inaelezea mitandao ya kupitisha ishara, na 802.5 inaelezea mitandao ya pete ya Tokeni. Kawaida kwa wote ni kiwango cha 802.2, ambacho kinafafanua udhibiti wa kiungo wa kimantiki (LLC - Udhibiti wa kiungo cha mantiki) na ambayo ni ya kawaida kwa mitandao mingi ya 802. Kwa bahati mbaya, mchanganyiko wa 802.2 na 802.3 hufafanua miundo ya sura isipokuwa Ethernet (inaelezea maelezo yote. ya viwango vya IEEE 802) .

Katika ulimwengu wa TCP/IP, uwekaji datagram wa IP umefafanuliwa katika RFC 894 hadi Mitandao ya Ethernet na katika RFC 1042 kwa mitandao ya IEEE 802. Mahitaji ya Mwenyeji RFC huweka mahitaji yafuatayo kwenye kila kompyuta iliyounganishwa kwenye Mtandao kupitia kebo ya Ethaneti ya Mbps 10:

  1. Kompyuta lazima iweze kutuma na kupokea pakiti zilizofungwa kwa kutumia RFC 894 (Ethernet).
  2. Kompyuta lazima iweze kupokea pakiti za RFC 1042 (IEEE 802) zilizochanganywa na pakiti za RFC 894.
  3. Kompyuta lazima iweze kutuma pakiti kwa kutumia encapsulation ya RFC 1042. Ikiwa kompyuta inaweza kutuma aina zote mbili za pakiti, basi aina ya pakiti lazima iweze kusanidiwa na usanidi chaguo-msingi lazima uwekewe kwa pakiti za RFC 894.

Usimbaji unaotumika sana ni RFC 894. Mchoro 2.1 unaonyesha mbinu mbili tofauti za usimbaji. Nambari zilizo chini ya kila mraba kwenye takwimu ni saizi ya baiti.

Miundo yote miwili ya fremu hutumia umbizo la biti 48 (6-baiti) kuwakilisha anwani za chanzo na lengwa (802.3 huruhusu anwani za biti 16, lakini kwa kawaida anwani 48-bit hutumiwa). Hivi ndivyo tunavyoita anwani za vifaa kwenye maandishi. Itifaki za ARP na RARP (angalia Sura ya 4 na Sura ya 5) huanzisha ramani kati ya anwani za IP za biti 32 na anwani za maunzi 48-bit.

Baiti 2 zinazofuata ni tofauti katika miundo hii ya fremu. Sehemu ya urefu 802 ina idadi ya baiti zinazoifuata, lakini haina cheki mwishoni. Sehemu ya aina katika Ethernet inabainisha aina ya data inayoifuata. Katika sura ya 802, uga wa aina hiyo unaonekana baadaye kwenye kichwa cha Itifaki ya Ufikiaji wa Mtandao Ndogo (SNAP). Itifaki ya Ufikiaji) Kwa bahati nzuri, thamani zinazopatikana katika sehemu ya urefu wa 802 hazifanani kamwe na zile zinazopatikana katika uga wa aina ya Ethernet, kwa hivyo fomati mbili za fremu zinaweza kutofautishwa kwa urahisi.

Katika fremu ya Ethaneti, data huja mara moja baada ya uga wa aina, ambapo katika fremu 802 inafuatwa na baiti 3 za LLC 802.2 na baiti 5 za SNAP 802.2. Sehemu za DSAP (Pointi ya Kufikia Huduma Lengwa) na SSAP (Mahali pa Kufikia Huduma ya Chanzo) zote zimewekwa kuwa 0xAA. Sehemu ya ctrl imewekwa kuwa 3. Baiti 3 zinazofuata, msimbo wa shirika, zimewekwa kuwa 0. Kisha kuna uga wa aina ya 2-byte, sawa na tulivyoona katika umbizo la fremu ya Ethernet (thamani za ziada ambazo zinaweza kuonekana katika uwanja wa aina umeelezewa katika RFC 1340).

Sehemu ya hundi (CRC) hubainisha hitilafu zilizotokea wakati wa usafirishaji wa fremu (pia wakati mwingine huitwa FCS au mfuatano wa kuangalia fremu).

Kiwango cha chini cha ukubwa wa fremu kwa 802.3 na Ethaneti kinahitaji saizi ya data iwe angalau baiti 38 kwa baiti 802.3 au 46 za Ethaneti. Ili kukidhi hitaji hili, baiti za pedi wakati mwingine huingizwa ili kuhakikisha kuwa sura ni ya urefu unaofaa.

Tutakutana na ukubwa wa chini tena tunapoangalia harakati za pakiti pamoja na nyaya. Pia tutaangalia encapsulation ya Ethernet zaidi ya mara moja, kwa sababu labda ndiyo aina inayotumiwa sana ya encapsulation.

Kielelezo 2.1 IEEE 802.2/802.3 encapsulation (RFC 1042) na Ethernet encapsulation (RFC 894).

Ufungaji kamili

Mchoro 2.5 unaorodhesha baadhi ya kawaida thamani ya MTU, imechukuliwa kutoka RFC 1191. MTU hizi ni za viungo vya kumweka-kwa-point (kama vile SLIP au PPP), lakini si sifa ya kimaumbile ya njia ya upokezaji. Hiki ni kikwazo cha kimantiki ambacho huhakikisha muda wa kujibu wa kutosha kwa matumizi ya mazungumzo. Katika sehemu ya Sura ya 2 tutaangalia kizuizi hiki kinatoka wapi.

Katika sehemu ya "Amri ya netstat" ya Sura ya 3, tutatumia amri ya netstat kuamua MTU kwa kiolesura maalum.

Mtandao

MTU (baiti)

Hyperchannel
16 Mbit/s Token pete (IBM)
4 Mbps Tokeni pete (IEEE 802.5)
FDDI
Ethaneti
IEEE 802.3/802.2
X.25
Point-to-point (kwa kuchelewa kidogo)

Mchoro 2.5 Thamani za Kawaida za Kiwango cha Juu cha Usambazaji (MTU).

Usafirishaji MTU

Wakati kompyuta mbili kwenye mtandao mmoja zinawasiliana, MTU ya mtandao huo ni muhimu. Hata hivyo, wakati kompyuta mbili kwenye mitandao tofauti zinawasiliana, kila kiungo cha kati kinaweza kuwa na MTU tofauti. KATIKA kwa kesi hii Nini muhimu sio MTU ya mitandao miwili ambayo kompyuta zimeunganishwa, lakini MTU ndogo zaidi ya kituo chochote cha data kilicho kati ya kompyuta mbili. Inaitwa usafiri MTU (njia ya MTU).

Usafiri wa MTU kati ya wapangishi wowote wawili unaweza usiwe wa kudumu. MTU inategemea mzigo wa kituo kwa sasa. Pia inategemea njia. Njia inaweza isiwe ya ulinganifu (njia kutoka A hadi B inaweza kuwa tofauti kabisa na njia kutoka B hadi A), kwa hivyo MTU inaweza isiwe sawa kwa pande hizo mbili.

RFC 1191 inaeleza njia ya ugunduzi wa MTU. Tutaangalia jinsi utaratibu huu unavyofanya kazi baada ya kuelezea ICMP na mgawanyiko wa IP. Katika sehemu ya "ICMP Makosa Yasioweza Kufikiwa" ya Sura ya 11, tutaangalia kwa makini Hitilafu Isiyoweza Kufikiwa ya ICMP ambayo utaratibu huu hutumia, na katika sehemu ya "Kugundua Usafiri wa MTU kwa Kutumia Traceroute" ya Sura ya 11, tutaonyesha toleo la traceroute. inayotumia utaratibu wa ugunduzi wa MTU wa usafiri kuelekeza miadi. Sehemu za “Kuamua MTU wa Usafiri Unapotumia UDP” katika Sura ya 11 na “Kuamua MTU wa Usafiri” katika Sura ya 24 zinaonyesha jinsi UDP na TCP zinavyofanya kazi wakati utekelezaji unasaidia ugunduzi wa MTU.

Uhesabuji wa Mzigo wa Mstari wa Serial

Ikiwa kasi ya mstari ni 9600 bps, na 1 byte ni bits 8 pamoja na 1 ya kuanza na 1 ya kuacha, kasi ya mstari itakuwa 960 byte / sec. Kusambaza pakiti ya baiti 1024 kwa kasi hii itachukua 1066 ms. Ikiwa tunatumia chaneli ya SLIP kwa programu ya mazungumzo na wakati huo huo programu kama FTP inafanya kazi ambayo hutuma au kupokea pakiti 1024 za baiti, lazima tusubiri, kwani muda wa wastani wa kusubiri kifurushi cha maingiliano itakuwa 533 ms.

Hii ina maana kwamba pakiti yetu ya mazungumzo itatumwa kwenye kituo kabla ya pakiti nyingine yoyote "kubwa". Programu nyingi za SLIP hutoa mgawanyo wa pakiti kwa aina ya huduma, kutuma trafiki ya mazungumzo kabla ya trafiki ya data. Trafiki ya mazungumzo kawaida ni Telnet, Rlogin na sehemu ya kudhibiti ( amri maalum, lakini si data) FTP.

Kwa kawaida, mgawanyiko huu kwa huduma sio kamilifu. Haina athari kwa trafiki isiyoingiliana ambayo tayari imewekwa kwenye foleni kwa uwasilishaji (kwa mfano, na kiendeshi cha serial). Miundo mipya ya modemu zilizo na vihifadhi vikubwa na huruhusu trafiki isiyoingiliana kuakibishwa katika bafa ya modemu, ambayo pia huathiri kucheleweshwa kwa trafiki ya mazungumzo.

Kusubiri kwa 533 ms hakukubaliki kwa jibu la mazungumzo. Kwa mtazamo wa mambo ya kibinadamu, tunajua kuwa ucheleweshaji wa zaidi ya 100-200 ms haukubaliki [Jacobson 1990a]. Muda wa kusubiri unarejelea muda kati ya kutuma pakiti na kurejesha jibu (kawaida ni mwangwi wa mhusika).

Kupunguza MTU kwenye kiunga cha SLIP hadi 256 kunamaanisha kuwa muda wa juu zaidi ambao kiungo kinaweza kutumiwa na fremu moja ni 266 ms, na nusu ya hiyo (wastani wa muda wa kusubiri) ni 133 ms. Hii ni bora, lakini bado sio kamili. Sababu iliyotufanya kuchagua thamani hii (kama 64 na 128 kulinganisha) ni kutoa matumizi bora ya chaneli kwa uhamishaji wa data (kama vile wakati wa kuhamisha faili kubwa). Kwa upande wa fremu ya CSLIP ya 261-byte yenye kichwa cha 5-byte (256 byte za data), 98.1% ya mistari hutumiwa kwa maambukizi ya data na 1.9% kwa vichwa. Kupunguza MTU chini ya 256 hupunguza thamani ya juu kipimo data cha laini ambacho tunaweza kupokea tunapotuma data.

Thamani ya MTU ya 296 kwa kiungo cha uhakika kwa uhakika (Mchoro 2.5) inamaanisha baiti 256 za data na baiti 40 za vichwa vya TCP na IP. Kwa kuwa MTU ni thamani ambayo IP hujifunza kutoka kwa safu ya kiungo, thamani hii lazima ijumuishe TCP ya kawaida na vichwa vya IP. Hivi ndivyo IP hufanya maamuzi kuhusu kugawanyika. IP haijui chochote kuhusu ukandamizaji wa kichwa ambao CSLIP hufanya.

Hesabu yetu ya muda wa wastani wa kusubiri (nusu ya muda inachukua kusambaza saizi kubwa zaidi ya fremu) inatumika tu kwa kiungo cha SLIP (au kiungo cha PPP) ambacho kinatumika kubeba wasilianifu na trafiki ya data. Wakati trafiki tu inayoingiliana inabadilishwa, wakati wa upitishaji wa byte moja ya data katika kila mwelekeo (katika kesi ya kichwa kilichobanwa cha 5-byte) ni takriban 12.5 ms, kwa kasi ya 9600 bps. Hii iko vizuri ndani ya safu ya 100-200ms tuliyotaja hapo awali. Pia kumbuka kuwa kukandamiza vichwa kutoka kwa 40 hadi 5 byte hupunguza latency kwa byte kutoka 85 ms hadi 12.5 ms.

Kwa bahati mbaya, mahesabu haya si sahihi kabisa wakati urekebishaji wa makosa na ukandamizaji hutumiwa katika modemu. Mfinyazo katika modemu hupunguza idadi ya baiti zinazotumwa kupitia laini, lakini urekebishaji wa hitilafu unaweza kuongeza muda unaotumika kusambaza baiti hizo. Walakini, hesabu hizi hutupatia mahali pa kuanzia kufanya uamuzi mzuri.

Katika sura zinazofuata, tutatumia hesabu hizi kwa mistari ya mfululizo ili kubainisha baadhi ya thamani za saa ambazo hutumika wakati wa kusambaza pakiti kwenye mistari ya mfululizo.

Hitimisho fupi

Sura hii iliangalia kiwango cha chini kabisa cha familia Itifaki za mtandao, kiwango cha kiungo. Tuliangalia tofauti kati ya Ethernet na IEEE 802.2/802.3 encapsulations, na encapsulation ambayo hutumiwa katika SLIP na PPP. Kwa kuwa SLIP na PPP hutumiwa mara nyingi kwenye viungo vya polepole, hutoa mbinu za kubana sehemu za kawaida (ambazo karibu kila mara hazijabadilika). Hii inaboresha muda wa majibu.

Kiolesura cha nyuma kinapatikana katika miundo mingi. Kiolesura hiki kinaweza kufikiwa kupitia anwani maalum, kwa kawaida 127.0.0.1, au kwa kutuma datagramu za IP kwa mojawapo ya anwani za IP za mwenyeji. Data iliyotumwa kwenye kiolesura cha nyuma inachakatwa kikamilifu safu ya usafiri na IP wanapopita kwenye safu ya itifaki.

Tumeelezea sifa muhimu ya tabaka nyingi za kiungo, MTU, na dhana inayolingana ya usafiri wa MTU. Kwa kutumia MTU ya kawaida kwa mistari ya mfululizo, tulikokotoa ucheleweshaji wa muda uliopo kwenye viungo vya SLIP na CSLIP.

Sura hii inashughulikia chache tu za teknolojia za kawaida za kituo zinazotumiwa katika TCP/IP leo. Moja ya sababu kwa nini TCP/IP inatumiwa kwa mafanikio ni uwezo wake wa kufanya kazi kwa karibu teknolojia yoyote ya kituo.

Mazoezi

Ikiwa mfumo wako unaauni amri ya netstat(1) (ona Sura ya 3, sehemu ya "Amri ya netstat"), itumie kubainisha miingiliano kwenye mfumo wako na MTU zao.

Shirika la safu ya kiungo

Matatizo muhimu zaidi kutatuliwa kituo kiwango cha mfano mitandao(wakati mwingine kiwango hiki kinaitwa kiwango cha uhamisho wa data), ni kazi za kutoa fulani huduma kiwango cha mtandao. Huduma kuu ni uhamisho wa data kutoka kwa safu ya mtandao hadi kwa kusambaza kompyuta safu ya mtandao ya mashine ya kupokea. Mashine ya kutuma huendesha mchakato ambao huhamisha biti kutoka kwa safu ya mtandao hadi safu ya kiungo cha data kwa ajili ya kutumwa hadi kulengwa kwao. Kazi ya safu ya kiungo ni kusambaza bits hizi kwenye mashine ya kupokea ili ziweze kupitishwa kwenye safu ya mtandao ya mashine ya kupokea. Kimwili, data hupitishwa kupitia chaneli halisi za upokezaji, kama inavyoonyeshwa kimkakati katika mchele. 8.1.a. Walakini, kupitia itifaki za safu ya kiunga, njia ya data ya kawaida inaunganisha tabaka za kiunga za kompyuta inayotuma na kupokea ( mchele. 8.1.b).

Mchele. 8.1. Njia za upitishaji data: a - virtual; b - halisi

Itifaki za safu ya kiungo huelezea jinsi biti au alama za kimantiki zinazobebwa na safu halisi zinavyounganishwa kuwa zaidi vitengo vikubwawafanyakazi. Muundo wa sura ya jumla umeonyeshwa ndani mchele. 8.2. Kwa ujumla, kila sura ina kichwa, uwanja wa data Na trela(au inaitwa hivyo "kubadilisha kikomo") Usimamizi wa rasilimali watu ni moja wapo kazi muhimu zaidi kazi ya safu ya kiungo.

Mchele. 8.2. Muundo wa Mfumo wa Itifaki ya Tabaka la Kiungo cha Jumla

Safu ya kiungo inaweza kutoa huduma mbalimbali na seti yao inaweza kuwa tofauti kwa mifumo tofauti. Kwa kawaida yanazingatiwa chaguzi zifuatazo zinazowezekana:

1) huduma bila uthibitisho wa mapokezi ya sura na bila kuanzisha uhusiano;

2) huduma na uthibitisho wa mapokezi ya sura na bila kuanzisha uhusiano;

3) huduma na uthibitisho wa mapokezi ya sura na uanzishwaji wa uunganisho.

Huduma bila uthibitisho wa mapokezi ya sura na bila kuanzisha uhusiano ni kwamba mashine ya kupitisha hutuma fremu zinazojitegemea kwa mashine ya kupokea, na mashine ya kupokea haitume uthibitisho wa kupokelewa kwa fremu. Hakuna miunganisho iliyoanzishwa mapema na haijavunjwa baada ya fremu kupitishwa. Ikiwa fremu yoyote itapotea kwa sababu ya kuingiliwa kwa laini ya mawasiliano, hakuna jaribio linalofanywa kwenye safu ya kiungo cha data ili kuirejesha. Darasa hili huduma zinakubalika kwa kiwango cha chini sana cha makosa. Katika kesi hii, masuala yanayohusiana na urejeshaji wa data iliyopotea wakati wa maambukizi yanaweza kutumwa kwa viwango vya juu. Aina hii ya huduma pia hutumiwa katika mawasiliano ya wakati halisi (kwa mfano, sauti), ambapo ni vyema kupokea data iliyoharibika badala ya kuipokea kwa kuchelewa kwa muda mrefu. Huduma isiyokubaliwa na isiyo na muunganisho hutumiwa kwenye safu ya kiungo cha data katika mitandao mingi ya karibu.

Hatua inayofuata kuelekea kuongeza kuegemea ni huduma na uthibitisho wa mapokezi ya sura, lakini bila uanzishwaji wa uunganisho. Wakati wa kuitumia, uunganisho haujaanzishwa, lakini risiti ya kila sura imethibitishwa. Kwa hivyo, mtumaji anajua ikiwa fremu ilifika inakoenda ikiwa sawa. Ikiwa hakuna uthibitisho unaopokelewa ndani ya muda uliobainishwa, fremu inatumwa tena. Huduma hii hutumiwa katika kesi ya ubora wa chini, mistari ya mawasiliano ya bei nafuu na uwezekano mkubwa wa makosa, kwa mfano, katika mifumo ya wireless.

Huduma ngumu zaidi ambayo safu ya kiungo inaweza kutoa ni mwelekeo wa huduma kuanzisha muunganisho na uthibitisho wa mapokezi ya sura. Kwa njia hii, chanzo na lengwa huanzisha muunganisho kabla ya kusambaza data kwa kila mmoja. Kila fremu iliyotumwa imehesabiwa, na safu ya kiungo inahakikisha kwamba kila fremu iliyotumwa inapokelewa kwa kweli upande wa pili wa laini ya mawasiliano. Pia inahakikisha kwamba kila fremu inapokelewa mara moja tu na kwamba fremu zote zinapokelewa kwa mpangilio sahihi. Katika huduma isiyo na uhusiano, kwa upande mwingine, inawezekana kwamba ikiwa uthibitisho umepotea, sura hiyo hiyo itatumwa mara nyingi na kwa hiyo kupokea mara nyingi. Unapotumia huduma inayoelekezwa kwa uunganisho, uhamisho wa data una awamu tatu. Katika awamu ya kwanza, uunganisho umeanzishwa, na pande zote mbili zinaanzisha vigezo na vihesabio vinavyohitajika ili kufuatilia ni muafaka gani tayari umepokelewa na ambao bado haujapokelewa. Katika awamu ya pili, muafaka wa data hupitishwa. Hatimaye, katika awamu ya tatu, uunganisho umefungwa na vigezo vyote, buffers na rasilimali nyingine zinazotumiwa wakati wa uunganisho hutolewa.

Ili kutoa huduma kwa safu ya mtandao, safu ya kiungo cha data lazima itumie huduma zinazotolewa kwake na safu ya kimwili. Safu halisi huchukua mkondo wa biti mbichi na kujaribu kuusambaza hadi unakoenda. Uzi huu hauna kinga dhidi ya makosa. Idadi ya biti zilizopokelewa inaweza kuwa chini ya, sawa na, au nambari zaidi bits zinaa. Kwa kuongezea, maadili ya bits zilizopokelewa zinaweza kutofautiana na maadili ya zile zilizopitishwa. Safu ya kiungo lazima igundue makosa na, ikiwa ni lazima, isahihishe.

Kwa kawaida, safu ya kiungo hugawanya mtiririko kidogo katika fremu binafsi na kukokotoa kinachojulikana kama checksum kwa kila fremu. Wakati fremu inapofika kwenye marudio yake, ni angalia jumla kuhesabiwa tena. Ikiwa inatofautiana na ile iliyo kwenye sura, basi safu ya kiungo "inaelewa" kwamba hitilafu ilitokea wakati wa maambukizi ya sura na inachukua hatua zinazofaa (kwa mfano, inapuuza sura iliyoharibiwa na kutuma ujumbe wa kosa kwa mashine ya kutuma). Kugawanya mtiririko kidogo katika fremu za kibinafsi sio kazi rahisi sana. Njia moja ya kuweka fremu ni kuingiza vipindi vya muda kati ya viunzi, kama vile kuweka nafasi kati ya maneno katika maandishi. Hata hivyo, mitandao mara chache hutoa dhamana kwamba vipindi vya muda vitahifadhiwa wakati wa maambukizi ya data, kwa hiyo inawezekana kwamba vipindi hivi vitatoweka wakati wa maambukizi au, kinyume chake, vipindi vipya vitaongezwa. Kwa hiyo, mbinu za juu zaidi zimependekezwa ili kuongeza uaminifu wa maambukizi ya data. Miongoni mwao, njia maarufu zaidi za kuashiria mipaka ya sura ( malezi ya wafanyakazi), Vipi:



1) kuhesabu idadi ya wahusika;

2) matumizi ya byte za ishara na pedi za tabia;

3) matumizi ya kuanza na kuacha bits na stuffing kidogo;

4) matumizi ya ishara za safu ya mwili iliyokatazwa.

Mbinu ya kwanza ya kutunga hutumia sehemu katika kichwa ili kuonyesha idadi ya herufi kwenye fremu. Wakati safu ya kiungo kwenye mashine ya kupokea inapoona uwanja huu, inajua ni herufi ngapi zitafuata na hivyo huamua mwisho wa fremu ulipo. Hasara ya njia hii ni kwamba counter yenyewe inaweza kupotoshwa wakati wa maambukizi. Kisha mashine ya kupokea itapoteza maingiliano na haitaweza kutambua mwanzo wa fremu inayofuata. Hata kama cheki hailingani na mashine inayopokea "inaelewa" kwamba sura ilipokelewa vibaya, bado haitaweza kuamua ni wapi mwanzo wa fremu inayofuata. Kuomba uwasilishaji wa sura pia haina maana, kwani mashine inayopokea "haijui" ni herufi ngapi za kuruka kabla ya kuanza. kusambaza tena. Kwa sababu hii, njia ya kuhesabu wahusika sasa haitumiki.

Njia ya pili ya kutunga hutatua tatizo la kurejesha maingiliano baada ya kushindwa kwa kuashiria mwanzo na mwisho wa kila fremu na ka maalum. KATIKA Hivi majuzi itifaki nyingi zimebadilisha kutumia byte sawa katika visa vyote viwili, vinavyoitwa bendera. Kwa hivyo, ikiwa mpokeaji atapoteza usawazishaji, anahitaji tu kupata beti ya bendera ambayo inatambua mwisho wa fremu ya sasa. Baiti mbili za bendera zilizo karibu zinaonyesha kuwa fremu moja imeisha na nyingine imeanza. Hata hivyo, njia hii wakati mwingine husababisha matatizo makubwa wakati wa kutuma data ya binary kama vile misimbo ya kitu cha programu au nambari za pointi zinazoelea. Data iliyotumwa inaweza kuwa na mlolongo unaotumika kama beti ya bendera. Kutokea kwa hali kama hii kutavuruga usawazishaji. Njia moja ya kutatua tatizo ni kuongeza maalum tabia ya kutoroka(ishara ya kubadili msimbo - ESC) mara moja kabla ya baiti ambayo inatokea sanjari na bendera ndani ya fremu. Safu ya kiungo cha mpokeaji kwanza huondoa herufi hizi za kutoroka, kisha hupitisha fremu kwenye safu ya mtandao. Njia hii inaitwa padding ya tabia. Hivyo, bendera halisi inaweza kutofautishwa na "mechi ya nasibu" kwa kuwepo au kutokuwepo kwa ishara ya ESC mbele yake. Ikiwa herufi ya ESC inaonekana kwa bahati mbaya kati ya data zingine, basi moja halisi pia huingizwa kabla ya mhusika huyu wa kutoroka wa uwongo. Kisha ESC yoyote moja itakuwa sehemu ya mlolongo wa kutoroka, na mbili itaonyesha kuwa byte ya huduma iliishia kwenye mkondo wa data kwa bahati mbaya. Baada ya kufuta herufi zilizoingizwa, mlolongo wa byte ni sawa kabisa na ule wa asili. Hasara kuu ya njia hii ni kwamba imefungwa kwa wahusika 8-bit. Wakati huo huo, sio katika usimbaji wote herufi moja inalingana na biti 8. Kwa mfano, UNICODE hutumia usimbaji wa 16-bit.

Mbinu inayofuata inaruhusu matumizi ya fremu na seti za herufi zinazojumuisha idadi yoyote ya biti. Katika kesi hii, kila fremu huanza na kuishia na mlolongo maalum wa bits 01111110. Ufungaji wa biti ni sawa na pedi za herufi, ambapo herufi ya kutoroka inaingizwa kwenye fremu kabla ya bendera iliyokutana nasibu kati ya data. Kujaza kidogo, kama kujaza tabia, ni wazi kabisa kwa safu ya mtandao ya mashine zote mbili. Ikiwa mlolongo wa biti ya bendera (01111110) utatokea kwenye data ya mtumiaji, hupitishwa kama 011111010, lakini huhifadhiwa kwenye kumbukumbu ya kompyuta inayopokea tena katika hali yake ya asili: 01111110. Shukrani kwa bitana, mipaka kati ya fremu mbili inaweza kuwa. kutambuliwa kwa usahihi kwa kutumia mfuatano wa bendera. Kwa hivyo, ikiwa mwisho wa upokeaji unapoteza mipaka ya fremu, inahitaji tu kutafuta beti ya bendera katika mtiririko wa biti uliopokelewa, kwani inatokea tu kwenye mipaka ya fremu na haiwezi kuwepo kwenye data ya mtumiaji.

Hatimaye, mbinu ya mwisho ya kutunga iliyojadiliwa inakubalika tu katika mitandao ambapo midia halisi ina upungufu fulani. Kwa mfano, baadhi mitandao ya ndani encode kidogo moja ya data na bits mbili kimwili. Kwa hivyo katika msimbo wa Manchester, bit 1 imesimbwa na jozi ya juu na viwango vya chini ishara (makali hasi), na kidogo 0 - kinyume chake, jozi ya viwango vya chini na vya juu (makali mazuri). Katika muundo huu, kila data iliyopitishwa ina mpito katikati, na kuifanya iwe rahisi kutambua mipaka kidogo. Michanganyiko ya kiwango cha mawimbi (ya chini na ya juu) haitumiki kwa uwasilishaji wa data, lakini hutumiwa kama vikomo vya fremu katika baadhi ya itifaki.

Kumbuka kwamba itifaki nyingi za kisasa za utumaji data hutumia mbinu za uundaji zilizounganishwa ili kuongeza kutegemewa.

Safu ya kiungo cha data lazima ifanye idadi ya kazi maalum, ambazo zinajumuisha utunzaji wa makosa ya uwasilishaji wa data Na udhibiti wa mtiririko wa data, kuondoa "mafuriko" ya wapokeaji polepole na wasambazaji wa haraka.

Tatizo kubwa ni utoaji wa uhakika wa fremu zote kwenye safu ya mtandao ya mashine ya kupokea, huku ukiziweka kwa mpangilio sahihi. Kawaida kudhamini utoaji wa kuaminika habari hutumwa kwa mtoa huduma kuhusu kile kinachotokea upande wa pili wa mstari. Itifaki inamtaka mpokeaji kurejesha fremu maalum za udhibiti zilizo na ujumbe chanya au hasi kuhusu fremu zilizopokewa. Baada ya kupokea ujumbe chanya, mtumaji anajua kwamba fremu aliyotuma ilipokelewa kwa mafanikio upande wa pili wa laini. Ujumbe hasi, kwa upande mwingine, unamaanisha kuwa kitu kilitokea kwenye fremu na inahitaji kutumwa tena. Kwa kuongeza, sura iliyotumwa inaweza kupotea kabisa kutokana na malfunction ya vifaa au aina fulani ya kuingiliwa. Katika kesi hii, mpokeaji hataipokea na, ipasavyo, haitajibu kwa njia yoyote, wakati mtumaji anaweza kungojea kwa muda usiojulikana jibu chanya au hasi. Ili kuzuia kufungia kwa mtandao katika tukio la upotezaji kamili wa fremu, vipima muda kiwango cha kiungo. Baada ya kutuma fremu, kipima muda huanza na kuhesabu muda wa kutosha kwa mashine inayopokea kupokea fremu hii, kuichakata na kutuma tena uthibitisho. Katika hali ya kawaida, fremu inapokelewa kwa usahihi na uthibitisho unarejeshwa na kupewa mtumaji kabla ya muda uliowekwa kuisha, na kisha tu kipima saa kinazimwa. Hata hivyo, ikiwa fremu au uthibitisho utapotea njiani, basi muda uliowekwa utaisha na mtumaji atapokea ujumbe kuhusu tatizo linalowezekana. Suluhisho rahisi zaidi ni kwa mtumaji kutuma sura tena. Hata hivyo, hii inaleta hatari ya fremu sawa kupokelewa mara kadhaa na safu ya kiungo ya mashine ya kupokea na kutumwa tena kwenye safu ya mtandao. Ili kuzuia hili kutokea, ni muhimu kuhesabu fremu zilizotumwa kwa mfuatano ili mpokeaji aweze kutofautisha fremu zilizotumwa tena na za asili. Swali la kusimamia vipima saa na nambari za serial kuhakikisha kwamba kila fremu inawasilishwa kwa safu ya mtandao ya mashine ya kupokea mara moja ni sana kazi muhimu, kutatuliwa na safu ya kiungo.

Mwingine kipengele muhimu Muundo wa safu ya kiungo (pamoja na tabaka za juu) unahusishwa na swali la nini cha kufanya na mtumaji ambaye anataka kila wakati kusambaza fremu haraka kuliko uwezo wa mpokeaji kuzipokea. Hali hii inaweza kutokea ikiwa upande wa kutuma una mashine yenye nguvu zaidi (au chini ya kubeba) kuliko ile inayopokea. Katika hali hii, mtumaji ataendelea kutuma muafaka kwa kasi kubwa mpaka mpokezi awe, kama wasemavyo, "amefurika" nao. Hata na laini ya mawasiliano inayofanya kazi kikamilifu ndani muda fulani kwa muda, mpokeaji hataweza kuendelea kuchakata fremu zinazoingia na ataanza kuzipoteza. Ili kuzuia hali kama hiyo, njia mbili hutumiwa mara nyingi. Mara ya kwanza, kuitwa udhibiti wa mtiririko wa kitanzi kilichofungwa, mpokeaji hutuma taarifa kwa mtumaji kuruhusu wa pili kuendelea na maambukizi au, kwa angalau, ikiripoti jinsi mpokeaji anavyofanya. Katika mbinu ya pili - kikomo kudhibiti mtiririko- utaratibu umejengwa katika itifaki ambayo hupunguza kasi ambayo wasambazaji wanaweza kusambaza data, na hakuna maoni kwa mpokeaji. Mipango mbalimbali ya udhibiti wa mtiririko wa kufungwa hujulikana, lakini wengi wao hutumia kanuni sawa. Itifaki ina sheria zilizobainishwa kwa uwazi zinazobainisha ni lini mtumaji anaweza kutuma fremu inayofuata. Sheria hizi mara nyingi huzuia fremu kusambazwa hadi mpokeaji atoe ruhusa (kwa uwazi au kwa njia isiyo wazi).

Kiwango cha ANSI C kinapanuka kwenye dhana ya kuelezea mapema chaguo za kukokotoa. Maelezo haya yaliyopanuliwa yanaitwa prototype ya chaguo la kukokotoa.

Protoksi za kazi hutumikia madhumuni mawili: kwanza, hufafanua aina ya urejeshaji wa kazi ili mkusanyaji aweze kutoa. kanuni sahihi kwa data iliyorejeshwa; pili, wanafafanua aina na idadi ya hoja zinazotumiwa na kazi. Mfano unaonekana kama hii:

chapa kazi_name (orodha ya vigezo);

Mfano kawaida huwekwa mwanzoni mwa programu na lazima ionekane kabla ya simu yoyote ya kukokotoa.

Kwa kuongezea, ili kumjulisha mkusanyaji juu ya aina ya kurudi kwa kazi, mfano wa kazi huruhusu C kufanya ukaguzi wa aina kali, sawa na ukaguzi unaofanywa katika lugha kama vile Pascal. Prototypes huruhusu mkusanyaji kupata na kuripoti taarifa kuhusu ubadilishaji wowote wa aina haramu kati ya aina za hoja zinazotumiwa katika simu ya kukokotoa na aina za vigezo vilivyobainishwa. Mkusanyaji pia anaruhusiwa kuripoti kazi inapoitwa na idadi isiyo sahihi ya hoja.

Ikiwezekana, C hubadilisha kiotomati aina ya hoja hadi aina iliyopokelewa na kigezo. Hata hivyo, aina fulani za ubadilishaji haziruhusiwi. Ikiwa kitendakazi kina kielelezo, basi ubadilishaji wote usio halali utapatikana na ujumbe wa hitilafu utaonekana. Kwa mfano, programu inayofuata husababisha makosa kwa sababu inajaribu kuita func() na pointer badala ya kuelea inavyotakiwa. (Huwezi kubadilisha pointer kuwa kuelea.)

/* Mpango huu hutumia prototypes za kazi kufikia ukaguzi wa aina kali wakati func() inaitwa. Programu haijumuishi kwa sababu ya kutolingana kati ya aina ya hoja zilizofafanuliwa katika prototype ya chaguo la kukokotoa na aina ya hoja zinazotumiwa wakati wa kuita chaguo za kukokotoa. */

#pamoja na

int kuu (utupu)
{
int x, *y;
x = 10;
y =
func(x, y); /* chapa kutolingana */
kurudi 0;
}

Float func (int x, kuelea y)
{
printf("%f", y/(float)x);
kurudi y/(kuelea) x;
}

Kutumia prototypes pia huruhusu mkusanyaji kutoa ujumbe ikiwa idadi ya hoja zinazotumiwa katika simu ya kukokotoa hailingani na idadi ya vigezo vilivyobainishwa kwenye chaguo la kukokotoa. Kwa mfano, programu ifuatayo haitajumuisha kwa sababu func() inaitwa kwa hoja ya nambari isiyo sahihi:

/* Programu haijumuishi kwa sababu ya kutolingana kati ya idadi ya vigezo vilivyobainishwa katika prototype ya chaguo la kukokotoa na idadi ya hoja zinazotumiwa wakati wa kuita chaguo za kukokotoa. */

#pamoja na
kuelea func (int x, kuelea y); /* mfano */
int kuu (utupu)
{
func(2, 2.0, 4); /* idadi batili ya hoja */
kurudi 0;
}

Float func (int x, kuelea y)
{
printf ("%f", y/(float)x);
kurudi y/(kuelea) x;
}

Kitaalam, hauitaji kujumuisha majina halisi ya parameta unapotoa mfano wa chaguo la kukokotoa. Kwa mfano, chaguzi mbili zifuatazo ni sahihi kabisa na sawa:

Char func(char *, int);

Char func (char *str, int count);

Walakini, ikiwa utajumuisha majina ya vigezo, mkusanyaji hutumia majina kuripoti kutolingana kwa aina.

Baadhi ya vitendaji kama printf() vinaweza kuchukua idadi tofauti ya hoja. Idadi tofauti ya hoja imefafanuliwa katika mfano kwa kutumia duaradufu. Kwa mfano, mfano printf kazi() inaonekana kama hii:

Int printf(const char *fmt, ...);

Kuunda kitendakazi na nambari inayobadilika Kwa hoja, tafadhali rejelea maelezo ya kazi ya kawaida ya maktaba va_arg().

Prototypes za utendakazi zinapaswa kutumiwa kuzuia hitilafu zinazotokana na simu za kukokotoa zenye hoja batili. Pia husaidia kuangalia kama programu inafanya kazi ipasavyo kwa kuzuia chaguo za kukokotoa zisiitwe na idadi isiyo sahihi ya hoja. Kama ilivyotajwa hapo awali, zinahitajika katika C++.


Katika programu za kisasa za C, zilizoandikwa vizuri, kila kazi lazima itangazwe kabla ya kutumika. Hii kawaida hufanywa kwa kutumia mfano wa kazi. Katika toleo la asili la lugha C hapakuwa na mifano; lakini tayari zilianzishwa katika Standard C89. Ingawa prototypes hazihitajiki rasmi, matumizi yao yanafaa sana. (Walakini, katika mifano ya C++ inahitajika!) Mifano yote katika kitabu hiki ina prototypes kamili za utendaji. Prototypes humpa mkusanyaji uwezo wa kufanya ukaguzi wa kina zaidi wa aina, sawa na kile kinachofanywa katika lugha kama vile Pascal. Iwapo prototypes zitatumika, mkusanyaji anaweza kugundua ubadilishaji wowote wa aina ya hoja unaotiliwa shaka unaohitajika wakati wa kuita chaguo za kukokotoa ikiwa aina ya vigezo vyake ni tofauti na aina za hoja. Wakati huo huo, maonyo yatatolewa kuhusu ubadilishaji wote wenye kutiliwa shaka. Mkusanyaji pia atagundua tofauti katika idadi ya hoja zinazotumiwa wakati wa kuita chaguo za kukokotoa na katika idadi ya vigezo vya utendakazi.

Kwa ujumla, mfano wa kazi unapaswa kuonekana kama hii:

chapa function_name(chapa param_name1, chapa param_name2, ..., param_nameN);

Matumizi ya majina ya parameta ni ya hiari. Walakini, wanaruhusu mkusanyaji, ikiwa kuna hitilafu, kuashiria majina ambayo aina ya kutolingana hugunduliwa, kwa hivyo chukua wakati wa kutaja majina haya - hii itaokoa wakati baadaye.

Programu ifuatayo inaonyesha jinsi prototypes za utendakazi zilivyo na thamani. Inaripoti hitilafu inayotokea kwa sababu programu ina jaribio la kupiga simu sqr_it() kwa hoja kamili wakati kielekezi kwa nambari kamili kinahitajika.

/* Mpango huu hutumia mfano wa chaguo za kukokotoa ili kuhakikisha ukaguzi kamili wa aina. */ utupu sqr_it(int *i); /* prototype */ int main(batili) ( int x; x = 10; sqr_it(x); /* aina kutolingana */ return 0; ) void sqr_it(int *i) ( *i = *i * *i; )

Ufafanuzi wake pia unaweza kutumika kama mfano wa chaguo za kukokotoa ikiwa iko kwenye programu kabla ya simu ya kwanza kwa chaguo hili la kukokotoa. Kwa mfano, programu sahihi:

#pamoja na /* Ufafanuzi huu pia utatumika kama mfano ndani ya programu hii. */ void f(int a, int b) ( printf("%d ", a % b); ) int main(batili) ( f(10,3); rudisha 0; )

Katika mfano huu, hakuna mfano maalum unahitajika; kwani f() kazi imefafanuliwa kabla hata haijatumika main() . Ingawa ufafanuzi wa kazi unaweza kutumika kama mfano wake katika programu ndogo, hii haipatikani katika programu kubwa, haswa wakati faili nyingi zinatumiwa. Katika programu zilizotolewa kama mifano katika kitabu hiki, mwandishi alijaribu kutoa mfano tofauti kwa kila kipengele kwa sababu hivi ndivyo msimbo C huandikwa kwa kawaida.

Kazi pekee ambayo haihitaji prototype ni main(), kwani ndiyo kazi ya kwanza inayoitwa mwanzoni mwa programu.

Kuna tofauti ndogo lakini muhimu katika jinsi C na C++ hushughulikia mfano wa utendaji ambao hauna vigezo. Katika C ++, orodha tupu ya parameter inaonyeshwa kwa kutokuwepo kabisa kwa vigezo vyovyote katika mfano. Kwa mfano,

Int f(); /* Mfano wa C++ wa kitendakazi ambacho hakina vigezo */

Walakini, katika C usemi huu unamaanisha kitu tofauti. Kwa sababu ya hitaji la kudumisha utangamano na toleo asilia la C, orodha tupu ya parameta inawasiliana kuwa ni kuhusu vigezo haijatolewa hakuna habari. Kwa ajili ya mkusanyaji, kazi hii inaweza kuwa na vigezo kadhaa, au inaweza kuwa na yoyote. (Aina hii ya taarifa inaitwa tamko la utendakazi la mtindo wa zamani, na inafafanuliwa katika sehemu inayofuata.)

Ikiwa chaguo la kukokotoa katika C halina vigezo, basi mfano wake una neno kuu tupu ndani ya orodha ya vigezo. Hapa, kwa mfano, kuna mfano wa f() kazi kama inavyopaswa kuwa katika programu C:

Kuelea f (utupu);

Kwa njia hii mkusanyaji anajua kuwa chaguo la kukokotoa halina vigezo, na simu yoyote kwake ambayo ina hoja itazingatiwa kuwa kosa. Katika matumizi ya C++ neno kuu utupu ndani ya orodha tupu ya parameta pia inaruhusiwa, lakini inachukuliwa kuwa sio lazima.

Prototypes za kazi hukuruhusu "kukamata" makosa kabla ya kuendesha programu. Kwa kuongeza, wanakataza utendakazi wa kupiga simu na aina zisizolingana (yaani, kwa hoja zisizofaa) na hivyo kusaidia kuangalia usahihi wa programu.

Na mwishowe, ningependa kusema yafuatayo: tangu in matoleo ya awali Kwa kuwa sintaksia ya mfano haikuauniwa kikamilifu, katika mifano C haihitajiki rasmi. Mbinu hii ni muhimu kwa upatanifu na nambari ya C iliyoundwa kabla ya prototypes kuonekana. Lakini ikiwa nambari ya zamani ya C itahamishiwa kwa C++, basi prototypes kamili za utendakazi lazima ziongezwe kwake kabla ya kuunda nambari hii. Kumbuka kwamba ingawa prototypes ni za hiari katika C, zinahitajika katika C++. Hii inamaanisha kuwa kila chaguo la kukokotoa katika programu ya C++ lazima iwe na mfano kamili. Kwa hivyo, wakati wa kuandika programu katika C, zinajumuisha prototypes kamili za kazi - hii ndivyo watengenezaji wengi wa programu wanaofanya kazi katika lugha hii hufanya.

Matamko ya utendakazi ya kizamani

Katika "vijana wa mapema" wa lugha ya C, hata kabla ya kuundwa kwa prototypes za kazi, bado kulikuwa na haja ya kumwambia mkusanyaji kuhusu aina ya matokeo ya kazi ili msimbo sahihi utatolewa wakati kazi inaitwa. (Tangu vipimo aina tofauti data ni tofauti, basi saizi ya aina ya matokeo ilibidi ijulikane kabla ya kupiga chaguo la kukokotoa.) Hili lilifanywa kwa kutumia tamko la kazi ambalo halikuwa na taarifa yoyote kuhusu vigezo. Kwa viwango vya leo, mbinu hii ya kizamani ni ya kizamani. Walakini, bado inaweza kupatikana katika nambari za zamani. Kwa sababu hii, ni muhimu kuelewa jinsi inavyofanya kazi.

Kulingana na mbinu ya kizamani, aina ya matokeo na jina la kazi, kama inavyoonyeshwa hapa chini, hutangazwa karibu mwanzoni mwa programu:

#pamoja na div mara mbili (); /* tamko la chaguo la kukokotoa la mtindo wa zamani */ int main(void) ( printf("%f", div(10.2, 20.0)); rudisha 0; ) div mbili(idadi mbili, denom mbili) ( return num / denom; )

Tamko la aina ya utendakazi la kizamani humwambia mkusanyaji kwamba kitendakazi div() hurejesha matokeo ya type double . Tamko hili huruhusu mkusanyaji kutoa msimbo kwa usahihi wa simu kwa chaguo hili la kukokotoa. Walakini, haisemi chochote juu ya vigezo vya div() .

Fomu ya jumla Taarifa ya tamko la utendakazi la kizamani kama hii:

chapa kibainishi function_name();

Tafadhali kumbuka kuwa orodha ya vigezo ni tupu. Hata kama chaguo la kukokotoa litachukua hoja, hakuna hata moja iliyoorodheshwa katika aina ya tamko.

Kama ilivyoelezwa tayari, tamko la utendakazi la mtindo wa zamani limeacha kutumika na halipaswi kutumiwa katika msimbo mpya. Zaidi ya hayo, haiendani na C++.

Prototypes kwa utendaji wa maktaba ya mtindo wa zamani

Utendakazi wowote wa kawaida wa maktaba katika programu lazima uwe na mfano. Kwa hiyo, kwa kila kazi hiyo ni muhimu kuingia kichwa sahihi. Vijajuu vyote vinavyohitajika vinatolewa na mkusanyaji C. Katika mfumo wa programu C, vichwa vya maktaba ni (kawaida) faili ambazo majina yake hutumia kiendelezi cha .h. Kuna mambo mawili kuu katika kichwa: ufafanuzi wowote unaotumiwa na kazi za maktaba, na prototypes za kazi za maktaba. Kwa mfano, karibu programu zote katika kitabu hiki zinajumuisha faili kwa sababu faili hii ina mfano wa printf() . Vichwa vya utendakazi vya kawaida vimefafanuliwa ndani