TCP Njia Tatu za Kushikana Mikono - SYN na Bendera za ACK

Kichwa cha UDP daima kina urefu wa biti 64. Sehemu zilizoainishwa katika sehemu ya UDP (tazama takwimu) ni pamoja na zifuatazo:
1. Mlango wa chanzo: nambari ya mlango wa chanzo (biti 16)
2. Mlango wa kulengwa: Nambari ya bandari lengwa (biti 16)
3. Urefu wa Ujumbe: Urefu wa kichwa cha UDP na Data ya UDP(16 kidogo)
4. Checksum: hundi iliyokokotolewa ya sehemu za kichwa na data (biti 16)
5. Data: data ya itifaki ya tabaka la juu (ULP) (urefu unaobadilika)
Mifano ya itifaki zinazotumia UDP: TFTP, SNMP, Faili ya Mtandao Mfumo (NFS) na Kikoa Mfumo wa Jina(DNS).

Kichwa cha TCP kina habari ambayo imefafanuliwa Itifaki ya TCP. KATIKA sehemu hii Vipengele vya kichwa cha TCP vinaelezwa.

Sehemu za TCP hupitishwa kwa kutumia pakiti za IP. Kichwa cha TCP kinafuata kichwa cha IP. Utengano huu unaruhusu kuwepo kwa itifaki zingine za kiwango cha seva pangishi isipokuwa TCP. Sehemu za kichwa cha TCP ni pamoja na zifuatazo:

Mlango wa chanzo: Nambari ya bandari ya chanzo (biti 16)

Mlango wa kulengwa: Nambari ya bandari lengwa (biti 16)

Nambari ya mlolongo: nambari ya serial octet ya kwanza ya data
sehemu inayotumika kuhakikisha kuwa data inayoingia imepangwa kwa usahihi
(Biti 32)

Nambari ya kukiri: Oktoba ijayo inayotarajiwa
TCP (biti 32)

Urefu wa kichwa: Idadi ya maneno ya biti 32 kwenye kichwa (biti 4)

Imehifadhiwa: Weka hadi 0 (biti 3)

Vijiti vya kudhibiti: Vitendo vya kudhibiti kama vile kuweka,
overload na kusitisha kikao (9 bits). Sehemu moja ambayo ina maalum
thamani ambayo mara nyingi hufikiriwa kama bendera.

Dirisha: idadi ya pweza ambayo kifaa kiko tayari kukubali (biti 16)

Checksum: Hundi iliyokokotolewa ya kichwa na
data (16 bits)

Haraka: Inaonyesha mwisho wa data ya dharura (biti 16)

Chaguzi: Kwa sasa chaguo moja limefafanuliwa - ukubwa wa juu
Sehemu ya TCP (biti 0 au 32)

Data: data ya itifaki ya safu ya juu (ULP).
(urefu unaobadilika)

0 - 3

4 - 9

10 - 15

16 - 31

Chanzo Bandari

Bandari ya marudio, Bandari Lengwa

Nambari ya serial, Nambari ya Mfuatano (SN)

Nambari ya uthibitisho

Urefu wa kichwa

Imehifadhiwa

Bendera

Ukubwa wa Dirisha

Angalia jumla

Kiashiria cha umuhimu

Chaguzi (hiari, lakini karibu kutumika kila wakati)

160/192+

Data

P Mlango wa chanzo, bandari ya kulengwa

Sehemu hizi za 16-bit zina nambari bandari - nambari ambazo zimedhamiriwa naorodha maalum .

Chanzo cha bandari inabainisha maombi ya mteja ambayo pakiti zilitumwa. Data ya majibu hutumwa kwa mteja kulingana na nambari hii.

Bandari ya marudio inabainisha bandari ambayo pakiti ilitumwa.

Nambari ya serial

Nambari ya mlolongo hutumikia madhumuni mawili:

  1. Ikiwa bendera ya SYN imewekwa, basi hii ndiyo nambari ya awali ya mfuatano - ISN (Nambari ya Awali ya Mfuatano), na baiti ya kwanza ya data ambayo itahamishiwa kifurushi kinachofuata, itakuwa na nambari sawa na ISN + 1.
  2. Vinginevyo, ikiwa SYN haijawekwa, baiti ya kwanza ya data inayotumwa katika pakiti fulani ina nambari hii ya mfuatano.

Kwa kuwa mtiririko wa TCP kwa ujumla unaweza kuwa mrefu kuliko idadi ya majimbo mahususi ya uga huu, shughuli zote zilizo na nambari ya mfuatano lazima zifanyike modulo 2. 32 . Hii inaweka kizuizi cha vitendo kwa matumizi ya TCP. Ikiwa kasi ya uhamishaji mfumo wa mawasiliano ni kwamba wakati wa MSL (kiwango cha juu cha maisha ya sehemu) nambari ya mfuatano inafurika, kisha sehemu mbili zilizo na nambari sawa zinaweza kuonekana kwenye mtandao, zinazohusiana na sehemu mbalimbali mkondo, na mpokeaji atapokea data isiyo sahihi.

N nambari ya uthibitisho

Nambari ya Kukiri (ACK SN)(biti 32) - ikiwa biti ya ACK imewekwa, basi sehemu hii ina nambari ya mfuatano wa pweza ambayo mtumaji wa sehemu hii anataka kupokea. Hii ina maana kwamba pweza zote zilizopita (na nambari kutoka ISN+1 hadi ACK-1 zikijumlishwa) zilipokelewa kwa ufanisi.

D Mstari wa kichwa (kurekebisha data)

Sehemu hii inabainisha ukubwa wa kichwa cha pakiti ya TCP katika maneno ya baiti 4 (okteti 4). Ukubwa wa chini ni maneno 5 na upeo ni 15, ambayo ni 20 na 60 byte kwa mtiririko huo. Kukabiliana huhesabiwa tangu mwanzo wa kichwa cha TCP.

3 zimehifadhiwa

Imehifadhiwa (biti 6) kwa matumizi ya baadaye na lazima iwekwe hadi sifuri. Kati ya hizi, mbili (ya 5 na 6) tayari zimefafanuliwa:

  • CWR (Dirisha la Msongamano Limepunguzwa) - Sehemu ya Kupunguza Msongamano wa Dirisha - alama iliyowekwa na mtumaji ili kuonyesha kwamba pakiti ilipokelewa kwa seti ya bendera ya ECE (RFC 3168)
  • ECE (ECN-Echo) - Sehemu ya ECN Echo - inaonyesha kuwa nodi hii ina uwezo wa ECN (Arifa ya Msongamano Dhahiri) na kuashiria kwa mtumaji kuhusu msongamano wa mtandao (RFC 3168)

F lags (vijiti vya kudhibiti)

Sehemu hii ina bendera 6-bit:

  • URG - uwanja "Kielelezo cha Umuhimu" kushiriki (Kiingereza) Sehemu ya kielekezi cha dharura ni muhimu)
  • ACK - shamba "Nambari ya uthibitisho" kushiriki (Kiingereza) Uga wa kukiri ni muhimu)
  • PSH - (Kitendaji cha Kushinikiza kwa Kiingereza) huelekeza mpokeaji kusukuma data iliyokusanywa katika bafa inayopokea kwenye programu-tumizi ya mtumiaji.
  • RST - kata miunganisho, weka upya bafa (usafishaji wa bafa) (eng. Weka upya muunganisho)
  • SYN - landanisha nambari za mlolongo
  • FIN (Kiingereza mwisho, kidogo) - bendera, wakati imewekwa, inaonyesha kukamilika kwa uunganisho (Kiingereza. Sehemu ya FIN inatumika kuzima muunganisho).

Ukubwa wa dirisha

Idadi ya baiti za data kuanzia toleo la mwisho uthibitisho ambao mtumaji anaweza kukubali ya kifurushi hiki. Kwa maneno mengine, mtumaji wa pakiti ana bafa ya baiti za "saizi ya dirisha" ili kupokea data.

KWA cheki

Shamba cheki ni kijalizo cha biti-16 cha jumla ya maneno yote ya 16-bit ya kichwa (pamoja na kichwa cha uwongo) na data. Ikiwa sehemu ambayo hundi imehesabiwa ina urefu ambao sio nyingi ya biti 16, basi urefu wa sehemu hiyo huongezeka hadi nyingi ya 16 kwa kuongeza bits za sifuri kwa upande wa kulia. Vibandiko (0) havisambazwi katika ujumbe na hutumika kukokotoa tu hundi. Wakati wa kuhesabu cheki, thamani ya uwanja wa hundi yenyewe inachukuliwa kuwa 0.

U kiashiria cha umuhimu

Thamani ya biti-16 ya urekebishaji chanya kutoka kwa nambari ya mfuatano katika sehemu hii. Sehemu hii inabainisha nambari ya mfuatano wa pweza ambayo humaliza data ya dharura. Sehemu inazingatiwa tu kwa pakiti zilizo na bendera ya URG iliyowekwa. Inatumika kwadata ya nje ya bendi .

Kuhusu chaguo

Inaweza kutumika katika hali zingine kupanua itifaki. Wakati mwingine hutumiwa kwa majaribio. Washa wakati huu chaguzi karibu kila mara ni pamoja na ka 2 HAPANA (V kwa kesi hii 0x01) na baiti 10 zikibainisha mihuri ya nyakati . Unaweza kuhesabu urefu wa sehemu ya chaguo kwa kutumia thamani ya sehemu ya kukabiliana.

M utaratibu wa itifaki

Tofauti mbadala wa jadi- UDP, ambayo inaweza kuanza kusambaza pakiti mara moja, TCP huanzisha miunganisho ambayo lazima iundwe kabla ya kusambaza data. Uunganisho wa TCP inaweza kugawanywa katika hatua 3:

  • Kuanzisha muunganisho
  • Uhamisho wa data
  • Kukomesha muunganisho

NA Hali ya kikao cha TCP

Mchoro wa hali ya TCP uliorahisishwa. Maelezo zaidi ndani Mchoro wa TCP EFSM (kwa Kingereza)

Kikao cha TCP kinasema

IMEFUNGWA

Hali ya awali ya nodi. Kweli uwongo

SIKILIZA

Seva inasubiri maombi ya muunganisho kutoka kwa mteja

SYN-IMETUMA

Mteja alituma ombi kwa seva ili kuanzisha muunganisho na anasubiri jibu

SYN-IMEPOKEA

Seva ilipokea ombi la muunganisho, ikatuma ombi la jibu na inasubiri uthibitisho

IMEANZISHWA

Muunganisho umeanzishwa, uhamishaji wa data unaendelea

FIN-SUBIRI-1

Moja ya wahusika (wacha tuiite nodi-1) inakamilisha muunganisho kwa kutuma sehemu iliyo na bendera ya FIN.

KARIBU-SUBIRI

Upande mwingine (nodi-2) huingia katika hali hii kwa kutuma, kwa upande wake, sehemu ya ACK na kuendelea na maambukizi ya njia moja.

FIN-SUBIRI-2

Node-1 inapokea ACK, inaendelea kusoma na inasubiri kupokea sehemu iliyo na bendera ya FIN

LAST-ACK

Node-2 inamaliza usambazaji na kutuma sehemu iliyo na bendera ya FIN

TIME-SUBIRI

Node-1 ilipokea sehemu yenye bendera ya FIN, ikatuma sehemu iliyo na bendera ya ACK na kusubiri sekunde 2*MSL kabla ya kufunga muunganisho.

KUFUNGA

Pande zote mbili zilianzisha kufungwa kwa muunganisho kwa wakati mmoja: baada ya kutuma sehemu iliyo na bendera ya FIN, nodi-1 pia inapokea sehemu ya FIN, inatuma ACK na inangojea sehemu ya ACK (kukubali ombi lake la kukatwa)

U kuanzisha uhusiano

Mchakato wa kuanzisha kikao cha TCP (pia huitwa "kushikana mikono" ( Kiingereza kupeana mkono )), lina hatua tatu.

1. Mteja, ambaye anakusudia kuanzisha muunganisho, hutuma seva sehemu na nambari ya mlolongo na Bendera ya SYN.

  • Seva inapokea sehemu, inakumbuka nambari ya mlolongo, na inajaribu kuunda tundu (bafa na miundo ya kumbukumbu) ili kumtumikia mteja mpya.
  • Ikifaulu, seva hutuma mteja sehemu iliyo na nambari ya mfuatano na alama za SYN na ACK, na kuingia katika hali ya SYN-POKEWA.
  • Ikitokea kushindwa, seva hutuma mteja sehemu iliyo na bendera ya RST.

2. Ikiwa mteja atapokea sehemu yenye bendera ya SYN, basi inakumbuka nambari ya mlolongo na kutuma sehemu na bendera ya ACK.

  • Iwapo pia inapokea bendera ya ACK kwa wakati mmoja (ambayo hutokea kwa kawaida), basi inaingia katika hali ILIYOSIMWA.
  • Ikiwa mteja atapokea sehemu iliyo na bendera ya RST, itaacha kujaribu kuunganisha.
  • Ikiwa mteja hatapokea jibu ndani ya sekunde 10, inarudia mchakato wa kuunganisha tena.

3. Iwapo seva katika hali ya SYN-POKEWA itapokea sehemu iliyo na alama ya ACK, basi itabadilika hadi katika hali ILIYOIMARISHWA.

  • Vinginevyo, baada ya muda, hufunga tundu na kuingia katika hali ILIYOFUNGWA.

Mchakato huo unaitwa "kulingana kwa hatua tatu" ( Kiingereza njia tatu kupeana mkono ), kwani ingawa inawezekana kuanzisha uhusiano na kwa kutumia nne sehemu (SYN kuelekea seva, ACK kuelekea mteja, SYN kuelekea mteja, ACK kuelekea seva), kwa vitendo sehemu tatu hutumiwa kuokoa muda.

Mfano wa idhini ya msingi ya hatua 3:

TCP A TCP B

1. IMEFUNGWA SIKILIZA

2. SYN-TUME --> --> SYN-IMEPOKEA

3.IMEANZISHWA<-- <-- SYN-RECEIVED

4. IMEANZISHWA --> -->IMEANZISHWA

5.IMEANZISHWA<-- <-- ESTABLISHED

Kwenye mstari wa 2, TCP A huanza kutuma sehemu ya SYN inayoonyesha matumizi ya nambari za mfuatano, kuanzia 100. Kwenye mstari wa 3, TCP B hutuma SYN na uthibitisho wa SYN iliyopokelewa kwa TCP A. Ikumbukwe kwamba uga wa kukiri. inaonyesha kuwa TCP B inasubiri nambari ya mfuatano ipokewe 101, ikithibitisha SYN nambari 100.

Kwenye mstari wa 4, TCP A inajibu kwa sehemu tupu na ACK kwa sehemu ya SYN kutoka TCP B; kwenye mstari wa 5, TCP B hutuma data fulani. Kumbuka kuwa nambari ya uthibitishaji ya sehemu katika mstari wa 5 (ACK=101) ni sawa na nambari ya mfuatano katika mstari wa 4 (SEQ=101), kwa kuwa ACK haichukui nafasi ya nambari ya mfuatano (ikiwa hii itafanywa, itabidi ukiri shukrani. - ACK kwa ACK). Algorithm ya Nagle na Anza polepole

Wakati wa kubadilishana data, mpokeaji hutumia nambari ya mlolongo iliyo katika sehemu zilizopokelewa ili kurejesha utaratibu wao wa awali. Mpokeaji huarifu upande wa kutuma wa nambari ya mfuatano ambayo ilipokea data kwa ufanisi, ikijumuisha katika sehemu ya "nambari ya kukiri". Data yote iliyopokelewa ndani ya safu ya mfuatano uliothibitishwa imepuuzwa. Ikiwa sehemu iliyopokelewa ina nambari ya mfuatano kubwa kuliko inavyotarajiwa, basi data kutoka kwa sehemu hiyo imeakibishwa, lakini nambari ya mfuatano iliyothibitishwa haibadilishwa. Ikiwa sehemu inayolingana na nambari ya mfuatano inayotarajiwa itapokelewa baadaye, mpangilio wa data utarejeshwa kiotomatiki kulingana na nambari za mfuatano katika sehemu.

Ili kuhakikisha kuwa upande wa utumaji hautume data zaidi ya ambayo mpokeaji anaweza kuchakata, TCP ina vidhibiti vya mtiririko. Ili kufanya hivyo, tumia shamba la "dirisha". Katika sehemu zilizotumwa kutoka kwa mpokeaji hadi upande wa kusambaza, saizi ya sasa ya buffer inayopokea inaonyeshwa kwenye uwanja wa "dirisha". Upande wa kutuma hudumisha saizi ya dirisha na hutuma data zaidi kuliko ilivyoonyeshwa na mpokeaji. Ikiwa mpokeaji ametaja saizi ya dirisha ya sifuri, basi hakuna data inayopitishwa kwa mwelekeo wa nodi hii hadi mpokeaji aripoti saizi kubwa ya dirisha.

Katika baadhi ya matukio, programu ya kutuma inaweza kuomba kwa uwazi kwamba data isomwe kwa kufuatana kwa programu inayopokea bila kuakibishwa. Bendera ya PSH inatumika kwa hili. Ikiwa alama ya PSH itatambuliwa katika sehemu iliyopokelewa, utekelezaji wa TCP hurejesha data yote iliyoakibishwa kwa sasa kwenye programu inayopokea. Push hutumiwa, kwa mfano, katika maombi ya maingiliano. Katika vituo vya mtandao hakuna maana ya kusubiri pembejeo ya mtumiaji baada ya kumaliza kuandika amri. Kwa hivyo, sehemu ya mwisho iliyo na amri lazima iwe na bendera ya PSH ili programu kwenye upande unaopokea ianze kuitekeleza.

Z kukomesha muunganisho

Kukomesha muunganisho kunaweza kuzingatiwa katika hatua tatu:

  1. Inatuma alama ya FIN kwa seva kutoka kwa mteja ili kuzima muunganisho.
  2. Seva hutuma alamisho za majibu ya mteja ACK, FIN, kuonyesha kwamba muunganisho umefungwa.
  3. Baada ya kupokea bendera hizi, mteja hufunga muunganisho na kutuma ACK kwa seva ili kuthibitisha kwamba muunganisho umefungwa.

Kwa kutumia programu inayochambua trafiki na itifaki zinazotumiwa - Wireshark, unaweza kuona utendakazi wa hatua tatu za kushikana mikono kwa TCP:


Hatua ya 1

Mteja wa TCP anaanza kupeana mkono kwa njia tatu kwa kutuma sehemu iliyo na seti ya alama ya hundi SYN(Sawazisha Nambari ya Mlolongo) kwa kubainisha thamani ya awali katika sehemu ya nambari ya mlolongo kwenye kichwa. Hii ndio thamani ya awali ya nambari ya mlolongo, inayojulikana kama Nambari ya Mfuatano wa Kuanzia ( ISN), huchaguliwa bila mpangilio na hutumiwa kuanza kufuatilia mtiririko wa data kutoka kwa mteja hadi kwa seva kwa kipindi hicho. ISN katika kichwa cha kila sehemu huongezwa kwa moja kwa kila baiti ya data inayotumwa kutoka kwa mteja hadi kwa seva huku ubadilishanaji wa data ukiendelea.

Kielelezo kinaonyesha jinsi matokeo ya kichanganuzi cha itifaki kinaonyesha alama ya udhibiti wa SYN na nambari ya mfuatano wa jamaa.

Alamisho ya udhibiti wa SYN imewekwa na nambari ya mfuatano wa jamaa ni 0. Ingawa grafu ya kichanganuzi cha itifaki inaonyesha thamani linganishi za mfuatano na nambari za uthibitisho, thamani za kweli ni nambari za biti 32. Tunaweza kuamua nambari halisi zilizotumwa katika vichwa vya sehemu kwa kuchunguza eneo la "Packet Bytes". Hapa unaweza kuona baiti nne zilizowakilishwa ndani hexadesimoli fomu.

Hatua ya 2

Seva ya TCP lazima ikiri kupokea sehemu ya SYN kutoka kwa mteja ili kuanzisha kipindi kutoka kwa mteja hadi kwa seva. Ili kufanya hivyo, seva hutuma sehemu nyuma kwa mteja na seti ya alama ya ACK, ikionyesha kuwa uga wa nambari ya kukiri umewezeshwa. Kwa kuweka alama hii kwenye sehemu, mteja hutambua hili kama uthibitisho kwamba seva imepokea SYN kutoka kwa TCP ya mteja.

Itifaki ya TCP/IP iliundwa kwa mara ya kwanza mwanzoni mwa miaka ya 1970 na ilitumiwa kuunda ARPANET. Teknolojia hiyo ilitengenezwa kama sehemu ya mradi wa utafiti ambao ulilenga kusoma uwezekano wa kuchanganya kompyuta ndani ya mtandao huo wa mtandao wa ndani au mtandaoni.

Kuanzisha muunganisho katika TCP hufanywa kwa kutumia programu maalum ya mteja, kama vile kivinjari, programu ya barua pepe, au mteja wa kutuma ujumbe.

Muundo wa TCP

Muundo wa TCP/IP hukuruhusu kuunda ufikiaji wa kompyuta za mbali, na pia kuchanganya vifaa vya mtu binafsi ili kuunda mitandao ya ndani inayofanya kazi tofauti na ile ya umma. TCP ni itifaki ya kuaminika ya kuhamisha data. Kwa hivyo, taarifa zote ambazo zitatumwa kwenye mtandao zimehakikishiwa kupokea na mpokeaji, i.e. mtumiaji ambaye data ilitolewa.

Njia mbadala ya TCP ni UDP. Tofauti muhimu kati ya mitandao hii ni kwamba TCP lazima kwanza ianzishe muunganisho unaoaminika kati ya mtumaji na mpokeaji wa taarifa. Mara tu uunganisho unapoanzishwa, data huhamishwa, na kisha utaratibu wa kukomesha uunganisho huanza. UDP huanzisha mara moja uwasilishaji wa pakiti muhimu za habari kwa mtumiaji bila kwanza kuunda chaneli.

Inatuma data kupitia TCP

Baada ya muunganisho kuanzishwa, TCP hutuma data pamoja na njia zilizoundwa kwa mujibu wa anwani za IP za mtumaji na mpokeaji wa habari. Anwani ya IP ni kitambulisho cha kipekee cha kila kifaa cha mtandao kwenye Mtandao, na kwa hivyo pakiti iliyotumwa kupitia handaki iliyoundwa haiwezi kupotea au kutumwa kimakosa kwa mtumiaji mwingine.

Katika kiwango cha kimwili cha maambukizi ya data, habari iko katika mfumo wa masafa, amplitudes na fomu nyingine za ishara, ambazo tayari zinasindika na kadi ya mtandao ya mpokeaji.

Itifaki za kituo zinawajibika kwa usindikaji wa habari na kompyuta na kuisambaza kwa vifaa vingine, kati ya hizo ni Ethernet, ATM, SLIP, IEEE 802.11. Njia hizi hutoa sio tu maambukizi ya data, lakini pia aina ya utoaji kwa mpokeaji. Kwa hivyo, katika mitandao ya IEEE 802.11, habari hupitishwa kwa kutumia ishara ya redio isiyo na waya. Katika kesi hii, ishara hutolewa kutoka kwa kadi ya mtandao ya kompyuta, ambayo pia ina msimbo wake wa MAC. Katika kesi ya Ethernet, maambukizi yote ya data yanafanywa kwa kutumia uhusiano wa cable.

Video kwenye mada

Katika hali ya kisasa, shughuli za jamii na ustaarabu haziwezekani bila matumizi ya njia za kubadilishana habari haraka. Mitandao ya kompyuta ya kimataifa imeundwa kutatua tatizo hili.

Mtandao wa kimataifa (GCN) ni mtandao unaojumuisha kompyuta zinazotumia maeneo makubwa yenye idadi isiyo na kikomo ya mifumo ya kompyuta iliyojumuishwa katika mtandao huu. Hali kuu ya kufanya kazi kwa mitandao kama hiyo ni usambazaji wa habari mara moja kwenye mtandao, bila kujali umbali wa kompyuta inayotuma na kupokea.

Mtandao wa kimataifa hutofautiana na ule wa ndani, kwanza, katika viwango vya chini vya uhamishaji data. Mitandao ya kimataifa hufanya kazi kupitia TCP/IP, MPLS, ATM na itifaki zingine. Maarufu zaidi ya haya ni itifaki ya TCP/IP, ambayo inajumuisha subprotocols za viwango tofauti: maombi, usafiri, mtandao, kimwili na channel.

Katika kiwango cha maombi, programu nyingi hufanya kazi ambazo zina itifaki zao ambazo zinajulikana sana kwa watumiaji wa kawaida wa PC (HTTP, WWW, FTP, nk). Itifaki hizi hutoa taswira na onyesho la habari inayohitajika na mtumiaji.

Itifaki ya usafiri inawajibika kuwasilisha data kwa programu haswa inayoweza kuichakata. Inaitwa TCP.

Safu ya mtandao ndio safu inayopokea wakati wa kutuma habari na kutuma maombi kwa tabaka za chini ili kupata habari yote. Inaitwa itifaki ya IP.

Tabaka za kimwili na za kiungo zina jukumu la kufafanua hali na mbinu za kusambaza habari.

Mtandao maarufu wa kimataifa ni WWW (Mtandao Wote wa Ulimwenguni), ambayo ni mkusanyiko wa seva zinazohifadhi habari muhimu kwa watumiaji, na kompyuta ambazo zinaweza kupokea habari kutoka kwa seva na kuzipakia kwao. WWW inajulikana kwa urahisi na urahisi wa matumizi, pamoja na mahitaji ya chini ya kasi ya uhamisho wa data. Hii iliruhusu mtandao huu kuendeleza kwa muda wa zaidi ya muongo mmoja.

Video kwenye mada

Ni kawaida kurejelea jina la ishara ambalo linachukua nafasi ya anwani ya nambari kulingana na anwani za IP kwenye Mtandao. Ushughulikiaji wa nambari, unaotumiwa katika usindikaji wa jedwali la kuelekeza, ni bora kwa matumizi ya kompyuta, lakini huleta shida kubwa kwa mtumiaji kukumbuka. Majina ya vikoa yenye maana ya kimaadili yanasaidia.

Viunganisho kwenye Mtandao vinaanzishwa kwa kutumia vikundi vya nambari vya maadili 4, vinavyotenganishwa na ishara "." na kuitwa anwani za IP. Majina ya ishara ya jina la kikoa changamano ni huduma iliyoundwa ili kurahisisha kupata anwani ya IP inayohitajika kwenye mtandao. Kiashirio cha kiufundi cha jina la kikoa ni "." katika barua pepe ya mtumiaji. Kwa hivyo, katika anwani ya google.com jina la kikoa litakuwa com. Jina la kikoa lenyewe Jina haiwezi kutoa ufikiaji wa rasilimali inayohitajika ya mtandao. Utaratibu wa kutumia jina la kumbukumbu lina hatua mbili: - Anwani za IP kwa jina katika faili ya wapangishi iliyo na majedwali ya mawasiliano kati ya anwani ya IP na jina la kompyuta; - kuanzisha muunganisho na rasilimali ya wavuti ya mbali kwenye anwani mahususi ya IP. kazi ya huduma ya DNS ni kupata IP -anwani kwa ajili ya kuanzisha uhusiano, ambayo inafanya huduma hii msaidizi kwa heshima na itifaki TCP/IP. ni kitenganishi cha jina la kikoa, ingawa kwa madhumuni ya vitendo kawaida huchukuliwa kurejelea kikoa cha mizizi ambacho hakina kiteuzi chake. Mzizi - seti nzima ya majeshi ya mtandao - imegawanywa katika: - ngazi ya kwanza - gov, edu, com, net; - nyanja za kitaifa - uk, jp, ch, nk; - nyanja za kikanda - msk; - vikoa vya ushirika - vikoa Uhifadhi wa muundo wa miti uliozoeleka wa majina ya vikoa ulisababisha matumizi ya istilahi zilizowekwa - mizizi, nodi za miti, jani. Neno "mwenyeji" katika daraja hili limepewa jani ambalo halina nodi moja chini yake. Jina kamili la mpangishaji linakuwa uorodheshaji mfuatano wa nodi zote za kati kati ya mzizi na jani, zikitenganishwa na herufi "." kutoka kushoto kwenda kulia: ivan.net.abcd.ru, ambapo ru ni mzizi wa mti, abcd ni jina la shirika, ivan ni jani la mti (mwenyeji).

Video kwenye mada

Vyanzo:

  • Mfumo wa Jina la Kikoa cha Mtandao mnamo 2018

Ninapenda sana mfululizo mzima wa makala, pamoja na sikuzote nilitaka kujijaribu kama mtafsiri. Labda nakala hiyo itaonekana wazi sana kwa watengenezaji wenye uzoefu, lakini inaonekana kwangu kuwa itakuwa muhimu kwa hali yoyote.

Hujambo, jina langu ni Glenn Fiedler na ninakukaribisha kwa makala ya kwanza katika kitabu changu cha mtandaoni, Kupanga Mtandao kwa Wasanidi Programu.

Katika makala hii, tutaanza na vipengele vya msingi vya programu ya mtandao - kupokea na kusambaza data kwenye mtandao. Kupokea na kusambaza data ndiyo sehemu kuu na rahisi zaidi ya anuwai nzima ya kazi ambazo waandaaji wa programu za mtandao hufanya, lakini mara nyingi ni ngumu kuamua ni njia ipi ni bora kuendelea. Zingatia vya kutosha sehemu hii - ikiwa umesalia na kutoelewana, inaweza kusababisha matokeo mabaya kwa mchezo wako wa wachezaji wengi baadaye!

Uwezekano mkubwa zaidi tayari umesikia kitu kuhusu soketi, na unaweza kujua kwamba zinakuja katika aina mbili kuu - TCP na UDP. Jambo la kwanza unahitaji kuamua unapotengeneza mchezo wa wachezaji wengi ni aina gani ya soketi za kutumia - TCP, UDP, au zote mbili?

Chaguo la aina ya soketi inategemea kabisa aina ya mchezo unaokuza. Katika mfululizo huu wa makala, nitadhani kuwa unaandika mchezo wa vitendo - kama vile Halo, Uwanja wa Vita 1942, Tetemeko, Unreal, CounterStrike, Ngome ya Timu, n.k.

Sasa tutaangalia kwa undani zaidi sifa za kila aina ya tundu (kwa kuzingatia ukweli kwamba tunatengeneza mchezo wa mtindo wa vitendo), na kwenda kwa undani kidogo katika maelezo ya jinsi mtandao unavyofanya kazi. Baada ya ukaguzi wa kina, chaguo sahihi litakuwa dhahiri!

TCP inasimama kwa "itifaki ya kudhibiti upitishaji" na IP inasimama kwa "itifaki ya mtandao". Kwa pamoja yanasisitiza karibu kila kitu unachofanya mtandaoni, kuanzia kuvinjari wavuti hadi IRC na mawasiliano ya barua pepe - yote yanaendeshwa kwenye TCP/IP.

Ikiwa umewahi kutumia soketi za TCP, basi unapaswa kujua kwamba TCP ni itifaki inayotumia kanuni ya uunganisho wa kuaminika. Hii inamaanisha kuwa unaanzisha muunganisho kati ya kompyuta mbili, na kisha kutuma data kati yao, kama vile unaandika habari kwa faili kwenye kompyuta moja na kuisoma kutoka kwa faili moja hadi nyingine.

Katika kesi hii, uunganisho unachukuliwa kuwa wa kuaminika na thabiti - yaani, taarifa zote unazotuma zimehakikishiwa kufikia mpokeaji kwa utaratibu sawa ambao ulitumwa. Pia, uunganisho wa TCP unaweza kuchukuliwa kuwa mkondo unaoendelea wa data - itifaki yenyewe inachukua huduma ya kuvunja data kwenye pakiti na kuzituma kwenye mtandao.

Mara moja zaidi - kila kitu ni rahisi kama kuandika kawaida au kusoma kutoka kwa faili. Watson wa Msingi!

Lakini urahisi huu wa matumizi ni tofauti kabisa na kile kinachotokea "chini ya hood", kwa kiwango cha chini - kiwango cha itifaki ya IP.

Katika ngazi hii hakuna dhana ya uunganisho - badala yake pakiti za mtu binafsi hupitishwa kutoka kwa kompyuta moja hadi nyingine. Unaweza kufikiria mchakato huu kama kupitisha barua kutoka kwa mtu mmoja hadi mwingine katika chumba kilichojaa watu: mwishowe barua hiyo inafika kwa mtu anayefaa, lakini wakati huo huo kupitia mikono mingi.

Hata hivyo, hakuna hakikisho kwamba noti itamfikia anayeandikiwa. Mtumaji hutuma barua tu kwa matumaini kwamba itafika, lakini hajui hata kama ujumbe umefika au la - hadi mpokeaji aamue kuandika tena.
Kwa kawaida, kwa kweli kila kitu ni ngumu zaidi, kwani kompyuta inayotuma haijui mlolongo halisi wa kompyuta kwenye mtandao ambao pakiti inapaswa kupitishwa ili ifike haraka iwezekanavyo. Wakati mwingine IP hutuma nakala nyingi za pakiti moja, ambayo inaweza kuchukua njia tofauti kufikia lengwa - na kuna uwezekano wa kufika kwa nyakati tofauti.

Je, ikiwa tunataka kuhamisha taarifa kati ya kompyuta si kwa mtindo wa kusoma/kuandika faili, lakini kwa kutuma na kupokea pakiti moja kwa moja?

Kweli, tunaweza kufanya hivi kwa kutumia UDP. UDP inasimama kwa "itifaki ya datagram ya mtumiaji" na inaendesha juu ya IP (kama TCP), lakini badala ya kuongeza tani ya utendaji ni nyongeza ndogo tu kwa IP.

Kwa kutumia UDP, tunaweza kutuma pakiti kwa anwani maalum ya IP (kwa mfano, 112.140.20.10) na bandari (kwa mfano, 52423), na itatumwa kutoka kwa kompyuta hadi kwa kompyuta hadi ifike inapoenda (au inapotea kwenye njia).

Wakati huo huo, kwa upande wa mpokeaji tunakaa tu na kungojea, tukisikiliza bandari fulani (52423 kwa upande wetu), na wakati pakiti inapokuja kutoka kwa mtu (kumbuka kuwa hakuna viunganisho vinavyotumiwa), tunapokea arifa kuhusu hili. anwani na bandari ya kompyuta inayotuma, saizi ya pakiti, na baada ya hapo tunaweza kusoma data kutoka kwa pakiti hii.

Itifaki ya UDP haihakikishii uwasilishaji wa data. Kwa mazoezi, pakiti nyingi, kwa kweli, hufika, lakini kila wakati kuna upotezaji wa karibu 1-5%, na wakati mwingine kuna nyakati ambazo pakiti hazifiki kabisa (kumbuka kuwa kati ya mtumaji na mpokeaji kunaweza kuwa maelfu ya kompyuta, kwenye yoyote ambayo inaweza kushindwa au kuharibika).

Pia, UDP haitoi dhamana ya utaratibu ambao pakiti hutolewa. Unaweza kutuma pakiti tano kwa mpangilio - 1, 2, 3, 4, 5 - lakini zinaweza kufika kwa mpangilio tofauti kabisa - kwa mfano, 3, 1, 2, 5, 4. Tena, kwa mazoezi, watakuwa na uwezekano mkubwa. fika kwa mpangilio sahihi mara nyingi, lakini huwezi kutegemea hilo!

Mwishowe, wakati UDP haiongezi mengi kwa IP, inahakikisha jambo moja. Ikiwa utasambaza pakiti, itafika kabisa au haitafika kabisa. Kwa hiyo, ikiwa unatuma pakiti 256 kwa kompyuta nyingine, basi haiwezi kupokea tu 100 za kwanza kutoka kwa pakiti - lazima ipokee byte 256 zote. Hili ndilo jambo pekee ambalo itifaki ya UDP inakuhakikishia - kila kitu kingine kinaanguka kwenye mabega yako.

Kwa hivyo tunahitaji kuamua - je, tutumie soketi za TCP au UDP? Wacha tuangalie sifa zao:

  • Inatumia kanuni ya uunganisho
  • Inatoa dhamana ya utoaji na ubadilishaji
  • Inagawanya habari kiotomatiki katika pakiti
  • Inahakikisha kuwa data haitumiwi kwa umakini sana (udhibiti wa mtiririko wa data)
  • Rahisi kutumia - kama kuandika/kusoma kutoka kwa faili
UDP:
  • Haitumii kanuni ya uunganisho - itabidi utekeleze kwa mikono
  • Haihakikishi uwasilishaji na agizo la utoaji wa vifurushi - zinaweza kufika kwa mpangilio mbaya, na nakala, au zisifike kabisa!
  • Unahitaji kugawanya data kwa mikono katika pakiti na kuzituma
  • Unahitaji kuwa mwangalifu usitume data kwa umakini sana
  • Ikiwa pakiti imepotea, unahitaji kwa namna fulani kufuatilia na, ikiwa ni lazima, uitume tena
Kwa orodha kama hiyo, suluhisho linaonekana dhahiri - TCP inatekeleza utendaji wote tunaohitaji na ni rahisi kutumia, wakati kutumia UDP huahidi hemorrhoids kwa kuandika kila kitu kwa mikono, kutoka mwanzo. Kwa hivyo tunatumia TCP, sawa?

Lakini hapana.

Kutumia TCP labda ni kosa mbaya zaidi unaweza kufanya wakati wa kuunda mchezo wa wachezaji wengi. Ili kuelewa ni kwa nini, hebu tuangalie ni nini kinachofanya TCP iwe rahisi sana kutumia!

Jinsi TCP inavyofanya kazi
TCP na UDP zote zinafanya kazi juu ya IP, lakini kwa kweli ni tofauti kabisa. UDP inatenda sawa na IP, wakati TCP huondoa mtumiaji mbali na masuala yote ya pakiti, na kufanya mwingiliano sawa na kusoma/kuandika kwa faili.

Kwa hiyo anafanyaje?

Kwanza, TCP hutumia uondoaji wa mtiririko wa data - unaweza kuandika baiti za data kwenye mkondo huo, na TCP itahakikisha kuwa inafika kulengwa kwake. Kwa sababu IP husambaza data katika pakiti na TCP huendesha juu ya IP, ni lazima TCP ivunje mtiririko wa ingizo wa mtumiaji katika pakiti mahususi. Kwa hivyo, ndani ya TCP, baadhi ya mantiki hukusanya data kwenye foleni, na inapotosha, huunda pakiti na kuituma kwenye lengwa.

Tabia hii inaweza kuwa tatizo kwa mchezo wetu wa wachezaji wengi ikiwa tunahitaji kuhamisha pakiti ndogo sana. Inaweza kutokea kwamba TCP itaamua kutosambaza data zetu hadi itakapokusanya vya kutosha kuunda pakiti ya saizi fulani (sema, zaidi ya ka mia). Na hili ni tatizo kubwa, kwa sababu ni muhimu kuhamisha data kutoka kwa mteja (kibonye cha mchezaji) kwa seva haraka iwezekanavyo, na ikiwa kuna ucheleweshaji kutokana na buffering ya data na itifaki, basi kwa mchezaji upande wa mteja. mchezo hautakuwa wengi kwa njia ya kupendeza. Katika kesi hii, kusasisha vitu vya mchezo kutatokea kwa kuchelewa na mara chache - ambapo tunahitaji kusasisha vitu kwa wakati na mara nyingi.

TCP ina chaguo la kurekebisha hili - "TCP_NODELAY". Inaambia itifaki isingojee data ijikusanye kwenye foleni ya kutuma, lakini itume mara moja.

Kwa bahati mbaya, hata kwa chaguo hili imewekwa, TCP ina matatizo mengi wakati unatumiwa katika michezo ya mtandaoni.

Mizizi ya matatizo yote iko katika jinsi TCP inavyoshughulikia pakiti zilizopotea au zisizo za utaratibu, na kuunda udanganyifu wa uhusiano wa kuaminika na thabiti.

Jinsi TCP inahakikisha kuegemea kwa muunganisho
Wakati wa kusambaza, TCP huvunja mkondo wa data kwenye pakiti za kibinafsi, kuzipeleka kwenye mtandao kwa kutumia itifaki ya IP isiyoaminika, na kisha kuunda upya mkondo wa awali kutoka kwa pakiti zilizopokelewa kwenye kompyuta inayopokea.

Lakini nini kitatokea ikiwa moja ya pakiti haifiki? Au ikiwa vifurushi vinafika nje ya mpangilio, au na nakala?

Bila kuzama kwa undani katika maelezo ya jinsi TCP inavyofanya kazi (na hii ni mada ngumu sana - unaweza kuisoma katika TCP/IP Illustrated), mchakato unaonekana kama hii: TCP hutuma pakiti, huamua kuwa pakiti haikufika. , na kutuma tena pakiti sawa kwa mpokeaji. Pakiti nakala huondolewa kwa upande wa mpokeaji, na pakiti zinazofika nje ya mpangilio hupangwa upya ili kila kitu kiwe kama inavyopaswa kuwa - kwa uhakika na kwa mpangilio.

Tatizo ni kwamba wakati TCP "inasawazisha" mkondo wa data kwa njia hii, ikiwa pakiti imepotea, maambukizi huacha mpaka pakiti iliyopotea itatumwa tena (na kupokea kwa marudio). Ikiwa data mpya itawasili wakati wa kusubiri, itawekwa kwenye foleni na hutaweza kuisoma hadi pakiti iliyopotea ifike. Inachukua muda gani kutuma tena kifurushi? Inachukua angalau muda wa kurudi na kurudi wa pakiti (wakati TCP inaamua ni pakiti gani ya kutuma tena), pamoja na muda wa kuwasilisha tena pakiti iliyopotea. Kwa hivyo, ikiwa ping kati ya kompyuta ni 125 ms, kurejesha pakiti itachukua karibu moja ya tano ya pili, na katika hali mbaya zaidi, hadi nusu ya pili (fikiria ikiwa pakiti iliyotumwa inapotea ghafla pia). Veselukha!

Kwa nini usiwahi kutumia TCP kwa michezo ya wachezaji wengi
Tatizo la kutumia TCP katika michezo ya mtandaoni ni kwamba, tofauti na vivinjari, barua pepe na programu zingine, michezo hutegemea mwingiliano wa wakati halisi. Kwa vipengele vingi vya mchezo, kama vile vibonye vya mtumiaji na nafasi ya wachezaji kwenye mchezo, haijalishi ni nini kilifanyika sekunde iliyopita, lakini hali ya sasa ya mchezo duniani.

Hebu tuangalie mfano rahisi wa mchezo wa wachezaji wengi, kama vile ufyatuaji wa 3D. Sehemu ya mtandao ya mchezo imeundwa kwa urahisi sana: kila marudio ya mzunguko wa mchezo, mteja hutuma kwa seva maelezo ya vitendo vyote vya mchezaji (vitufe vilivyobonyezwa, nafasi ya kipanya, n.k.), na kila irudiayo seva huchakata data hii. , husasisha muundo wa ulimwengu wa mchezo na kutuma zile za sasa kwenye nafasi za mteja za vitu vya ulimwengu ili kuchora fremu mpya ya mchezaji.

Kwa hiyo, katika mchezo wetu, ikiwa pakiti inapotea wakati inapitishwa kwenye mtandao, mchezo unasimama na unasubiri mpaka pakiti itatolewa tena. Kwa upande wa mteja, vitu vya mchezo huganda, na kwenye seva, wachezaji pia hawawezi kusonga au kupiga risasi kwa sababu seva haiwezi kukubali pakiti mpya. Wakati pakiti iliyopotea hatimaye inafika, ina maelezo ya kizamani ambayo hayafai tena. Kwa kuongeza, baada ya hili, pakiti hizo zote ambazo zimekusanya kwenye foleni wakati wa kusubiri pia hufika, na wote wanahitaji kusindika kwa iteration moja ya kitanzi. Mkanganyiko kamili!

Kwa bahati mbaya, hakuna njia ya kubadilisha tabia hii ya TCP, na hakuna haja ya, kwa kuwa hii ndiyo maana ya TCP. Huu ni umuhimu wa kufanya utumaji data kwenye Mtandao kuwa mtiririko wa data unaotegemewa na thabiti.
Lakini hatuhitaji utiririshaji wa data unaotegemewa na thabiti.

Tunahitaji data kupata kutoka kwa mteja hadi kwa seva haraka iwezekanavyo, na hatutaki kusubiri data kutumwa tena.
Hii ndio sababu haupaswi kamwe kutumia TCP kwa michezo ya wachezaji wengi.

Lakini ngoja! Kwa nini siwezi kutumia UDP na TCP kwa pamoja?

Kwa data ya wakati halisi ya mchezo, kama vile mibofyo ya mtumiaji na hali ya ulimwengu ya mchezo, data ya sasa pekee ndiyo muhimu, lakini kwa aina nyingine za data, kama vile seti za amri zinazotumwa kutoka kwa kompyuta moja hadi nyingine, kutegemewa na uthabiti wa kituo. inaweza kuwa muhimu sana.

Bila shaka, inajaribu kutumia UDP kwa ingizo la mtumiaji na data ya hali ya ulimwengu, na TCP kwa data ambayo lazima ihakikishwe kuwasilishwa. Unaweza hata kufikiria kuwa unaweza kutengeneza "nyuzi" nyingi za amri - kwa mfano, moja kwa viwango vya upakiaji, nyingine kwa amri za AI. Unafikiri, "Sihitaji timu za AI kusubiri kwenye foleni ikiwa pakiti ya data ya kupakia kiwango itapotea, kwa sababu hazihusiani kabisa!" Katika kesi hii, wewe ni sawa, na unaweza kuamua kuunda tundu la TCP kwa kila mkondo wa amri.

Kwa mtazamo wa kwanza, hii ni wazo nzuri. Lakini shida ni kwamba kwa kuwa TCP na UDP zote zinaendesha juu ya IP, pakiti za itifaki zote mbili zitaathiriana - tayari ziko kwenye kiwango cha IP. Jinsi hasa athari hii itajidhihirisha yenyewe ni swali ngumu sana, na inahusiana na taratibu za kuaminika katika TCP. Lakini, kwa hali yoyote, fahamu kuwa kutumia TCP kawaida husababisha upotezaji wa pakiti za UDP. Ikiwa unataka kujua zaidi kuhusu hili, unaweza kusoma