ટ્રાન્સપોર્ટ મલ્ટિસર્વિસ નેટવર્કનું પ્રોટોકોલ આર્કિટેક્ચર. UDP પ્રોટોકોલ Udp વિનંતીઓ

UDP (યુઝર ડેટાગ્રામ પ્રોટોકોલ) એ IP નેટવર્ક્સ પર કનેક્શનલેસ ડેટા ટ્રાન્સફર માટેનો એક પરિવહન પ્રોટોકોલ છે. તે OSI મોડલના સૌથી સરળ ટ્રાન્સપોર્ટ લેયર પ્રોટોકોલ્સમાંથી એક છે. તેનું IP ID 0x11 છે.

UDP નો ઉપયોગ સામાન્ય રીતે વિડિયો સ્ટ્રીમિંગ અને જેવી એપ્લિકેશન્સમાં થાય છે કમ્પ્યુટર રમતો, જ્યાં પેકેટ નુકશાન સ્વીકાર્ય છે અને વિનંતીનો ફરીથી પ્રયાસ કરવો મુશ્કેલ છે અથવા વાજબી નથી, અથવા પડકાર-પ્રતિભાવ એપ્લિકેશનમાં (જેમ કે DNS ક્વેરીઝ) જ્યાં કનેક્શન બનાવવા માટે ફરીથી મોકલવા કરતાં વધુ સંસાધનો લે છે. વાસ્તવમાં, UDP ફંક્શન્સ મલ્ટિપ્લેક્સિંગ અને ડિમલ્ટિપ્લેક્સિંગ ઑપરેશન્સ, તેમજ ડેટામાં સરળ ભૂલ તપાસવામાં ઉકળે છે. આમ, U DP નો ઉપયોગ કરતી વખતે, એપ્લિકેશન લગભગ સીધો IP નેટવર્ક લેયર પ્રોટોકોલ સાથે વાતચીત કરે છે.

યુડીપી એપ્લીકેશન લેયરમાંથી સંદેશા મેળવે છે, રીસીવર દ્વારા ડીમલ્ટીપ્લેક્સીંગ માટે સ્ત્રોત અને ગંતવ્ય પોર્ટ ફીલ્ડ ઉમેરે છે, તેમજ અન્ય બે વિશેષ ફીલ્ડ્સ ઉમેરે છે અને પરિણામી સેગમેન્ટને નેટવર્ક લેયરમાં પસાર કરે છે. નેટવર્ક લેયર સેગમેન્ટને ડેટાગ્રામમાં લપેટીને તેને "જો શક્ય હોય તો" ગંતવ્ય હોસ્ટને ફોરવર્ડ કરે છે. જો બાદમાં સફળતાપૂર્વક સેગમેન્ટ મેળવે છે, તો UDP ગંતવ્ય પોર્ટ નંબર ફીલ્ડનો ઉપયોગ કરીને સેગમેન્ટ ડેટાને ઇચ્છિત પ્રક્રિયામાં ફોરવર્ડ કરે છે. તેથી, UDP કનેક્શનલેસ ડેટા ટ્રાન્સફર કરવા માટે કહેવાય છે.

એપ્લિકેશન લેયર પ્રોટોકોલનું ઉદાહરણ જે UDP પ્રોટોકોલ સેવાઓનો ઉપયોગ કરે છે તે DNS છે. જ્યારે DNS એપ્લિકેશન ક્વેરી જનરેટ કરે છે, ત્યારે તે DNS સંદેશ બનાવે છે અને તેને UDP પ્રોટોકોલમાં પસાર કરે છે.


UDP અને TCP પ્રોટોકોલની સરખામણી.

જો એપ્લિકેશનને સંદેશ વિતરણની પુષ્ટિની જરૂર હોય, તો તે પ્રોટોકોલનો ઉપયોગ કરે છે TCP. TCP સંદેશને સેગમેન્ટ તરીકે ઓળખાતા નાના ટુકડાઓમાં તોડે છે. આ સેગમેન્ટ્સને ક્રમિક રીતે ક્રમાંકિત કરવામાં આવે છે અને IP પ્રોટોકોલને પસાર કરવામાં આવે છે, જે પછી પેકેટોને એસેમ્બલ કરે છે. TCP ચોક્કસ એપ્લિકેશન દ્વારા ચોક્કસ હોસ્ટને મોકલવામાં આવેલા સેગમેન્ટ્સની સંખ્યાનો ટ્રૅક રાખે છે. જો મોકલનારને ચોક્કસ સમયગાળાની અંદર કોઈ સ્વીકૃતિ પ્રાપ્ત ન થાય, તો TCP આ વિભાગોને અનાથ ગણે છે અને તેમને ફરીથી મોકલે છે. સંદેશનો માત્ર ખોવાયેલો ભાગ જ રીસેંટ કરવામાં આવે છે, આખો સંદેશ નહીં.

પ્રાપ્ત નોડ પરનો TCP પ્રોટોકોલ સંદેશના ભાગોને ફરીથી એસેમ્બલ કરવા અને તેમને યોગ્ય એપ્લિકેશનમાં ટ્રાન્સમિટ કરવા માટે જવાબદાર છે.

FTP અને HTTP એ એપ્લીકેશનના ઉદાહરણો છે જે ડેટા પહોંચાડવા માટે TCP નો ઉપયોગ કરે છે.

પ્રોટોકોલ યુડીપીબિન-બાંયધરીકૃત ડેટા ડિલિવરી કરે છે અને પ્રાપ્તકર્તા પાસેથી પુષ્ટિની વિનંતી કરતું નથી. UDP એ ઑડિયો, વિડિયો અને વૉઇસ ઓવર ઇન્ટરનેટ પ્રોટોકોલ (VoIP) સ્ટ્રીમિંગ માટે પસંદગીનો પ્રોટોકોલ છે. ડિલિવરીની પુષ્ટિ કરવાથી માત્ર ડેટા ટ્રાન્સફર પ્રક્રિયા ધીમી થઈ જશે, અને ફરીથી ડિલિવરી કરવાની સલાહ આપવામાં આવતી નથી. UDP પ્રોટોકોલના ઉપયોગનું ઉદાહરણ ઈન્ટરનેટ રેડિયો છે.


ARP પ્રોટોકોલ. અરજી.

એઆરપી(અંગ્રેજી) એડ્રેસ રિઝોલ્યુશન પ્રોટોકોલ- સરનામું નિર્ધારણ પ્રોટોકોલ) એ કમ્પ્યુટર નેટવર્કમાં ઉપયોગમાં લેવાતો નિમ્ન-સ્તરનો પ્રોટોકોલ છે, જે જાણીતા નેટવર્ક સ્તર સરનામાંમાંથી લિંક લેયર સરનામું નક્કી કરવા માટે રચાયેલ છે. આ પ્રોટોકોલ ઇથરનેટની ટોચ પર બનેલ IP નેટવર્ક્સની સર્વવ્યાપકતાને કારણે સૌથી વધુ વ્યાપક બન્યો છે, કારણ કે લગભગ 100% કિસ્સાઓમાં આ સંયોજન સાથે ARP નો ઉપયોગ કરવામાં આવે છે. પ્રોટોકોલનું વર્ણન નવેમ્બર 1982માં RFC 826 માં પ્રકાશિત થયું હતું. ARP એ ઇથરનેટ સેગમેન્ટ પર IP પેકેટો ટ્રાન્સમિટ કરવાના કેસ માટે ડિઝાઇન કરવામાં આવ્યું હતું. જેમાં સામાન્ય સિદ્ધાંત, ARP માટે પ્રસ્તાવિત, અન્ય પ્રકારના નેટવર્ક્સ માટે ઉપયોગ કરી શકે છે અને તેનો ઉપયોગ કરવામાં આવ્યો છે.

નીચેના પ્રકારના ARP સંદેશાઓ અસ્તિત્વમાં છે: ARP વિનંતી અને ARP જવાબ. મોકલવાની સિસ્ટમ પ્રાપ્ત કરનાર સિસ્ટમના ભૌતિક સરનામાની વિનંતી કરવા માટે ARP વિનંતીનો ઉપયોગ કરે છે. પ્રતિભાવ (ગંતવ્ય હોસ્ટનું ભૌતિક સરનામું) ARP પ્રતિસાદના સ્વરૂપમાં આવે છે.

નેટવર્ક લેયર પેકેટને ઈથરનેટ સેગમેન્ટ પર મોકલવામાં આવે તે પહેલાં, નેટવર્ક સ્ટેક એઆરપી કેશને તપાસે છે કે શું ગંતવ્ય હોસ્ટ વિશે જરૂરી માહિતી તેમાં પહેલેથી જ નોંધાયેલ છે. જો ARP કેશમાં આવી કોઈ એન્ટ્રી નથી, તો ARP બ્રોડકાસ્ટ વિનંતી કરવામાં આવે છે. નેટવર્ક પરના ઉપકરણો માટેની આ ક્વેરીનો નીચેનો અર્થ છે: "શું કોઈને નીચેનું IP સરનામું ધરાવતા ઉપકરણનું ભૌતિક સરનામું ખબર છે?" જ્યારે આ IP એડ્રેસ ધરાવનાર પ્રાપ્તકર્તા આ પેકેટ મેળવે છે, ત્યારે તેણે જવાબ આપવો પડશે: “હા, આ મારું IP સરનામું છે. મારું ભૌતિક સરનામું છે: …” પછી પ્રેષક તેના ARP કેશને અપડેટ કરશે અને પ્રાપ્તકર્તાને માહિતી ટ્રાન્સમિટ કરવામાં સક્ષમ હશે.

ARP કેશ એન્ટ્રીઓ સ્ટેટિક અથવા ડાયનેમિક હોઈ શકે છે. ઉપર આપેલ ઉદાહરણ ડાયનેમિક કેશ એન્ટ્રીનું વર્ણન કરે છે. તમે ARP કોષ્ટકમાં સ્થિર એન્ટ્રીઓ પણ બનાવી શકો છો.

ARP મૂળરૂપે માત્ર IP પ્રોટોકોલ માટે જ વિકસાવવામાં આવ્યું ન હતું, પરંતુ હવે તેનો ઉપયોગ મુખ્યત્વે IP અને MAC એડ્રેસને મેપ કરવા માટે થાય છે.

ઓપરેશનનો સિદ્ધાંત

એક નોડ કે જેને સ્થાનિક સરનામાં પર IP સરનામાંને મેપ કરવાની જરૂર છે તે ARP વિનંતી જનરેટ કરે છે, તેને લિંક-લેયર પ્રોટોકોલ ફ્રેમમાં દાખલ કરે છે, તેમાં જાણીતું IP સરનામું દર્શાવે છે અને વિનંતીનું પ્રસારણ કરે છે.

સ્થાનિક નેટવર્ક પરના બધા યજમાનો ARP વિનંતી મેળવે છે અને ત્યાં ઉલ્લેખિત IP સરનામાંની તુલના તેમના પોતાના સાથે કરે છે.

જો તેઓ મેળ ખાતા હોય, તો નોડ ARP પ્રતિસાદ જનરેટ કરે છે, જેમાં તે તેનું IP સરનામું અને તેનું સ્થાનિક સરનામું સૂચવે છે અને તેને પહેલેથી જ નિર્દેશિત કરે છે, કારણ કે ARP વિનંતીમાં પ્રેષક તેનું સ્થાનિક સરનામું દર્શાવે છે.

મને ખરેખર લેખોની આખી શ્રેણી ગમે છે, ઉપરાંત હું હંમેશા મારી જાતને અનુવાદક તરીકે અજમાવવા માંગતો હતો. કદાચ લેખ અનુભવી વિકાસકર્તાઓને ખૂબ જ સ્પષ્ટ લાગશે, પરંતુ મને લાગે છે કે તે કોઈપણ સંજોગોમાં ઉપયોગી થશે.

હેલો, મારું નામ ગ્લેન ફિડલર છે અને હું તમને મારી ઑનલાઇન પુસ્તક, નેટવર્ક પ્રોગ્રામિંગ ફોર ગેમ ડેવલપર્સનાં પ્રથમ લેખમાં આવકારું છું.

આ લેખમાં, અમે નેટવર્ક પ્રોગ્રામિંગના સૌથી મૂળભૂત પાસાઓ સાથે પ્રારંભ કરીશું - નેટવર્ક પર ડેટા પ્રાપ્ત કરવો અને ટ્રાન્સમિટ કરવો. ડેટા મેળવવો અને ટ્રાન્સમિટ કરવો એ નેટવર્ક પ્રોગ્રામરો કરે છે તે કાર્યોની સમગ્ર શ્રેણીનો સૌથી મૂળભૂત અને સરળ ભાગ છે, પરંતુ આગળ વધવા માટે કઈ રીત શ્રેષ્ઠ છે તે નક્કી કરવું ઘણીવાર મુશ્કેલ હોય છે. આ ભાગ પર પૂરતું ધ્યાન આપો - જો તમને કોઈ ગેરસમજ રહી જાય, તો તે પછીથી તમારી મલ્ટિપ્લેયર રમત માટે ભયંકર પરિણામો તરફ દોરી શકે છે!

તમે મોટે ભાગે સોકેટ્સ વિશે કંઈક સાંભળ્યું હશે, અને તમે જાણતા હશો કે તે બે મુખ્ય પ્રકારોમાં આવે છે - TCP અને UDP. મલ્ટિપ્લેયર ગેમ ડેવલપ કરતી વખતે તમારે સૌ પ્રથમ નક્કી કરવાની જરૂર છે કે કયા પ્રકારના સોકેટ્સનો ઉપયોગ કરવો - TCP, UDP અથવા બંને?

સોકેટ પ્રકારની પસંદગી સંપૂર્ણપણે તમે વિકાસ કરી રહ્યાં છો તે રમતની શૈલી પર આધારિત છે. લેખોની આ શ્રેણીમાં, હું ધારીશ કે તમે એક એક્શન ગેમ લખી રહ્યા છો - જેમ કે Halo, Battlefield 1942, Quake, Unreal, CounterStrike, Team Fortress, વગેરે.

હવે આપણે દરેક પ્રકારના સોકેટના ગુણધર્મોને નજીકથી જોઈશું (અમે એક્શન-શૈલીની રમત વિકસાવી રહ્યા છીએ તે હકીકતને ધ્યાનમાં લેતા), અને ઈન્ટરનેટ કેવી રીતે કાર્ય કરે છે તેની વિગતોમાં થોડા ઊંડા જઈશું. વિગતવાર સમીક્ષા પછી, યોગ્ય વિકલ્પ સ્પષ્ટ થઈ જશે!

TCP નો અર્થ "ટ્રાન્સમિશન કંટ્રોલ પ્રોટોકોલ" અને IP નો અર્થ "ઇન્ટરનેટ પ્રોટોકોલ" છે. વેબ બ્રાઉઝિંગથી લઈને IRC અને ઈમેલ કમ્યુનિકેશન્સ સુધી તમે ઓનલાઈન કરો છો તે લગભગ દરેક વસ્તુને તેઓ એકસાથે અંડરપિન કરે છે - બધું TCP/IP પર ચાલે છે.

જો તમે ક્યારેય TCP સોકેટ્સનો ઉપયોગ કર્યો હોય, તો તમારે જાણવું જોઈએ કે TCP એ એક પ્રોટોકોલ છે જે વિશ્વસનીય કનેક્શનના સિદ્ધાંતનો ઉપયોગ કરે છે. આનો અર્થ એ છે કે તમે બે કમ્પ્યુટર્સ વચ્ચે જોડાણ સ્થાપિત કરો છો, અને પછી તેમની વચ્ચે ડેટા મોકલો છો, જેમ કે તમે એક કમ્પ્યુટર પર ફાઇલ પર માહિતી લખી રહ્યાં છો અને તે જ ફાઇલમાંથી બીજા કમ્પ્યુટર પર વાંચી રહ્યાં છો.

આ કિસ્સામાં, કનેક્શનને વિશ્વસનીય અને સુસંગત ગણવામાં આવે છે - એટલે કે, તમે મોકલો છો તે બધી માહિતી તે જ ક્રમમાં પ્રાપ્તકર્તા સુધી પહોંચવાની ખાતરી આપવામાં આવે છે જેમાં તે મોકલવામાં આવી હતી. ઉપરાંત, TCP કનેક્શનને ડેટાનો સતત પ્રવાહ ગણી શકાય - પ્રોટોકોલ પોતે ડેટાને પેકેટમાં તોડીને નેટવર્ક પર મોકલવાની કાળજી લે છે.

વધુ એક વખત - બધું સામાન્ય લેખન અથવા ફાઇલમાંથી વાંચવા જેટલું સરળ છે. પ્રાથમિક વોટસન!

પરંતુ ઉપયોગની આ સરળતા ખરેખર "હૂડ હેઠળ" શું થાય છે તેનાથી સંપૂર્ણપણે અલગ છે, નીચલા સ્તરે - IP પ્રોટોકોલ સ્તર.

આ સ્તરે કનેક્શનનો કોઈ ખ્યાલ નથી - તેના બદલે વ્યક્તિગત પેકેટો એક કમ્પ્યુટરથી બીજામાં ટ્રાન્સમિટ થાય છે. તમે આ પ્રક્રિયાને લોકોથી ભરેલા ઓરડામાં એક વ્યક્તિથી બીજી વ્યક્તિમાં નોંધ પસાર કરવા તરીકે વિચારી શકો છો: અંતે નોંધ યોગ્ય વ્યક્તિને મળે છે, પરંતુ તે જ સમયે ઘણા હાથમાંથી પસાર થાય છે.

જો કે, નોટ સરનામાં પર પહોંચશે તેની કોઈ ગેરંટી નથી. પ્રેષક ફક્ત એવી આશામાં એક નોંધ મોકલે છે કે તે આવશે, પરંતુ તે જાણતો નથી કે સંદેશ આવ્યો છે કે નહીં - જ્યાં સુધી પ્રાપ્તકર્તા પાછા લખવાનું નક્કી ન કરે.
સ્વાભાવિક રીતે, વાસ્તવમાં બધું થોડું વધુ જટિલ છે, કારણ કે મોકલનાર કમ્પ્યુટર નેટવર્ક પરના કમ્પ્યુટર્સનો ચોક્કસ ક્રમ જાણતો નથી કે જેના દ્વારા પેકેટને ટ્રાન્સમિટ કરવું આવશ્યક છે જેથી તે શક્ય તેટલી ઝડપથી આવે. કેટલીકવાર IP એક જ પેકેટની બહુવિધ નકલો પ્રસારિત કરે છે, જે ગંતવ્ય સ્થાન સુધી પહોંચવા માટે અલગ-અલગ રસ્તાઓ લઈ શકે છે - અને અલગ-અલગ સમયે પહોંચવાની શક્યતા છે.

જો આપણે કમ્પ્યુટર્સ વચ્ચે માહિતીને ફાઇલ વાંચવા/લેખવાની શૈલીમાં નહીં, પરંતુ વ્યક્તિગત પેકેટો સીધા મોકલીને અને પ્રાપ્ત કરીને સ્થાનાંતરિત કરવા માગીએ તો શું?

સારું, આપણે આ UDP નો ઉપયોગ કરીને કરી શકીએ છીએ. UDP નો અર્થ "વપરાશકર્તા ડેટાગ્રામ પ્રોટોકોલ" છે અને તે IP (જેમ કે TCP) ની ટોચ પર ચાલે છે, પરંતુ એક ટન કાર્યક્ષમતા ઉમેરવાને બદલે તે IP પરનું એક નાનું એડ-ઓન છે.

UDP નો ઉપયોગ કરીને, અમે ચોક્કસ IP સરનામાં (ઉદાહરણ તરીકે, 112.140.20.10) અને પોર્ટ (ઉદાહરણ તરીકે, 52423) પર પેકેટ મોકલી શકીએ છીએ, અને જ્યાં સુધી તે તેના ગંતવ્ય સ્થાને ન પહોંચે (અથવા સાથે ખોવાઈ જાય ત્યાં સુધી તે કમ્પ્યુટરથી કમ્પ્યુટર પર ટ્રાન્સમિટ કરવામાં આવશે. માર્ગ).

તે જ સમયે, રીસીવર બાજુ પર આપણે ચોક્કસ પોર્ટ (અમારા કિસ્સામાં 52423) સાંભળીને બેસીને રાહ જોવી, અને જ્યારે કોઈ વ્યક્તિ પાસેથી પેકેટ આવે (યાદ રાખો કે કોઈ કનેક્શન્સનો ઉપયોગ થતો નથી), ત્યારે અમને આ વિશે સૂચના પ્રાપ્ત થાય છે. મોકલનાર કમ્પ્યુટરનું સરનામું અને પોર્ટ, પેકેટનું કદ અને તે પછી આપણે આ પેકેટમાંથી ડેટા વાંચી શકીએ છીએ.

UDP પ્રોટોકોલ ડેટા ડિલિવરીની બાંયધરી આપતું નથી. વ્યવહારમાં, મોટાભાગના પેકેટો, અલબત્ત, આવે છે, પરંતુ ત્યાં હંમેશા લગભગ 1-5% નું નુકસાન થાય છે, અને કેટલીકવાર એવા સમયગાળા હોય છે જેમાં પેકેટો બિલકુલ આવતા નથી (યાદ રાખો કે મોકલનાર અને પ્રાપ્તકર્તા વચ્ચે હજારો કમ્પ્યુટર્સ હોઈ શકે છે, જેમાંથી કોઈપણ પર તે નિષ્ફળ થઈ શકે છે અથવા તૂટી શકે છે).

ઉપરાંત, UDP પેકેટો કયા ક્રમમાં વિતરિત કરવામાં આવે છે તેની બાંયધરી આપતું નથી. તમે ક્રમમાં પાંચ પેકેટ મોકલી શકો છો - 1, 2, 3, 4, 5 - પરંતુ તે સંપૂર્ણપણે અલગ ક્રમમાં આવી શકે છે - ઉદાહરણ તરીકે, 3, 1, 2, 5, 4. ફરીથી, વ્યવહારમાં, તેઓ મોટે ભાગે મોટાભાગના સમયે યોગ્ય ક્રમમાં આવો, પરંતુ તમે તેના પર વિશ્વાસ કરી શકતા નથી!

છેલ્લે, જ્યારે UDP IP માં વધુ ઉમેરતું નથી, તે એક વસ્તુની ખાતરી આપે છે. જો તમે પેકેટ ફોરવર્ડ કરો છો, તો તે કાં તો સંપૂર્ણપણે આવશે અથવા બિલકુલ નહીં. તેથી, જો તમે બીજા કોમ્પ્યુટર પર 256 બાઈટ પેકેટ મોકલો છો, તો તે પેકેટમાંથી માત્ર પ્રથમ 100 બાઈટ જ પ્રાપ્ત કરી શકતું નથી - તેને તમામ 256 બાઈટ પ્રાપ્ત કરવી આવશ્યક છે. આ ખરેખર એકમાત્ર વસ્તુ છે જેની UDP પ્રોટોકોલ ખાતરી આપે છે - બાકીનું બધું તમારા ખભા પર આવે છે.

તેથી આપણે નક્કી કરવાની જરૂર છે - શું આપણે TCP અથવા UDP સોકેટ્સનો ઉપયોગ કરીએ? ચાલો તેમના ગુણધર્મો પર એક નજર કરીએ:

  • જોડાણ સિદ્ધાંતનો ઉપયોગ કરે છે
  • ડિલિવરી અને ટર્નઅરાઉન્ડની ખાતરી આપે છે
  • માહિતીને આપમેળે પેકેટોમાં વિભાજિત કરે છે
  • ખાતરી કરે છે કે ડેટા ખૂબ સઘન રીતે મોકલવામાં આવ્યો નથી (ડેટા પ્રવાહ નિયંત્રણ)
  • ઉપયોગમાં સરળ - જેમ કે ફાઇલમાંથી લખવું/વાંચવું
UDP:
  • કનેક્શન સિદ્ધાંતનો ઉપયોગ કરતું નથી - તમારે તેને મેન્યુઅલી અમલમાં મૂકવું પડશે
  • પેકેજોની ડિલિવરી અને ડિલિવરીના ઓર્ડરની બાંયધરી આપતું નથી - તે ખોટા ક્રમમાં, ડુપ્લિકેટ સાથે આવી શકે છે, અથવા બિલકુલ નહીં આવે!
  • તમારે મેન્યુઅલી ડેટાને પેકેટમાં વિભાજીત કરીને મોકલવાની જરૂર છે
  • તમારે ખૂબ સઘન ડેટા ન મોકલવા માટે સાવચેત રહેવાની જરૂર છે
  • જો કોઈ પેકેટ ખોવાઈ જાય, તો તમારે તેને કોઈક રીતે ટ્રૅક કરવાની જરૂર છે અને, જો જરૂરી હોય તો, તેને ફરીથી મોકલો
આવી સૂચિ સાથે, ઉકેલ સ્પષ્ટ લાગે છે - TCP આપણને જોઈતી તમામ કાર્યક્ષમતા લાગુ કરે છે અને તેનો ઉપયોગ કરવો વધુ સરળ છે, જ્યારે UDP નો ઉપયોગ શરૂઆતથી બધું જાતે લખવા સાથે હેમોરહોઇડ્સનું વચન આપે છે. તો આપણે TCP નો ઉપયોગ કરીએ છીએ ને?

પણ ના.

TCP નો ઉપયોગ કરવો એ કદાચ સૌથી ખરાબ ભૂલ છે જે તમે મલ્ટિપ્લેયર ગેમ વિકસાવતી વખતે કરી શકો છો. શા માટે તે સમજવા માટે, ચાલો જોઈએ કે TCP શું વાપરવા માટે આટલું સરળ બનાવે છે!

TCP કેવી રીતે કામ કરે છે
TCP અને UDP બંને IP ની ટોચ પર કામ કરે છે, પરંતુ વાસ્તવમાં તેઓ સંપૂર્ણપણે અલગ છે. UDP IP સાથે ખૂબ જ સમાન રીતે વર્તે છે, જ્યારે TCP વપરાશકર્તાને તમામ પેકેટ મુદ્દાઓથી દૂર રાખે છે, જે ફાઇલને વાંચવા/લેખવા જેવી ક્રિયાપ્રતિક્રિયા બનાવે છે.

તો તે કેવી રીતે કરે છે?

પ્રથમ, TCP ડેટા સ્ટ્રીમ એબ્સ્ટ્રેક્શનનો ઉપયોગ કરે છે - તમે તે સ્ટ્રીમમાં ડેટાના બાઇટ્સ ખાલી લખી શકો છો, અને TCP ખાતરી કરશે કે તે તેના ગંતવ્ય સુધી પહોંચે છે. કારણ કે IP પેકેટોમાં ડેટા ટ્રાન્સમિટ કરે છે અને TCP IP ની ટોચ પર ચાલે છે, TCP એ વપરાશકર્તાના ઇનપુટ સ્ટ્રીમને વ્યક્તિગત પેકેટોમાં તોડવું આવશ્યક છે. તેથી, TCP ની અંદર, કેટલાક તર્ક એક કતારમાં ડેટા એકત્રિત કરે છે, અને જ્યારે તે પૂરતું હોય છે, ત્યારે તે એક પેકેટ બનાવે છે અને તેને ગંતવ્ય સ્થાન પર મોકલે છે.

જો અમને ખૂબ જ નાના પેકેટો ટ્રાન્સફર કરવાની જરૂર હોય તો આ વર્તન અમારી મલ્ટિપ્લેયર ગેમ માટે સમસ્યા બની શકે છે. એવું બની શકે છે કે TCP જ્યાં સુધી અમારા ડેટાને ચોક્કસ કદના પેકેટ બનાવવા માટે પૂરતા પ્રમાણમાં એકઠા ન થાય ત્યાં સુધી ટ્રાન્સમિટ ન કરવાનું નક્કી કરે છે (કહો, સો બાઇટ્સ કરતાં વધુ). અને આ એક મોટી સમસ્યા છે, કારણ કે ક્લાયંટ (પ્લેયર કીસ્ટ્રોક) માંથી ડેટાને શક્ય તેટલી ઝડપથી સર્વર પર ટ્રાન્સફર કરવો જરૂરી છે, અને જો પ્રોટોકોલ દ્વારા ડેટા બફરિંગને કારણે વિલંબ થાય છે, તો પછી ક્લાયંટ બાજુના પ્લેયર માટે. રમત સુખદ રીતે સૌથી વધુ નહીં હોય. આ કિસ્સામાં, રમતના ઑબ્જેક્ટ્સને અપડેટ કરવું વિલંબ સાથે અને ભાગ્યે જ થશે - જ્યારે આપણે ઑબ્જેક્ટ્સને સમયસર અને વારંવાર અપડેટ કરવાની જરૂર છે.

TCP પાસે આને ઠીક કરવાનો વિકલ્પ છે - “TCP_NODELAY”. તે પ્રોટોકોલને કહે છે કે ડેટા મોકલવાની કતારમાં એકઠા થાય તેની રાહ ન જુઓ, પરંતુ તેને તરત જ મોકલો.

કમનસીબે, આ વિકલ્પ ઇન્સ્ટોલ કરેલ હોવા છતાં, ઓનલાઈન ગેમ્સમાં ઉપયોગમાં લેવાતી વખતે TCP ને ઘણી સમસ્યાઓ થાય છે.

તમામ સમસ્યાઓનું મૂળ TCP ખોવાયેલા અથવા આઉટ-ઓફ-ઓર્ડર પેકેટોને જે રીતે હેન્ડલ કરે છે તેમાં રહેલું છે, જે વિશ્વસનીય અને સુસંગત કનેક્શનનો ભ્રમ બનાવે છે.

TCP કનેક્શન વિશ્વસનીયતા કેવી રીતે સુનિશ્ચિત કરે છે
ટ્રાન્સમિટ કરતી વખતે, TCP ડેટા સ્ટ્રીમને અલગ પેકેટમાં તોડે છે અને તેનો ઉપયોગ કરીને સમગ્ર નેટવર્ક પર મોકલે છે અવિશ્વસનીય પ્રોટોકોલઆઇપી, અને પછી પ્રાપ્ત કમ્પ્યુટર પર પ્રાપ્ત પેકેટોમાંથી મૂળ પ્રવાહને પુનઃસ્થાપિત કરે છે.

પરંતુ જો એક પેકેટ ન આવે તો શું થાય? અથવા જો પેકેજો ઓર્ડરની બહાર આવે છે, અથવા ડુપ્લિકેટ્સ સાથે?

TCP કેવી રીતે કાર્ય કરે છે તેની વિગતોમાં ખૂબ ઊંડાણપૂર્વક તપાસ કર્યા વિના (અને આ ખરેખર ખૂબ જ જટિલ વિષય છે - તમે તેને TCP/IP ઇલસ્ટ્રેટેડમાં વાંચી શકો છો), પ્રક્રિયા આના જેવી લાગે છે: TCP એક પેકેટ મોકલે છે, નક્કી કરે છે કે પેકેટ આવ્યું નથી. , અને તે જ પેકેટ પ્રાપ્તકર્તાને ફરીથી મોકલે છે. પ્રાપ્તકર્તાની બાજુએ ડુપ્લિકેટ પેકેટો નાબૂદ કરવામાં આવે છે, અને જે પેકેટો ઓર્ડરની બહાર આવે છે તે ફરીથી ગોઠવવામાં આવે છે જેથી બધું જેવું હોવું જોઈએ - વિશ્વસનીય અને ક્રમમાં હોય.

સમસ્યા એ છે કે જ્યારે TCP ડેટા સ્ટ્રીમને આ રીતે "સિંક્રનાઇઝ" કરે છે, જો પેકેટ ખોવાઈ જાય, તો જ્યાં સુધી ખોવાયેલ પેકેટ ફરીથી મોકલવામાં ન આવે (અને ગંતવ્ય સ્થાન દ્વારા પ્રાપ્ત ન થાય) ત્યાં સુધી ટ્રાન્સમિશન અટકે છે. જો રાહ જોતી વખતે નવો ડેટા આવે છે, તો તે કતારમાં હશે અને જ્યાં સુધી ખોવાયેલ પેકેટ ન આવે ત્યાં સુધી તમે તેને વાંચી શકશો નહીં. પેકેજ ફરીથી મોકલવામાં કેટલો સમય લાગે છે? તે પેકેટનો ઓછામાં ઓછો રાઉન્ડ-ટ્રીપ સમય લે છે (જ્યારે TCP નક્કી કરે છે કે કયું પેકેટ ફરીથી મોકલવું), ઉપરાંત ખોવાયેલા પેકેટને ફરીથી પહોંચાડવા માટેનો સમય. તેથી, જો કમ્પ્યુટર્સ વચ્ચેની પિંગ 125 ms હોય, તો પેકેટને ફરીથી ટ્રાન્સમિટ કરવામાં સેકન્ડના પાંચમા ભાગનો સમય લાગશે, અને સૌથી ખરાબ કિસ્સામાં, અડધી સેકન્ડ સુધી (કલ્પના કરો કે રીસેંટ પેકેટ પણ અચાનક ખોવાઈ જાય). વેસેલુખા!

શા માટે તમારે મલ્ટિપ્લેયર રમતો માટે ક્યારેય TCP નો ઉપયોગ કરવો જોઈએ નહીં
ઓનલાઈન ગેમ્સમાં TCP નો ઉપયોગ કરવામાં સમસ્યા એ છે કે, બ્રાઉઝર્સ, ઈમેલ અને અન્ય એપ્લીકેશનથી વિપરીત, ગેમ્સ રીઅલ-ટાઇમ ક્રિયાપ્રતિક્રિયા પર આધાર રાખે છે. રમતના ઘણા પાસાઓ માટે, જેમ કે વપરાશકર્તાના કીસ્ટ્રોક અને રમતમાં ખેલાડીઓની સ્થિતિ, એક સેકન્ડ પહેલા શું થયું હતું તેનાથી કોઈ ફરક પડતો નથી, પરંતુ માત્ર રમત જગતની સૌથી વર્તમાન સ્થિતિ છે.

ચાલો મલ્ટિપ્લેયર ગેમનું એક સરળ ઉદાહરણ જોઈએ, જેમ કે 3D શૂટર. રમતનો નેટવર્ક ભાગ ખૂબ જ સરળ રીતે બનાવવામાં આવ્યો છે: રમત ચક્રના દરેક પુનરાવર્તન, ક્લાયંટ સર્વરને પ્લેયરની બધી ક્રિયાઓ (કીઓ દબાવવામાં, માઉસની સ્થિતિ, વગેરે) નું વર્ણન મોકલે છે, અને દરેક પુનરાવર્તન પર સર્વર આ ડેટા પર પ્રક્રિયા કરે છે. , રમતની દુનિયાના મોડલને અપડેટ કરે છે અને વર્તમાનને વિશ્વની વસ્તુઓના ક્લાયંટ સ્થાનો પર પાછા મોકલે છે જેથી તે ખેલાડી માટે નવી ફ્રેમ દોરે.

તેથી, અમારી રમતમાં, જો નેટવર્ક પર પ્રસારિત કરતી વખતે પેકેટ ખોવાઈ જાય, તો રમત અટકી જાય છે અને પેકેટ ફરીથી વિતરિત થાય ત્યાં સુધી રાહ જુએ છે. ક્લાયંટ બાજુ પર, રમતના પદાર્થો સ્થિર થાય છે, અને સર્વર પર, ખેલાડીઓ પણ ખસેડી શકતા નથી અથવા શૂટ કરી શકતા નથી કારણ કે સર્વર નવા પેકેટો સ્વીકારી શકતું નથી. જ્યારે ખોવાયેલ પેકેટ આખરે આવે છે, ત્યારે તેમાં જૂની માહિતી હોય છે જે હવે સંબંધિત નથી. વધુમાં, આ પછી, તે બધા પેકેટો કે જે રાહ જોવાના સમય દરમિયાન કતારમાં એકઠા થયા છે તે પણ આવે છે, અને તે બધાને લૂપના એક પુનરાવર્તનમાં પ્રક્રિયા કરવાની જરૂર છે. સંપૂર્ણ મૂંઝવણ!

કમનસીબે, TCP ની આ વર્તણૂકને બદલવાની કોઈ રીત નથી, અને તેની કોઈ જરૂર નથી, કારણ કે આ TCP નો અર્થ છે. ઇન્ટરનેટ પર ડેટા ટ્રાન્સમિશનને વિશ્વસનીય અને સુસંગત ડેટા ફ્લો બનાવવા માટે આ જરૂરી છે.
પરંતુ અમને વિશ્વસનીય અને સુસંગત ડેટા સ્ટ્રીમની જરૂર નથી.

ક્લાયંટથી સર્વર પર શક્ય તેટલી ઝડપથી પહોંચવા માટે અમને ડેટાની જરૂર છે, અને અમે ડેટા ફરીથી મોકલવાની રાહ જોવા માંગતા નથી.
આ કારણે તમારે મલ્ટિપ્લેયર ગેમ્સ માટે ક્યારેય TCP નો ઉપયોગ કરવો જોઈએ નહીં.

પરંતુ રાહ જુઓ! શા માટે હું UDP અને TCP બંનેનો એકસાથે ઉપયોગ કરી શકતો નથી?

રીઅલ-ટાઇમ ગેમ ડેટા માટે, જેમ કે વપરાશકર્તાની ક્લિક્સ અને ગેમ વર્લ્ડ સ્ટેટ, ફક્ત સૌથી વર્તમાન ડેટા જ મહત્વપૂર્ણ છે, પરંતુ અન્ય પ્રકારના ડેટા માટે, જેમ કે એક કમ્પ્યુટરથી બીજા કમ્પ્યુટર પર મોકલવામાં આવેલા આદેશોના સેટ, ચેનલની વિશ્વસનીયતા અને સુસંગતતા. ખૂબ જ મહત્વપૂર્ણ હોઈ શકે છે.

અલબત્ત, તે યુઝર ઇનપુટ અને વર્લ્ડ સ્ટેટ ડેટા માટે UDP અને ડેટા માટે TCP નો ઉપયોગ કરવા માટે આકર્ષક છે જે ડિલિવર કરવાની ખાતરી આપવી જોઈએ. તમે એવું પણ વિચારતા હશો કે તમે આદેશોના બહુવિધ "થ્રેડો" બનાવી શકો છો - ઉદાહરણ તરીકે, એક લોડિંગ લેવલ માટે, બીજો AI આદેશો માટે. તમે વિચારી રહ્યાં છો, "જો લેવલ લોડ કરવા માટેનો ડેટા પેકેટ ખોવાઈ જાય તો મને AI ટીમોની લાઈનમાં રાહ જોવાની જરૂર નથી, કારણ કે તેઓ સંપૂર્ણપણે અસંબંધિત છે!" આ કિસ્સામાં, તમે સાચા છો, અને તમે દરેક આદેશ પ્રવાહ માટે TCP સોકેટ બનાવવાનું નક્કી કરી શકો છો.

પ્રથમ નજરમાં, આ એક સરસ વિચાર છે. પરંતુ સમસ્યા એ છે કે TCP અને UDP બંને IP ની ટોચ પર ચાલતા હોવાથી, બંને પ્રોટોકોલના પેકેટો એકબીજાને અસર કરશે - પહેલેથી જ IP સ્તર પર. આ અસર પોતે કેવી રીતે પ્રગટ થશે તે ખૂબ જ જટિલ પ્રશ્ન છે, અને તે TCP માં વિશ્વસનીયતા પદ્ધતિઓ સાથે સંબંધિત છે. પરંતુ, કોઈ પણ સંજોગોમાં, ધ્યાન રાખો કે TCP નો ઉપયોગ સામાન્ય રીતે UDP પેકેટ નુકશાનમાં વધારો તરફ દોરી જાય છે. જો તમે આ વિશે વધુ જાણવા માંગતા હો, તો તમે આ લેખ વાંચી શકો છો.

નિષ્કર્ષ
હું માત્ર UDP નો ઉપયોગ કરવાની ભલામણ કરું છું, પરંતુ માત્ર UDP નો ઉપયોગ કરું છું અને બીજું કંઈ નહીં. TCP અને UDP નો એકસાથે ઉપયોગ કરશો નહીં - તેના બદલે, UDP ના આધારે તમને તમારી જાતે જોઈતી TCP સુવિધાઓનો અમલ કેવી રીતે કરવો તે શીખો.

નીચેના લેખોમાં હું તમને કહીશ કે આ કેવી રીતે કરવું - UDP-આધારિત કનેક્શનનો ઉપયોગ કરીને તમારા પોતાના પ્રોટોકોલને અમલમાં મૂકવાથી લઈને ટ્રાન્સમિશન વિશ્વસનીયતા અને ડેટા ફ્લો કંટ્રોલનો અમલ કરવા સુધી.

પરિચય

UDP એ એક સરળ ડેટાગ્રામ-લક્ષી પરિવહન સ્તર પ્રોટોકોલ છે: પ્રક્રિયા એક સમયે એક UDP ડેટાગ્રામ રજૂ કરે છે, પરિણામે એક IP ડેટાગ્રામ ટ્રાન્સમિટ થાય છે. આ TCP જેવા ફ્લો-ઓરિએન્ટેડ પ્રોટોકોલથી વિપરીત છે, જ્યાં એપ્લિકેશન દ્વારા આઉટપુટ કરવામાં આવે છે તે ડેટાનો જથ્થો મોકલેલા IP ડેટાગ્રામની સંખ્યા સાથે વર્ચ્યુઅલ રીતે કોઈ સંબંધ નથી.

આકૃતિ 11.1 UDP ડેટાગ્રામને IP ડેટાગ્રામમાં એન્કેપ્સ્યુલેશન બતાવે છે.

આકૃતિ 11.1 UDP એન્કેપ્સ્યુલેશન.

સત્તાવાર UDP સ્પષ્ટીકરણ RFC 768 [પોસ્ટેલ 1980] માં આપવામાં આવ્યું છે.

UDP એ અવિશ્વસનીય પ્રોટોકોલ છે: તે ડેટાગ્રામ્સ મોકલે છે જે એપ્લિકેશન IP લેયર પર લખે છે, પરંતુ તેની કોઈ ગેરેંટી નથી કે તેઓ તેમના અંતિમ મુકામ પર પહોંચી જશે. વિશ્વસનીયતાના દૃષ્ટિકોણથી, તમે UDP નો ઉપયોગ ટાળવા અને હંમેશા TCP જેવા વિશ્વસનીય પ્રોટોકોલનો ઉપયોગ કરવા માટે લલચાઈ શકો છો. TCP માં આવરી લીધા પછી, અમે આ વિષય પર પાછા જઈશું અને જોઈશું કે કયા પ્રકારની એપ્લિકેશનો UDP નો ઉપયોગ કરી શકે છે.

એપ્લિકેશનને પરિણામી IP ડેટાગ્રામના કદ વિશે ચિંતા કરવાની જરૂર નથી. જો તે આપેલ નેટવર્ક માટે MTU કરતા કદમાં મોટું હોય (પ્રકરણ 2, વિભાગ જુઓ), તો IP ડેટાગ્રામ ખંડિત થઈ જશે. આ દરેક નેટવર્કને લાગુ પડે છે કે જેમાંથી ડેટાગ્રામ તેના સ્ત્રોતથી ગંતવ્ય સુધીના માર્ગમાં પસાર થશે, સિવાય કે પ્રથમ નેટવર્ક કે જેની સાથે મોકલનાર હોસ્ટ જોડાયેલ છે. (અમે પ્રકરણ 2 માં એક વિભાગમાં પરિવહન MTU ના ખ્યાલને વ્યાખ્યાયિત કર્યો છે.) IP ફ્રેગમેન્ટેશનની આ પ્રકરણના એક વિભાગમાં વધુ વિગતવાર ચર્ચા કરવામાં આવશે.

UDP હેડર

આકૃતિ 11.2 UDP હેડરમાં હાજર ક્ષેત્રો દર્શાવે છે.

આકૃતિ 11.2 UDP હેડર.

પોર્ટ નંબરો મોકલવા અને પ્રાપ્ત કરવાની પ્રક્રિયાઓ સૂચવે છે. તે દર્શાવે છે કે TCP અને UDP ડેસ્ટિનેશન પોર્ટ નંબરનો ઉપયોગ IPમાંથી આવતા ડિમલ્ટિપ્લેક્સ ડેટા માટે કરે છે. TCP અને UDP (IP હેડરમાં પ્રોટોકોલ વેલ્યુનો ઉપયોગ કરીને) માટે IP ડેમલ્ટિપ્લેક્સ ઇનકમિંગ IP ડેટાગ્રામને કારણે, TCP TCP પોર્ટ નંબરો પર જુએ છે, અને UDP UDP પોર્ટ નંબરો પર જુએ છે. TCP પોર્ટ નંબરો UDP પોર્ટ નંબરોથી સ્વતંત્ર છે.

આ સ્વતંત્રતા હોવા છતાં, જો TCP અને UDP બંને દ્વારા આરક્ષિત સેવા પૂરી પાડવામાં આવે છે, તો સામાન્ય રીતે બંને પરિવહન સ્તરો માટે સમાન પોર્ટ નંબર પસંદ કરવામાં આવે છે. આ સુવિધા માટે કરવામાં આવે છે અને પ્રોટોકોલની જરૂરિયાત તરીકે નહીં.

UDP લંબાઈ ફીલ્ડમાં UDP હેડર અને UDP ડેટાની બાઇટ્સ લંબાઈ હોય છે. આ ક્ષેત્ર માટે ન્યૂનતમ મૂલ્ય 8 બાઇટ્સ છે. (જો શૂન્ય ડેટા લંબાઈ સાથેનો UDP ડેટાગ્રામ મોકલવામાં આવે તો કંઈ ખરાબ થશે નહીં.) UDP લંબાઈ પરિમાણ રીડન્ડન્ટ છે. IP ડેટાગ્રામ તેની કુલ લંબાઈ બાઈટમાં ધરાવે છે, તેથી UDP ડેટાગ્રામની લંબાઈ એ IP હેડરની લંબાઈને બાદ કરતાં કુલ લંબાઈ છે (જે પર હેડર લંબાઈ ફીલ્ડમાં ઉલ્લેખિત છે).

UDP ચેકસમ

UDP ચેકસમ UDP હેડર અને UDP ડેટાને આવરી લે છે. યાદ કરો કે IP હેડરમાં ચેકસમ માત્ર IP હેડરને આવરી લે છે - તે IP ડેટાગ્રામમાં સમાવિષ્ટ ડેટાને આવરી લેતું નથી. UDP અને TCP બંને તેમના હેડરમાં ચેકસમ ધરાવે છે, જે હેડર અને ડેટા બંનેને આવરી લે છે. UDP માટે ચેકસમ વૈકલ્પિક છે, પરંતુ TCP માટે તે જરૂરી છે.

UDP ચેકસમની ગણતરી બરાબર એ જ રીતે કરવામાં આવે છે જેમ કે (પ્રકરણ 3, વિભાગ) IP હેડર ચેકસમ (ઓવરફ્લો સાથે 16-બીટ શબ્દોનો સરવાળો), જો કે તેમાં તફાવતો છે. સૌપ્રથમ, UDP ડેટાગ્રામમાં બાઈટની વિચિત્ર સંખ્યા હોઈ શકે છે, જ્યારે ચેકસમ ગણતરીમાં 16-બીટ શબ્દો ઉમેરવાનો સમાવેશ થાય છે. જો ચેકસમની ગણતરી કરવા માટે જરૂરી હોય તો આ ડેટાગ્રામના અંતમાં શૂન્ય પેડિંગ બાઇટ્સ ઉમેરે છે. (પેડિંગ બાઇટ્સ પ્રસારિત થતા નથી.)

UDP અને TCP માં, 12-બાઇટ સ્યુડો-હેડર છે (UDP ડેટાગ્રામ અને TCP સેગમેન્ટમાં) માત્ર ચેકસમની ગણતરી કરવાના હેતુથી. સ્યુડો-હેડરમાં IP હેડરમાંથી અમુક ફીલ્ડ હોય છે. આ બધું બે વાર તપાસવા માટે કરવામાં આવે છે કે ડેટા તેના ઇચ્છિત ગંતવ્ય પર પહોંચી ગયો છે (IP તે હોસ્ટને સંબોધિત ન હોય તેવા ડેટાગ્રામને સ્વીકારશે નહીં, અને અન્ય ઉપલા સ્તર માટે નિર્ધારિત UDP ડેટાગ્રામ ફોરવર્ડ કરી શકશે નહીં). આકૃતિ 11.3 સ્યુડો-હેડર અને UDP ડેટાગ્રામ બતાવે છે.

આકૃતિ 11.3 UDP ચેકસમની ગણતરી કરવા માટે વપરાયેલ ક્ષેત્રો.

આ આકૃતિમાં, અમે ખાસ કરીને વિષમ લંબાઈ સાથેનો ડેટાગ્રામ બતાવ્યો છે, જે કિસ્સામાં ચેકસમની ગણતરી કરવા માટે વધારાની બાઈટની જરૂર પડે છે. નોંધ કરો કે ચેકસમની ગણતરી કરતી વખતે UDP ડેટાગ્રામ લંબાઈ બે વાર દેખાય છે.

જો ગણતરી કરેલ ચેકસમ 0 હોય, તો તે તમામ બિટ્સ (65535) તરીકે સંગ્રહિત થાય છે, આ મૂલ્યો એક-પૂરક અંકગણિતમાં સમકક્ષ હોય છે. જો ટ્રાન્સમિટ થયેલ ચેકસમ 0 છે, તો તેનો અર્થ એ છે કે પ્રેષકે ચેકસમની ગણતરી કરી નથી.

જો પ્રેષક ચેકસમની ગણતરી કરે છે અને પ્રાપ્તકર્તા નક્કી કરે છે કે કોઈ ભૂલ છે, તો UDP ડેટાગ્રામ શાંતિપૂર્વક નાશ પામે છે અને કોઈ ભૂલ સંદેશો જનરેટ થતો નથી. (જો IP લેયર IP હેડર ચેકસમમાં ભૂલ શોધે તો તે જ વસ્તુ થાય છે.)

UDP ચેકસમની ગણતરી પ્રેષક દ્વારા કરવામાં આવે છે અને પ્રાપ્તકર્તા દ્વારા તેની ચકાસણી કરવામાં આવે છે. તે તમને UDP હેડરમાં અથવા પ્રેષક અને પ્રાપ્તકર્તા વચ્ચેના માર્ગમાં થયેલા કોઈપણ ફેરફારોને નિર્ધારિત કરવાની મંજૂરી આપે છે.

જો કે UDP ચેકસમ એક વૈકલ્પિક પરિમાણ છે, તે હંમેશા ગણતરી કરવી આવશ્યક છે. 1980 ના દાયકાના અંતમાં, કેટલાક કમ્પ્યુટર ઉત્પાદકોએ UDP નો ઉપયોગ કરતી નેટવર્ક ફાઇલ સિસ્ટમ (NFS) ની ઝડપ વધારવા માટે મૂળભૂત રીતે UDP ચેકસમ ગણતરીને અક્ષમ કરવાનું શરૂ કર્યું. આ એક જ LAN પર સ્વીકાર્ય હોઈ શકે છે જ્યાં ડેટા લિન્ક લેયર (ઈથરનેટ અથવા ટોકન રિંગ ફ્રેમ્સ) પર ફ્રેમ્સ માટે CRCની ગણતરી કરવામાં આવે છે, જેનો ઉપયોગ ડેટાગ્રામ રાઉટરમાંથી પસાર થતાં ફ્રેમના ભ્રષ્ટાચારને નિર્ધારિત કરવા માટે થઈ શકે છે. માનો કે ના માનો, એવા રાઉટર્સ છે કે જેમના સોફ્ટવેર અથવા હાર્ડવેરમાં બગ્સ હોય છે જે તેઓ રૂટ કરેલા ડેટાગ્રામમાં બિટ્સને બદલે છે. જો ચેકસમ વિકલ્પ અક્ષમ હોય તો UDP ડેટાગ્રામમાં આ ભૂલો શોધી શકાતી નથી. એ પણ નોંધવું જોઈએ કે કેટલાક લિંક લેયર પ્રોટોકોલ (દા.ત. SLIP) માં લિંકમાંના ડેટા માટે ચેકસમ ગણતરીનું કોઈ સ્વરૂપ નથી.

હોસ્ટ જરૂરીયાતો RFC માટે જરૂરી છે કે UDP ચેકસમ ગણતરી ડિફોલ્ટ રૂપે સક્ષમ કરવામાં આવે. તેઓને એ પણ જરૂરી છે કે પ્રાપ્ત ચેકસમ ચકાસાયેલ હોવું આવશ્યક છે જો તેની ગણતરી પ્રેષક દ્વારા કરવામાં આવી હોય (જો પ્રાપ્ત ચેકસમ શૂન્ય ન હોય તો). કેટલાક અમલીકરણો આની અવગણના કરે છે અને જો આઉટગોઇંગ ચેકસમની ગણતરી કરવાનો વિકલ્પ સક્ષમ હોય તો પ્રાપ્ત થયેલ ચેકસમ તપાસો.

tcpdump આદેશનું આઉટપુટ

ચોક્કસ સિસ્ટમ પર UDP ચેકસમ ગણતરી વિકલ્પ સક્ષમ છે કે કેમ તે નિર્ધારિત કરવું ખૂબ મુશ્કેલ છે. સામાન્ય રીતે એપ્લિકેશનને પ્રાપ્ત UDP હેડરના ચેકસમ ફીલ્ડની ઍક્સેસ હોતી નથી. આ સમસ્યાને ઉકેલવા માટે, લેખકે tcpdump પ્રોગ્રામમાં બીજો વિકલ્પ ઉમેર્યો, જેના પછી તેણે પ્રાપ્ત UDP ચેકસમનું આઉટપુટ કરવાનું શરૂ કર્યું. જો પ્રાપ્ત મૂલ્ય 0 છે, તો તેનો અર્થ એ છે કે પ્રેષકે ચેકસમની ગણતરી કરી નથી.

આકૃતિ 11.4 અમારા નેટવર્ક પર ત્રણ અલગ-અલગ સિસ્ટમ્સમાંથી અને આઉટપુટ બતાવે છે. અમે સ્ટાન્ડર્ડ ઇકો સર્વર પર 9 બાઇટ્સ ડેટા સાથે સિંગલ UDP ડેટાગ્રામ મોકલીને સોક() પ્રોગ્રામ ચલાવ્યો.

>

1 0.0 sun.1900 > gemini.echo: udp 9 (UDP cksum=6e90)
2 0.303755 (0.3038) gemini.echo > sun.1900: udp 9 (UDP cksum=0)

3 17.392480 (17.0887) sun.1904 > aix.echo: udp 9 (UDP cksum=6e3b)
4 17.614371 (0.2219) aix.echo > sun.1904: udp 9 (UDP cksum=6e3b)

5 32.092454 (14.4781) sun.1907 > solaris.echo: udp 9 (UDP cksum=6e74)
6 32.314378 (0.2219) solaris.echo > sun.1907: udp 9 (UDP cksum=6e74)

આકૃતિ 11.4 tcpdump માંથી આઉટપુટ, જેનો ઉપયોગ ચોક્કસ હોસ્ટ પર UDP ચેકસમ વિકલ્પ સક્રિય થયેલ છે કે કેમ તે નક્કી કરવા માટે કરી શકાય છે.

અહીંથી આપણે જોઈ શકીએ છીએ કે ત્રણમાંથી બે સિસ્ટમમાં UDP ચેકસમ વિકલ્પ સક્ષમ છે.

એ પણ નોંધો કે આઉટગોઇંગ ડેટાગ્રામમાં ઇનકમિંગ ડેટાગ્રામ (લાઇન 3 અને 4, 5 અને 6) જેવા જ ચેકસમ હોય છે. આકૃતિ 11.3 માં, તમે જોશો કે બે પોર્ટ નંબરની જેમ બે IP સરનામાઓ સ્વેપ થઈ ગયા છે. સ્યુડો-હેડર અને UDP હેડરમાં અન્ય ફીલ્ડ્સ એ જ રહ્યા કારણ કે ડેટા ઇકો કરવામાં આવ્યો હતો. આ પુષ્ટિ કરે છે કે UDP ચેકસમ (અને ખરેખર TCP/IP પ્રોટોકોલ પરિવારમાંના તમામ ચેકસમ) એક સરળ 16-બીટ રકમ છે. તેની સહાયથી, ભૂલ શોધવાનું અશક્ય છે, જેમાં બે 16-બીટ મૂલ્યોના સ્થાનોને બદલવાનો સમાવેશ થાય છે.

કેટલાક આંકડા

[મોગલ 1992] એકદમ વ્યસ્ત NFS સર્વર પર ચેકસમ ભૂલોની ઘટના વિશે કેટલીક આંકડાકીય માહિતી પ્રદાન કરે છે જે 40 દિવસથી ચાલી રહ્યું છે. આકૃતિ 11.5 આંકડાકીય માહિતી દર્શાવે છે.

ચેકસમમાં ભૂલોની સંખ્યા

પેકેજોની અંદાજિત સંખ્યા

ઈથરનેટ
આઈપી
યુડીપી
TCP

આકૃતિ 11.5 ચેકસમનો ઉપયોગ કરીને ઓળખવામાં આવેલા દૂષિત પેકેટોના આંકડા.

છેલ્લી કૉલમ પેકેટોની અંદાજિત સંખ્યા બતાવે છે, કારણ કે અન્ય પ્રોટોકોલ ઈથરનેટ અને IP સ્તરનો ઉપયોગ કરે છે. ઉદાહરણ તરીકે, તમામ ઈથરનેટ ફ્રેમનો ઉપયોગ IP ડેટાગ્રામ દ્વારા થતો નથી; ARP પણ ઈથરનેટનો ઉપયોગ કરે છે. બધા IP ડેટાગ્રામ UDP અથવા TCP દ્વારા ઉપયોગમાં લેવાતા નથી, કારણ કે ICMP પણ IP નો ઉપયોગ કરે છે.

નોંધ કરો કે UDP ચેકસમ ભૂલો કરતાં નોંધપાત્ર રીતે વધુ TCP ચેકસમ ભૂલો મળી આવી હતી. આ મોટે ભાગે એ હકીકતને કારણે છે કે TCP સામાન્ય રીતે "લાંબા-અંતરના" જોડાણો સ્થાપિત કરે છે (જે ઘણા રાઉટર્સ, પુલ વગેરેમાંથી પસાર થાય છે), જ્યારે UDP ટ્રાફિક સામાન્ય રીતે સ્થાનિક હોય છે.

તેથી, નીચેની લાઇનમાં સૂચિબદ્ધ ભૂલો હંમેશા ડેટા લિંક સ્તર (ઇથરનેટ, ટોકન રિંગ) સાથે સંબંધિત નથી. ડેટા ટ્રાન્સફર કરતી વખતે, તમારે હંમેશા અંતિમ બિંદુઓ પર ચેકસમ વિકલ્પને સક્ષમ કરવો જોઈએ. જો કે, જો ટ્રાન્સમિટ કરવામાં આવી રહેલ ડેટા અમુક મૂલ્યનો હોય, તો તમારે UDP અથવા TCP ચેકસમ પર સંપૂર્ણ વિશ્વાસ ન કરવો જોઈએ, કારણ કે આ સરળ ચેકસમ છે અને તે તમામ સંભવિત ભૂલોથી ડેટાને સુરક્ષિત રાખવાની ખાતરી આપતા નથી.

સરળ ઉદાહરણ

અમે કેટલાક UDP ડેટાગ્રામ જનરેટ કરવા માટે સોક પ્રોગ્રામનો ઉપયોગ કરીશું, જે અમે tcpdump નો ઉપયોગ કરીને જોઈશું:

>bsdi % sock -v -u -i -n4 svr4 કાઢી નાખો
140.252.13.35.1108 થી 140.252.13.34.9 ના રોજ જોડાયેલ

bsdi % sock -v -u -i -n4 -w0 svr4 કાઢી નાખો
140.252.13.35.1110 થી 140.252.13.34.9 ના રોજ જોડાયેલ

પ્રોગ્રામ શરૂ કરવાના પ્રથમ કિસ્સામાં, ડીબગ મોડ સેટ કરવામાં આવે છે ( -v), જ્યારે તમે ગતિશીલ રીતે અસાઇન કરેલા પોર્ટની સંખ્યા જોઈ શકો છો, UDP ડિફૉલ્ટ રૂપે TCP ને બદલે (-u) નિર્દિષ્ટ કરવામાં આવે છે, અને સ્રોત મોડ સેટ કરવામાં આવે છે, વિકલ્પ ( -i), આનો અર્થ એ છે કે અમે માનક ઇનપુટમાંથી વાંચવાને બદલે અથવા માનક આઉટપુટ પર લખવાને બદલે ડેટા મોકલીશું. -n4 વિકલ્પ તેને ગંતવ્ય હોસ્ટ svr4 પર 4 ડેટાગ્રામ (1024 ના ડિફોલ્ટને બદલે) આઉટપુટ કરવા કહે છે. કાઢી નાખો સેવા પ્રકરણ 1 માં વિભાગમાં વર્ણવેલ છે. અમે રેકોર્ડ દીઠ 1024 બાઇટ્સનું ડિફોલ્ટ આઉટપુટ કદનો ઉપયોગ કરીએ છીએ.

બીજી વાર જ્યારે અમે પ્રોગ્રામ ચલાવ્યો, -w0 નો ઉલ્લેખ કરીને, આ શૂન્ય લંબાઈના ડેટાગ્રામ્સનું નિર્માણ કરશે. આકૃતિ 11.6 બે ઉદાહરણો માટે tcpdump આદેશનું આઉટપુટ બતાવે છે.

>

1 0.0 bsdi.1108 > svr4. discard: udp 1024
2 0.002424 (0.0024) bsdi.1108 > svr4. discard: udp 1024
3 0.006210 (0.0038) bsdi.1108 > svr4. discard: udp 1024
4 0.010276 (0.0041) bsdi.1108 > svr4. discard: udp 1024

5 41.720114 (41.7098) bsdi.1110 > svr4. discard: udp 0
6 41.721072 (0.0010) bsdi.1110 > svr4. discard: udp 0
7 41.722094 (0.0010) bsdi.1110 > svr4. discard: udp 0
8 41.723070 (0.0010) bsdi.1110 > svr4. discard: udp 0

આકૃતિ 11.6 tcpdump આદેશનું આઉટપુટ જ્યારે UDP ડેટાગ્રામ એક દિશામાં મોકલવામાં આવે છે.

આઉટપુટ ચાર 1024-બાઇટ ડેટાગ્રામ બતાવે છે અને ત્યારબાદ ચાર શૂન્ય-લંબાઈના ડેટાગ્રામ. દરેક ડેટાગ્રામ કેટલાક મિલિસેકન્ડના અંતરાલ સાથે પાછલા એકને અનુસરે છે. (બીજો આદેશ દાખલ કરવામાં 41 સેકન્ડનો સમય લાગ્યો.)

પ્રથમ ડેટાગ્રામ મોકલવામાં આવ્યો તે પહેલાં, મોકલનાર અને પ્રાપ્તકર્તા વચ્ચે કોઈ જોડાણ નહોતું. (ટીસીપીની અમારી ચર્ચામાં, અમે બતાવીએ છીએ કે ડેટાનો પ્રથમ બાઇટ મોકલવામાં આવે તે પહેલાં કનેક્શન સ્થાપિત કરવું આવશ્યક છે.) એ નોંધવું મહત્વપૂર્ણ છે કે જ્યારે પ્રાપ્તકર્તા ડેટા પ્રાપ્ત કરે છે ત્યારે તે સ્વીકૃતિ જારી કરતું નથી. પ્રેષક, આ ઉદાહરણમાં, દૂરસ્થ છેડે ડેટા પ્રાપ્ત થયો છે કે કેમ તે અંગે કોઈ ખ્યાલ નથી.

છેલ્લે, નોંધ કરો કે જ્યારે પણ તમે પ્રોગ્રામ ચલાવો છો ત્યારે UDP સ્ત્રોત પોર્ટ નંબર બદલાય છે. પોર્ટ પહેલા 1108 હતું, પછી 1110. પ્રકરણ 1 વિભાગમાં, અમે દર્શાવ્યું હતું કે ક્લાયંટ દ્વારા ઉપયોગમાં લેવાતા ગતિશીલ રીતે સોંપેલ પોર્ટ નંબરો સામાન્ય રીતે 1024 થી 5000 સુધીના હોય છે.

IP ફ્રેગમેન્ટેશન

આકૃતિ 11.9 આ કેસ માટે ICMP અગમ્ય ભૂલ ફોર્મેટ બતાવે છે. તે દર્શાવેલ ફોર્મેટથી અલગ છે કારણ કે બીજા 32-બીટ શબ્દમાં બિટ્સ 16-31 0 પર સેટ થવાને બદલે આગામી હોપ MTU સમાવી શકે છે.

આકૃતિ 11.9 જ્યારે ફ્રેગમેન્ટેશન જરૂરી હોય ત્યારે ICMP અગમ્ય ભૂલ, પરંતુ "ટુકડો ન કરો" બીટ સેટ કરેલ છે.

જો રાઉટર આ નવા ICMP એરર ફોર્મેટને સપોર્ટ કરતું નથી, તો આગામી હોપ MTU 0 પર સેટ છે.

નવી રાઉટર જરૂરીયાતો RFC [Almquist 1993] સ્પષ્ટ કરે છે કે જ્યારે રાઉટર ICMP અગમ્ય સંદેશ ઇશ્યુ કરે ત્યારે તેણે આ નવું ફોર્મ જનરેટ કરવું આવશ્યક છે.

નેટબી રાઉટર અને હોસ્ટ સન વચ્ચે SLIP ડાયલ-અપ લિંકના MTU ને નિર્ધારિત કરવાનો પ્રયાસ કરતી વખતે અમને ICMP ભૂલ મળી ત્યારે અમે જેની ચર્ચા કરીશું તે સમસ્યા આવી. અમે સૂર્યથી નેટબી સુધીની આ લિંકના MTUને જાણીએ છીએ કારણ કે, સૌપ્રથમ, હોસ્ટ સન પર SLIP ની ગોઠવણી કરતી વખતે આનો ઉલ્લેખ કરવામાં આવે છે, અને બીજું, જ્યારે અમે પ્રકરણ 3 ના વિભાગમાં netstat આદેશ ચલાવ્યો ત્યારે અમે MTU જોયું. હવે અમે નક્કી કરવા માંગીએ છીએ. MTU બીજી દિશામાં. (આ SNMP નો ઉપયોગ કરીને MTU કેવી રીતે નક્કી કરવું તે સમજાવે છે.) પોઈન્ટ-ટુ-પોઈન્ટ લિંક્સ માટે, MTU બંને દિશામાં સમાન હોવું જરૂરી નથી.

નિશ્ચય માટે નીચેની તકનીકનો ઉપયોગ કરવામાં આવ્યો હતો. અમે હોસ્ટ સોલારિસથી હોસ્ટ bsdi સુધી પિંગ ચલાવ્યું, જ્યાં સુધી પેકેટો પર ફ્રેગમેન્ટેશન લાગુ ન થાય ત્યાં સુધી ડેટા પેકેટનું કદ વધાર્યું. પ્રક્રિયા આકૃતિ 11.10 માં બતાવવામાં આવી છે.

આકૃતિ 11.10 સિસ્ટમો જેનો ઉપયોગ નેટબી અને સૂર્ય વચ્ચેની SLIP લિંકના MTU નક્કી કરવા માટે કરવામાં આવ્યો હતો.

tcpdump પ્રોગ્રામ સન હોસ્ટ પર શરૂ કરવામાં આવ્યો હતો, જેણે અમને SLIP ચેનલમાં ફ્રેગમેન્ટેશન કેવી રીતે હાથ ધરવામાં આવે છે તે જોવાની મંજૂરી આપી હતી. ફ્રેગમેન્ટેશન દેખાતું ન હતું અને પિંગ પેકેટમાં ડેટાનું કદ 500 બાઇટ્સથી વધીને 600 સુધી ન થાય ત્યાં સુધી બધું બરાબર હતું. ઇનકમિંગ ઇકો વિનંતીઓ દૃશ્યમાન હતી (જેમ કે કોઈ ફ્રેગમેન્ટેશન ન હોય), પરંતુ ઇકો પ્રતિસાદો અદૃશ્ય થઈ ગયા.

શું થઈ રહ્યું છે તે વધુ સારી રીતે સમજવા માટે, tcpdump bsdi પર પણ ચલાવવામાં આવ્યું હતું, જેના પછી તે સ્પષ્ટ થઈ ગયું કે શું મોકલવામાં આવી રહ્યું છે અને શું પ્રાપ્ત થઈ રહ્યું છે. આકૃતિ 11.11 આઉટપુટ બતાવે છે.

>

1 0.0 સોલારિસ >
2 0.000000 (0.0000) bsdi >
3 0.000000 (0.0000) સૂર્ય >
ફ્રેગ કરવાની જરૂર છે, mtu = 0 (DF)

4 0.738400 (0.7384) સોલારિસ > bsdi: icmp: ઇકો વિનંતી (DF)
5 0.748800 (0.0104) bsdi > સોલારિસ: ICMP: ઇકો રિપ્લાય (DF)
6 0.748800 (0.0000) સૂર્ય > bsdi: ICmp: સોલારિસ અગમ્ય -
ફ્રેગ કરવાની જરૂર છે, mtu = 0 (DF)

આકૃતિ 11.11 tcpdump પ્રોગ્રામનું આઉટપુટ પિંગથી bsdi સુધી સોલારિસમાંથી 600 બાઈટના કદના IP ડેટાગ્રામ સાથે.

પ્રથમ, દરેક લાઇન પરના અભિવ્યક્તિ (DF) નો અર્થ એ છે કે IP હેડરમાં "ટુકડો નહીં કરો" બીટ એક પર સેટ છે. આનો અર્થ એ છે કે સોલારિસ 2.2 સામાન્ય રીતે પરિવહન MTU નક્કી કરવા માટેની પદ્ધતિના ભાગ રૂપે આ બીટને એક પર સેટ કરે છે.

લાઇન 1 સૂચવે છે કે પિંગ ફ્રેગમેન્ટેશન વિના અને ડીએફ બીટ સેટ સાથે નેટબીમાંથી સૂર્ય તરફ જાય છે, તેથી અમે નિષ્કર્ષ પર આવી શકીએ છીએ કે SLIP હોસ્ટ નેટબી માટે મહત્વપૂર્ણ MTU કદ હજી સુધી પહોંચી શક્યું નથી.

ઉપરાંત, લાઇન નંબર 2 પરથી નોંધ લો કે દરેક ઇકો પ્રતિસાદમાં DF ફ્લેગની નકલ કરવામાં આવે છે. આ સમસ્યાનું કારણ બરાબર છે. ઇકો રિપ્લાય ઇકો રિક્વેસ્ટ (માત્ર 600 બાઇટ્સથી વધુ) જેટલું જ કદ ધરાવે છે, પરંતુ હોસ્ટ સનના આઉટગોઇંગ SLIP ઇન્ટરફેસનું MTU 552 છે. ઇકો રિપ્લાય ફ્રેગમેન્ટેડ હોવો જોઈએ, પરંતુ DF ફ્લેગ સેટ કરેલ છે. આનાથી સૂર્ય એક ICMP અગમ્ય ભૂલ પેદા કરે છે અને તેને bsdi (જ્યાં તે નાશ પામે છે)ને મોકલે છે.

આ કારણે આપણે સોલારિસમાંથી પડઘા જોયા નથી. પ્રતિભાવો સૂર્યમાંથી પસાર થતા ન હતા. આકૃતિ 11.12 પેકેટો જે રસ્તો લે છે તે બતાવે છે.

આકૃતિ 11.12 આ ઉદાહરણ માટે પેકેટ એક્સચેન્જ.

છેલ્લે, નોંધ કરો કે આકૃતિ 11.11 માં લીટીઓ 3 અને 6 માં mtu=0 અભિવ્યક્તિ સૂચવે છે કે આકૃતિ 11.9 માં બતાવ્યા પ્રમાણે, ICMP અગમ્ય સંદેશમાં આઉટગોઇંગ ઇન્ટરફેસ માટે સૂર્ય MTU પરત કરતું નથી. (અધ્યાય 25 માં, અમે SNMP નો ઉપયોગ કરીને આ સમસ્યાને હલ કરીશું અને ખાતરી કરીશું કે netb ઇન્ટરફેસનું SLIP MTU 1500 છે.)

Traceroute નો ઉપયોગ કરીને પરિવહન MTU નક્કી કરવું

મોટાભાગની સિસ્ટમો પરિવહન MTU નક્કી કરવાના કાર્યને સમર્થન આપતી નથી, તેથી અમે traceroute() પ્રોગ્રામમાં ફેરફાર કરીશું જેથી તે પરિવહન MTU નક્કી કરી શકે. અમે ડોન્ટ ફ્રેગમેન્ટ બીટ સેટ સાથે એક પેકેટ મોકલીશું. મોકલવામાં આવેલ પ્રથમ પેકેટનું કદ આઉટગોઇંગ ઇન્ટરફેસના MTU જેટલું હશે. જ્યારે ICMP "કાન્ટ ફ્રેગમેન્ટ" ભૂલ પરત આવશે, ત્યારે અમે પેકેટને ઘટાડીશું. કદ જો રાઉટર જેણે ICMP ભૂલ મોકલી છે તે નવા સંસ્કરણને સમર્થન આપે છે જેમાં ICMP સંદેશમાં આઉટગોઇંગ ઇન્ટરફેસ MTU શામેલ છે, તો અમે પરિણામી મૂલ્યનો ઉપયોગ કરીએ છીએ; અન્યથા અમે આગામી નાના MTU અજમાવીશું. જેમ કે આરએફસી 1191 [મોગલ અને ડીરીંગ 1990] જણાવે છે કે ત્યાં મર્યાદિત સંખ્યામાં MTU મૂલ્યો છે, અમારા પ્રોગ્રામમાં એક ટેબલ છે શક્ય મૂલ્યોઅને ફક્ત આગળના નાના મૂલ્ય પર જશે.

ચાલો હોસ્ટ સનથી હોસ્ટ સ્લિપ સુધીના સમાન અલ્ગોરિધમનો પ્રયાસ કરીએ, એ જાણીને કે SLIP ચેનલ પાસે 296 નું MTU છે:

>

સૂર્ય % traceroute.pmtu સ્લિપ

આઉટગોઇંગ MTU = 1500
1 bsdi (140.252.13.35) 15 ms 6 ms 6 ms
2 bsdi (140.252.13.35) 6 ms
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 1492 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 1006 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 576 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 552 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી છે અને DF સેટ, નવું MTU = 544 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 512 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 508 અજમાવી રહ્યું છે
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નવું MTU = 296 અજમાવી રહ્યું છે
2 સ્લિપ (140.252.13.65) 377 ms 377 ms 377 ms

આ ઉદાહરણમાં, bsdi રાઉટરે ICMP સંદેશમાં આઉટગોઇંગ ઇન્ટરફેસ MTU પરત કર્યું નથી, તેથી અમે આગામી નીચલા MTU મૂલ્ય પર આવીશું. 2 ના TTL માટે આઉટપુટની પ્રથમ લાઇન હોસ્ટનામ bsdi નો અહેવાલ આપે છે, પરંતુ આ એટલા માટે છે કારણ કે તે રાઉટર દ્વારા ICMP ભૂલમાં પરત કરવામાં આવ્યું હતું. 2 ના TTL માટે આઉટપુટની છેલ્લી લાઇન એ બરાબર છે જે આપણે અપેક્ષા રાખી હતી.

આઉટગોઇંગ ઇન્ટરફેસના MTU મેળવવા માટે bsdi પર ICMP કોડમાં ફેરફાર કરવો સરળ છે. અને જો આપણે આ કરીએ અને આપણા પ્રોગ્રામ પર પાછા આવીએ, તો આપણને નીચેનું આઉટપુટ મળશે:

>

સૂર્ય % traceroute.pmtu સ્લિપ
ટ્રેસરૂટ ટુ સ્લિપ (140.252.13.65), 30 હોપ્સ મેક્સ
આઉટગોઇંગ MTU = 1500
1 bsdi (140.252.13.35) 53 ms 6 ms 6 ms
2 bsdi (140.252.13.35) 6 ms
ફ્રેગમેન્ટેશન જરૂરી અને DF સેટ, નેક્સ્ટ હોપ MTU = 296
2 સ્લિપ (140.252.13.65) 377 ms 378 ms 377 ms

અહીં આઠ અલગ અલગ MTU મૂલ્યો અજમાવવાનો કોઈ અર્થ નથી; રાઉટરે ઇચ્છિત મૂલ્યની જાણ કરી છે.

વિશ્વ ઈન્ટરનેટ

ટ્રેસરાઉટનું સંશોધિત સંસ્કરણ વિશ્વભરના વિવિધ યજમાનો પર ઘણી વખત ચલાવવામાં આવ્યું હતું. તે વિવિધ ટ્રાન્સએટલાન્ટિક અને ટ્રાન્સપેસિફિક ચેનલોનો ઉપયોગ કરીને 15 દેશો (એન્ટાર્કટિકા સહિત) સુધી પહોંચ્યું. જો કે, આ કરતા પહેલા, અમે અમારા સબનેટ અને નેટબી રાઉટર (આકૃતિ 11.12) વચ્ચેની SLIP ડાયલ-અપ લિંકની MTU વધારીને 1500 કરી છે, જે ઇથરનેટની જેમ જ છે.

18 વખત પ્રોગ્રામ ચલાવવામાં આવ્યો હતો, તેમાંથી માત્ર બે કેસમાં ટ્રાન્સપોર્ટ MTU 1500 કરતાં ઓછું હતું. એક ટ્રાન્સએટલાન્ટિક લિંકમાં 572 નું MTU હતું (એક વિચિત્ર મૂલ્ય જે RFC 1191માં પણ સૂચિબદ્ધ નથી), અને રાઉટર પરત કરતું ન હતું. નવા ફોર્મેટમાં ICMP ભૂલ. જાપાનમાં બે રાઉટર્સ વચ્ચેની બીજી કડીએ 1500 બાઈટ ફ્રેમ્સ પર પ્રક્રિયા કરી નથી, અને રાઉટરે નવા ફોર્મેટમાં ICMP ભૂલ પરત કરી નથી. MTU ઘટાડીને 1006 કર્યા પછી, બધું કામ કર્યું.

આ પ્રયોગોમાંથી આપણે જે નિષ્કર્ષ કાઢી શકીએ છીએ તે એ છે કે મોટાભાગના (પરંતુ તમામ નહીં) વાઈડ એરિયા નેટવર્ક હાલમાં 512 બાઈટ કરતા મોટા પેકેટને હેન્ડલ કરી શકે છે. ટ્રાન્સપોર્ટ MTU શોધ સુવિધાનો ઉપયોગ એપ્લીકેશનને મોટા MTU નો ઉપયોગ કરીને નોંધપાત્ર રીતે વધુ કાર્યક્ષમ રીતે કરવા માટે પરવાનગી આપે છે.

UDP નો ઉપયોગ કરતી વખતે પરિવહન MTU નક્કી કરવું

ચાલો UDP અને ટ્રાન્સપોર્ટ MTU ડિસ્કવરી મિકેનિઝમનો ઉપયોગ કરીને એપ્લિકેશન વચ્ચેની ક્રિયાપ્રતિક્રિયા જોઈએ. અમારે એ જોવાની જરૂર છે કે જ્યારે કોઈ એપ્લિકેશન ડેટાગ્રામ મોકલે છે જે અમુક મધ્યવર્તી ચેનલ માટે ખૂબ મોટો છે ત્યારે શું થાય છે.

ટ્રાન્સપોર્ટ MTU ડિસ્કવરી મિકેનિઝમને સપોર્ટ કરતી એકમાત્ર સિસ્ટમ સોલારિસ 2.x છે, તેથી અમે તેને સ્લિપ કરવા માટે 650-બાઇટ ડેટાગ્રામ મોકલવા માટે સ્ત્રોત હોસ્ટ તરીકે ઉપયોગ કરીએ છીએ. સ્લિપ હોસ્ટ 296 ની MTU સાથે SLIP લિંકની પાછળ હોવાથી, 268 બાઇટ્સ (296 - 20 - 8) કરતા મોટો કોઈપણ UDP ડેટાગ્રામ "ડોન્ટ ફ્રેગમેન્ટ" બીટ સેટ સાથે બીએસડીઆઈ તરફથી ICMP "ટુકડો કરી શકતો નથી" ભૂલનું કારણ બને છે. રાઉટર આકૃતિ 11.13 ચેનલોની ટોપોલોજી અને MTU બતાવે છે.

આકૃતિ 11.13 UDP નો ઉપયોગ કરીને પરિવહન MTU નક્કી કરવા માટે વપરાતી સિસ્ટમો.

નીચેનો આદેશ 5-સેકન્ડના અંતરાલમાં દસ 650-બાઇટ UDP ડેટાગ્રામ બનાવે છે:

>સોલારિસ % sock -u -i -n10 -w650 -p5 સ્લિપ કાઢી નાખો

આકૃતિ 11.14 tcpdump આદેશનું આઉટપુટ બતાવે છે. જ્યારે આ ઉદાહરણ ચલાવવામાં આવ્યું હતું, ત્યારે BSdi રાઉટરને ICMP "કાન્ટ ફ્રેગમેન્ટ" ભૂલના ભાગ રૂપે નેક્સ્ટ-હોપ MTU પરત ન કરવા માટે ગોઠવવામાં આવ્યું હતું.

DF બિટ સેટ (લાઇન 1) સાથે મોકલવામાં આવેલ પ્રથમ ડેટાગ્રામ bsdi રાઉટર (લાઇન 2) થી અપેક્ષિત ભૂલ પેદા કરે છે. રસપ્રદ વાત એ છે કે, આગામી ડેટાગ્રામ, ડીએફ બીટ સેટ (લાઇન 3) સાથે પણ મોકલવામાં આવે છે, તે જ ICMP ભૂલ (લાઇન 4) જનરેટ કરે છે. અમે અપેક્ષા રાખીએ છીએ કે આ ડેટાગ્રામ DF બિટ બંધ સાથે મોકલવામાં આવશે.

લાઇન 5 પર, IP ને આખરે સમજાયું કે આ ગંતવ્ય પર ડેટાગ્રામ DF બિટ સેટ સાથે મોકલવા જોઈએ નહીં, અને પછી સ્ત્રોત હોસ્ટ પર ડેટાગ્રામને ફ્રેગમેન્ટ કરવાનું શરૂ કર્યું. આ વર્તણૂક અગાઉના ઉદાહરણોમાં જે દર્શાવવામાં આવ્યું હતું તેનાથી અલગ છે, જ્યાં IP એ UDP માંથી પ્રાપ્ત ડેટાગ્રામ્સ મોકલ્યા હતા, જ્યારે નાના MTU (આ કિસ્સામાં bsdi) સાથેના રાઉટર્સને ટુકડા કરવાની મંજૂરી આપવામાં આવી હતી.

>

1 0.0 solaris.38196 > slip.discard: udp 650 (DF)
2 0.004218 (0.0042) bsdi > સોલારિસ: ICMP:

3 4.980528 (4.9763) solaris.38196 > slip.discard: udp 650 (DF)
4 4.984503 (0.0040) bsdi > સોલારિસ: ICMP:
સ્લિપ અગમ્ય - ફ્રેગ કરવાની જરૂર છે, mtu = 0 (DF)

5 9.870407 (4.8859) solaris.38196 > slip.discard: udp 650 (frag 47942:552@0+)
6 9.960056 (0.0896) સોલારિસ > સ્લિપ: (ફ્રેગ 47942:106@552)

7 14.940338 (4.9803) solaris.38196 > slip.discard: udp 650 (DF)
8 14.944466 (0.0041) bsdi > સોલારિસ: ICMP:
સ્લિપ અગમ્ય - ફ્રેગ કરવાની જરૂર છે, mtu = 0 (DF)

9 19.890015 (4.9455) solaris.38196 > slip.discard: udp 650 (frag 47944:552@0+)
10 19.950463 (0.0604) સોલારિસ > સ્લિપ: (ફ્રેગ 47944:106@552)

11 24.870401 (4.9199) solaris.38196 > slip.discard: udp 650 (frag 47945:552@0+)
12 24.960038 (0.0896) સોલારિસ > સ્લિપ: (ફ્રેગ 47945:106@552)

13 29.880182 (4.9201) solaris.38196 > slip.discard: udp 650 (frag 47946:552@0+)
14 29.940498 (0.0603) સોલારિસ > સ્લિપ: (ફ્રેગ 47946:106@552)

15 34.860607 (4.9201) solaris.38196 > slip.discard: udp 650 (frag 47947:552@0+)
16 34.950051 (0.0894) સોલારિસ > સ્લિપ: (ફ્રેગ 47947:106@552)

17 39.870216 (4.9202) solaris.38196 > slip.discard: udp 650 (frag 47948:552@0+)
18 39.930443 (0.0602) સોલારિસ > સ્લિપ: (ફ્રેગ 47948:106@552)

19 44.940485 (5.0100) સોલારિસ.38196 > slip.discard: udp 650 (DF)
20 44.944432 (0.0039) bsdi > સોલારિસ: ICMP:
સ્લિપ અગમ્ય - ફ્રેગ કરવાની જરૂર છે, mtu = 0 (DF)

આકૃતિ 11.14 UDP નો ઉપયોગ કરીને પરિવહન MTU નક્કી કરવું.

ICMP "કાન્ટ ફ્રેગમેન્ટ કરી શકતો નથી" મેસેજમાં આગામી હોપ MTU સમાવિષ્ટ ન હોવાથી, આનો અર્થ એ થયો કે IP એ નક્કી કર્યું છે કે દરેક વ્યક્તિ 576 ના MTUથી ખુશ છે. પ્રથમ ફ્રેગમેન્ટ (લાઇન 5) માં UDP ડેટાના 544 બાઇટ્સ, 8 બાઇટ્સ છે. UDP હેડર અને IP હેડરના 20 બાઇટ્સ, IP ડેટાગ્રામનું કુલ કદ 572 બાઇટ્સ છે. બીજા ટુકડા (લાઇન 6) માં UDP ડેટાના બાકીના 106 બાઇટ અને 20-બાઇટ IP હેડર છે.

કમનસીબે, આગામી ડેટાગ્રામ, લાઇન 7, DF બીટ સેટ ધરાવે છે, તેથી તેને bsdi દ્વારા કાઢી નાખવામાં આવે છે અને ICMP ભૂલ પરત કરવામાં આવે છે. અહીં શું થયું કે IP ટાઈમરની સમયસીમા સમાપ્ત થઈ ગઈ છે, જેણે IP ને DF બિટ રીસેટ કરીને ટ્રાન્સપોર્ટ MTU વધ્યું છે કે કેમ તે તપાસવા જણાવ્યું હતું. અમે લાઇન 19 અને 20 માં આ ફરીથી થતું જોશું. લાઇન 7 અને 19 માં સમયની સરખામણી જ્યાં DF બીટ એક પર સેટ છે, અમે જોશું કે ટ્રાન્સપોર્ટ MTU દર 30 સેકન્ડે વધારવા માટે તપાસવામાં આવે છે.

આ 30 સેકન્ડનું ટાઈમર ખૂબ નાનું છે. RFC 1191 ટાઇમરને 10 મિનિટ પર સેટ કરવાની ભલામણ કરે છે. ટાઈમર મૂલ્ય ip_ire_pathmtu_interval પરિમાણ (પરિશિષ્ટ E, વિભાગ) નો ઉપયોગ કરીને બદલી શકાય છે. સોલારિસ 2.2 માં, એક UDP એપ્લિકેશન માટે અથવા બધી UDP એપ્લિકેશનો માટે પરિવહન MTU શોધને અક્ષમ કરવાની કોઈ રીત નથી. તે ip_path_mtu_discovery પરિમાણ બદલીને સમગ્ર સિસ્ટમ માટે માત્ર સક્રિય અથવા નિષ્ક્રિય કરી શકાય છે. જેમ કે આપણે આ ઉદાહરણમાંથી જોઈ શકીએ છીએ, જ્યારે UDP એપ્લીકેશન્સ ડેટાગ્રામ મોકલતી હોય ત્યારે ટ્રાન્સપોર્ટ MTU ડિટેક્શન સુવિધાને સક્ષમ કરવાથી ડેટાગ્રામ કાઢી નાખવામાં આવશે.

સોલારિસ (576 બાઇટ્સ) પર IP લેયર દ્વારા સ્વીકૃત મહત્તમ ડેટાગ્રામ કદ ખોટું છે. અમે આકૃતિ 11.13 માં જોયું કે વાસ્તવિક MTU 296 બાઇટ્સ છે. આનો અર્થ એ છે કે સોલારિસ દ્વારા પેદા થયેલા ટુકડાઓ ફરીથી bsdi પર ખંડિત થાય છે. આકૃતિ 11.15 પ્રથમ ડેટાગ્રામ (આકૃતિ 11.14 માં લીટીઓ 5 અને 6) માટે ગંતવ્ય (સ્લિપ) હોસ્ટ પર પ્રાપ્ત થયેલ tcpdump આઉટપુટ દર્શાવે છે.

>

1 0.0 solaris.38196 > slip.discard: udp 650 (ફ્રેગ 47942:272@0+)
2 0.304513 (0.3045) સોલારિસ > સ્લિપ: (ફ્રેગ 47942:272@272+)
3 0.334651 (0.0301) સોલારિસ > સ્લિપ: (ફ્રેગ 47942:8@544+)
4 0.466642 (0.1320) સોલારિસ > સ્લિપ: (ફ્રેગ 47942:106@552)

આકૃતિ 11.15 સોલારિસથી સ્લિપ હોસ્ટ પર પહોંચતો પ્રથમ ડેટાગ્રામ.

આ ઉદાહરણમાં, સોલારિસ હોસ્ટે આઉટગોઇંગ ડેટાગ્રામને ફ્રેગમેન્ટ ન કરવું જોઈએ, પરંતુ ડીએફ બીટને બંધ કરવું જોઈએ અને નાના MTU ધરાવતા રાઉટરને ફ્રેગમેન્ટેશન કરવા માટે પરવાનગી આપવી જોઈએ.

અમે હવે એ જ ઉદાહરણ ચલાવીશું, પરંતુ bsdi રાઉટરની વર્તણૂક બદલીશું જેથી કરીને તે ICMP "કાન્ટ ફ્રેગમેન્ટ" સંદેશમાં આગામી હોપ MTU પરત કરે. આકૃતિ 11.16 tcpdump આઉટપુટની પ્રથમ છ લીટીઓ દર્શાવે છે.

>

1 0.0 solaris.37974 > slip.discard: udp 650 (DF)
2 0.004199 (0.0042) bsdi > સોલારિસ: ICMP:

3 4.950193 (4.9460) solaris.37974 > slip.discard: udp 650 (DF)
4 4.954325 (0.0041) bsdi > સોલારિસ: ICMP:
સ્લિપ અગમ્ય - ફ્રેગ કરવાની જરૂર છે, mtu = 296 (DF)

5 9.779855 (4.8255) solaris.37974 > slip.discard: udp 650 (frag 35278:272@0+)
6 9.930018 (0.1502) સોલારિસ > સ્લિપ: (ફ્રેગ 35278:272@272+)
7 9.990170 (0.0602) સોલારિસ > સ્લિપ: (ફ્રેગ 35278:114@544)

આકૃતિ 11.16 UDP નો ઉપયોગ કરીને પરિવહન MTU નક્કી કરવું.

ફરી એકવાર આપણે જોયું કે પ્રથમ બે ડેટાગ્રામ ડીએફ બીટ સેટ સાથે મોકલવામાં આવ્યા હતા, અને બંનેમાં ICMP ભૂલો મળી હતી. હાલમાં, ICMP ભૂલ આગામી ફોરવર્ડ MTU સૂચવે છે, જે 296 છે.

લીટીઓ 5, 6 અને 7 માં, આપણે જોઈએ છીએ કે સ્ત્રોત હોસ્ટ ફ્રેગમેન્ટેશન કરી રહ્યું છે, જેમ કે આકૃતિ 11.14 માં. જો નેક્સ્ટ-હોપ MTU જાણીતું હોય, તો આકૃતિ 11.15 માં bsdi રાઉટર દ્વારા જનરેટ થયેલા ચાર ટુકડાઓની સરખામણીમાં માત્ર ત્રણ ટુકડાઓ જ જનરેટ થાય છે.

UDP અને ARP વચ્ચે ક્રિયાપ્રતિક્રિયા

UDP નો ઉપયોગ કરીને, અમે UDP અને લાક્ષણિક ARP અમલીકરણ વચ્ચે ખૂબ જ રસપ્રદ ક્રિયાપ્રતિક્રિયા જોઈ શકીએ છીએ.

અમે 8192 બાઇટ્સ ડેટા સાથે એક UDP ડેટાગ્રામ જનરેટ કરવા માટે સોક પ્રોગ્રામનો ઉપયોગ કરીએ છીએ. અમે અપેક્ષા રાખીએ છીએ કે આ કિસ્સામાં છ ઈથરનેટ ટુકડાઓ જનરેટ થશે (જુઓ પ્રકરણ 11). ઉપરાંત, પ્રોગ્રામ ચલાવતા પહેલા, અમે ખાતરી કરીશું કે ARP કેશ ખાલી છે, તેથી પ્રથમ ટુકડો મોકલવામાં આવે તે પહેલાં, ARP વિનંતી અને પ્રતિસાદની આપલે કરવી આવશ્યક છે.

>

bsdi % arp -aતપાસો કે ARP કેશ ખાલી છે
bsdi % sock -u -i -n1 -w8192 svr4 કાઢી નાખો

અમે અપેક્ષા રાખીએ છીએ કે પ્રથમ ડેટાગ્રામને કારણે ARP વિનંતી મોકલવામાં આવશે. આગામી પાંચ ટુકડાઓ કે જે IP દ્વારા જનરેટ થાય છે તે બે પ્રશ્નો ઉભા કરે છે જેનો જવાબ આપણે ફક્ત tcpdump નો ઉપયોગ કરીને આપી શકીએ છીએ: શું બાકીના ટુકડાઓ ARP પ્રતિસાદ પ્રાપ્ત થાય તે પહેલાં મોકલવા માટે તૈયાર હશે, જો એમ હોય, તો ARP આ થોડા પેકેટોનું શું કરશે? ARP પ્રતિસાદની રાહ જોતી વખતે ચોક્કસ ગંતવ્ય પર જાઓ છો? આકૃતિ 11.17 tcpdump પ્રોગ્રામનું આઉટપુટ બતાવે છે.

>

1 0.0 એઆરપી જેની પાસે svr4 છે તે bsdi ને જણાવે છે
2 0.001234 (0.0012) એઆરપી જેની પાસે svr4 છે તે બીએસડીઆઈને જણાવો
3 0.001941 (0.0007) એઆરપી જેની પાસે svr4 છે તે બીએસડીઆઈને જણાવો
4 0.002775 (0.0008) એઆરપી જેની પાસે svr4 છે તે બીએસડીઆઈને જણાવો
5 0.003495 (0.0007) એઆરપી જેની પાસે svr4 છે તે bsdi ને જણાવો
6 0.004319 (0.0008) એઆરપી જેની પાસે svr4 છે તે BSdi ને જણાવો
7 0.008772 (0.0045) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
8 0.009911 (0.0011) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
9 0.011127 (0.0012) bsdi > svr4: (ફ્રેગ 10863:800@7400)
10 0.011255 (0.0001) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
11 0.012562 (0.0013) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
12 0.013458 (0.0009) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
13 0.014526 (0.0011) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26
14 0.015583 (0.0011) arp જવાબ svr4 is-at 0:0:c0:c2:9b:26

આકૃતિ 11.17 ઈથરનેટ પર 8192 બાઈટ UDP ડેટાગ્રામ મોકલતી વખતે પેકેટ એક્સચેન્જ.

આ નિષ્કર્ષ તદ્દન અનપેક્ષિત છે. પ્રથમ, પ્રથમ ARP પ્રતિસાદ પ્રાપ્ત થાય તે પહેલાં, છ ARP વિનંતીઓ જનરેટ થાય છે. જેમ તમે અનુમાન કરી શકો છો, IP ઝડપથી છ ટુકડાઓ જનરેટ કરે છે, અને દરેક માટે ARP વિનંતી મોકલવામાં આવે છે.

પછી, જ્યારે પ્રથમ ARP પ્રતિસાદ પ્રાપ્ત થાય છે (લાઇન 7), માત્ર છેલ્લો ટુકડો (લાઇન 9) મોકલવામાં આવે છે! આનો અર્થ એ છે કે પ્રથમ પાંચ ટુકડાઓ કાઢી નાખવામાં આવ્યા હતા. વાસ્તવમાં, આ સામાન્ય ARP ઓપરેશનનું ઉદાહરણ છે. મોટાભાગના અમલીકરણો એઆરપી પ્રતિસાદની રાહ જોતી વખતે ગંતવ્ય હોસ્ટને મોકલવા માટે માત્ર છેલ્લું પેકેટ ધરાવે છે.

યજમાનની આવશ્યકતાઓ RFC ને ARP પૂરને રોકવા માટે અમલીકરણની જરૂર છે (ઉચ્ચ આવર્તન સાથે સમાન IP સરનામા માટે ARP વિનંતીઓ વારંવાર મોકલવી). આગ્રહણીય મહત્તમ આવર્તન પ્રતિ સેકન્ડમાં એકવાર છે. અહીં આપણે 4.3 મિલિસેકંડની અંદર છ ARP વિનંતીઓ જોઈએ છીએ. યજમાનની આવશ્યકતાઓ RFC માટે જરૂરી છે કે ARP ઓછામાં ઓછું એક પેકેટ સ્ટોર કરે, અને તે સૌથી તાજેતરનું પેકેટ હોવું જોઈએ. આ આપણે અહીં જોયું તે બરાબર છે.

આગળની ન સમજાય તેવી વિસંગતતા એ છે કે svr4 એ સાત ARP જવાબો પાછા મોકલ્યા, છ નહીં.

નોંધવા જેવી છેલ્લી બાબત એ છે કે છેલ્લો ARP પ્રતિસાદ પાછો આવ્યા પછી tcpdump બીજી 5 મિનિટ સુધી ચાલ્યો, svr4 ICMP "ફરીથી એસેમ્બલી દરમિયાન સમય ઓળંગી ગયો" ભૂલ પરત મોકલે છે તે જોવાની રાહ જોઈ રહ્યું છે. ICMP સંદેશ ક્યારેય દેખાયો નથી. (અમે આ સંદેશનું ફોર્મેટ બતાવ્યું છે. 1 પર સેટ કરેલ કોડ ફીલ્ડ સૂચવે છે કે ડેટાગ્રામ ફરીથી એસેમ્બલ કરવામાં આવી રહ્યો છે ત્યારે સમય વીતી ગયો છે.)

જ્યારે પ્રથમ ડેટાગ્રામ ટુકડો દેખાય ત્યારે IP સ્તરે ટાઈમર શરૂ કરવું આવશ્યક છે. અહીં, "પ્રથમ" નો અર્થ આપેલ ડેટાગ્રામ માટે પહોંચવા માટેનો પ્રથમ ટુકડો છે, માત્ર પ્રથમ ટુકડો (0 ના ઓફસેટ સાથેના ટુકડા સાથે). સામાન્ય સમયસમાપ્તિ મૂલ્ય 30 થી 60 સેકન્ડ સુધીની હોય છે. જો આ ડેટાગ્રામ માટેના બધા ટુકડાઓ ટાઈમરની સમયસીમા સમાપ્ત થાય તે પહેલાં આવ્યા ન હોય, તો બધા ટુકડાઓ કાઢી નાખવામાં આવે છે. જો આ કરવામાં ન આવે તો, કદી ન આવતા ટુકડાઓ (જેમ કે આપણે આ ઉદાહરણમાં જોયું છે) રીસીવ બફરને ઓવરફ્લો કરી શકે છે.

અમે ICMP સંદેશ ન જોયો તેના બે કારણો છે. પ્રથમ, મોટાભાગના બર્કલે અમલીકરણો ક્યારેય આ ભૂલ પેદા કરતા નથી! આ અમલીકરણો ટાઈમર સેટ કરે છે અને જ્યારે ટાઈમર સમાપ્ત થાય છે ત્યારે તમામ ટુકડાઓ કાઢી નાખે છે, પરંતુ કોઈ ICMP ભૂલ જનરેટ થતી નથી. બીજું, પ્રથમ ટુકડો - UDP હેડર ધરાવતો 0 ની બરાબર ઓફસેટ સાથેનો ટુકડો પ્રાપ્ત થયો ન હતો. (એઆરપી દ્વારા છોડવામાં આવેલા પાંચ પેકેટમાંથી આ પહેલું હતું.) જો પહેલો ટુકડો પ્રાપ્ત ન થયો હોય તો અમલીકરણ માટે ICMP ભૂલ પેદા કરવાની જરૂર નથી. કારણ એ છે કે ICMP એરર સિંક એ કહી શકતું નથી કે કઈ વપરાશકર્તા પ્રક્રિયાએ ડેટાગ્રામ મોકલ્યો હતો જે કાઢી નાખવામાં આવ્યો હતો કારણ કે ટ્રાન્સપોર્ટ લેયર હેડર ઉપલબ્ધ ન હતું. અને ઉચ્ચ સ્તર (ક્યાં તો TCP એપ્લિકેશન અથવા UDP એપ્લિકેશન) સમય સમાપ્ત થશે અને ટ્રાન્સમિશનનું પુનરાવર્તન કરશે.

આ વિભાગમાં, અમે UDP અને ARP વચ્ચે સંચાર કેવી રીતે કાર્ય કરે છે તે જોવા માટે IP ફ્રેગમેન્ટેશનનો ઉપયોગ કર્યો. આ ક્રિયાપ્રતિક્રિયા જોઈ શકાય છે જો પ્રેષક ઝડપથી ઉત્તરાધિકારમાં બહુવિધ UDP ડેટાગ્રામ મોકલે. અમે ફ્રેગમેન્ટેશનનો ઉપયોગ કર્યો છે કારણ કે આઈપીનો ઉપયોગ કરીને પેકેટો ઝડપથી જનરેટ થાય છે, જે વપરાશકર્તાની પ્રક્રિયા બહુવિધ પેકેટો જનરેટ કરવા કરતાં ઘણી ઝડપી છે.

મહત્તમ UDP ડેટાગ્રામ કદ

સૈદ્ધાંતિક રીતે, IP ડેટાગ્રામનું મહત્તમ કદ 65535 બાઇટ્સ હોઈ શકે છે, જે IP હેડરમાં 16-બીટ પૂર્ણ-લેન્થ ફીલ્ડ દ્વારા મર્યાદિત છે (જુઓ). 20 બાઈટની IP હેડરની લંબાઈ અને 8 બાઈટની UDP હેડરની લંબાઈ સાથે, UDP ડેટાગ્રામ વપરાશકર્તાના ડેટા માટે મહત્તમ 65507 બાઈટ છોડે છે. મોટાભાગના અમલીકરણો, જોકે, નોંધપાત્ર રીતે નાના ડેટાગ્રામનો ઉપયોગ કરે છે.

બે પ્રતિબંધો સામાન્ય રીતે રમતમાં આવે છે. પ્રથમ, એપ્લિકેશન પ્રોગ્રામ તેના પ્રોગ્રામિંગ ઇન્ટરફેસ દ્વારા મર્યાદિત હોઈ શકે છે. સોકેટ્સ API (પ્રકરણ 1, વિભાગ) એક કાર્ય પૂરું પાડે છે જે ઇનપુટ અને આઉટપુટ બફરનું કદ સેટ કરવા માટે એપ્લિકેશન દ્વારા કૉલ કરી શકાય છે. UDP સોકેટ માટે, આ કદ UDP ડેટાગ્રામના મહત્તમ કદ સાથે સીધો સંબંધિત છે જે UDP દ્વારા વાંચી અને લખી શકાય છે. હાલમાં, મોટાભાગની સિસ્ટમો UDP ડેટાગ્રામનું ડિફોલ્ટ મહત્તમ કદ પ્રદાન કરે છે જે વાંચી અથવા લખી શકાય છે, જે 8192 બાઇટ્સ છે. (આ મૂલ્ય 8192 પર સેટ છે કારણ કે તે NFS મૂળભૂત રીતે વાંચે છે અને લખે છે.)

નીચેની મર્યાદા TCP/IP કર્નલ અમલીકરણ દ્વારા નક્કી કરવામાં આવે છે. અમલીકરણ લાક્ષણિકતાઓ (અથવા બગ્સ) હોઈ શકે છે જે UDP ડેટાગ્રામના કદને 65535 બાઈટ કરતા ઓછા સુધી મર્યાદિત કરે છે.

લેખકે સોક પ્રોગ્રામનો ઉપયોગ કરીને વિવિધ UDP ડેટાગ્રામ માપો સાથે પ્રયોગ કર્યો. SunOS 4.1.3 હેઠળ લૂપબેક ઇન્ટરફેસનો ઉપયોગ કરીને, મહત્તમ UDP ડેટાગ્રામ કદ 32767 બાઇટ્સ હતું. ઉચ્ચ મૂલ્યનો ઉપયોગ કરવો શક્ય ન હતું. BSD/386 થી SunOS 4.1.3 માં ઈથરનેટ પર સ્થાનાંતરિત કરતી વખતે, સૂર્ય સ્વીકારી શકે તેવા IP ડેટાગ્રામનું મહત્તમ કદ 32786 (32758 બાઇટ્સ વપરાશકર્તા ડેટા સાથે) હતું. સોલારિસ 2.2 માં લૂપબેક ઈન્ટરફેસનો ઉપયોગ કરીને, મોકલી અને પ્રાપ્ત કરી શકાય તેવા IP ડેટાગ્રામનું મહત્તમ કદ 65535 બાઈટ હતું. સોલારિસ 2.2 થી AIX 3.2.2 માં સ્થાનાંતરિત કરતી વખતે, મહત્તમ 65535 બાઇટના કદ સાથે IP ડેટાગ્રામને સ્થાનાંતરિત કરવાનું શક્ય હતું.

ડેટાગ્રામ ટ્રંકેશન

માત્ર કારણ કે IP ચોક્કસ કદના ડેટાગ્રામ મોકલી અને પ્રાપ્ત કરી શકે છે તેનો અર્થ એ નથી કે પ્રાપ્ત કરનાર એપ્લિકેશન તે કદના ડેટાગ્રામ વાંચવા માટે તૈયાર છે. UDP API એપ્લીકેશનને એક સમયે પ્રક્રિયા કરવા માટેની મહત્તમ સંખ્યાની બાઈટનો ઉલ્લેખ કરવાની મંજૂરી આપે છે. જો પ્રાપ્ત ડેટાગ્રામ એપ્લિકેશન સ્વીકારવા માટે તૈયાર હોય તે ડેટાગ્રામ કરતા મોટો હોય તો શું થાય?

કમનસીબે, જવાબ પ્રોગ્રામિંગ ઈન્ટરફેસ અને અમલીકરણ પર આધાર રાખે છે.

બર્કલે સોકેટ API ના પરંપરાગત સંસ્કરણો ડેટાગ્રામને કાપી નાખે છે, જે ફિટ ન હોય તેવા કોઈપણ ડેટાને કાઢી નાખે છે. એપ્લિકેશન સૂચિત છે કે કેમ તે સંસ્કરણ પર આધારિત છે. (4.3 BSD રેનો અને પછીની એપ્લિકેશનને સૂચિત કરી શકે છે કે ડેટાગ્રામ કાપવામાં આવ્યો છે.) SVR4 હેઠળ API સોકેટ્સ (સોલારિસ 2.x સહિત) ડેટાગ્રામને કાપતા નથી. કોઈપણ ડેટા જે બંધબેસતો નથી તે ક્રમિક રીતે વાંચવામાં આવે છે. એપ્લિકેશનને બહુવિધ વાંચન ચક્રની સૂચના આપવામાં આવી નથી અને તેને એક જ UDP ડેટાગ્રામ મોકલવામાં આવશે. TLI API ડેટા કાઢી નાખતા નથી. તેના બદલે, એક ફ્લેગ પરત કરવામાં આવે છે જે દર્શાવે છે કે એક જ સમયે વાંચી શકાય તે કરતાં વધુ ડેટા છે, તેથી એપ્લિકેશન બાકીના ડેટાગ્રામને ક્રમિક રીતે વાંચવાનું શરૂ કરે છે.

જ્યારે આપણે TCP પર ચર્ચા કરીશું, ત્યારે અમે જોશું કે આ પ્રોટોકોલ કોઈપણ પ્રતિબંધો વિના એપ્લિકેશનને ક્રમિક બાઈટ સ્ટ્રીમ્સ પ્રદાન કરે છે. TCP એપ્લીકેશનને ગમે તેટલો માપ ડેટા પહોંચાડે છે - અને તે ઈન્ટરફેસ પર ક્યારેય કોઈ ડેટા ગુમ થતો નથી.

ICMP સ્ત્રોત દમન ભૂલ

UDP નો ઉપયોગ કરીને, તમે ICMP સ્ત્રોત ક્વેન્ચ એરર જનરેટ કરી શકો છો. આ ભૂલ સિસ્ટમ (રાઉટર અથવા હોસ્ટ) દ્વારા જનરેટ થઈ શકે છે જ્યારે તે ડેટાગ્રામ પર પ્રક્રિયા કરી શકાય તે કરતાં વધુ ઝડપથી ડેટાગ્રામ મેળવે છે. અભિવ્યક્તિ નોંધો " હોઈ શકે છે". જો બફર્સ ભરેલા હોય અને ડેટાગ્રામ કાઢી નાખવામાં આવે તો પણ સિસ્ટમને સ્ત્રોત દમન મોકલવાની જરૂર નથી.

આકૃતિ 11.18 ICMP સ્ત્રોત સપ્રેસન એરર ફોર્મેટ બતાવે છે. અમે અમારા ટેસ્ટ નેટવર્ક પર સમાન ભૂલ જનરેટ કરવા માટે આદર્શ સ્થિતિમાં છીએ. અમે ઈથરનેટ પર bsdi થી રાઉટર સન પર ડેટાગ્રામ મોકલી શકીએ છીએ, અને આ ડેટાગ્રામ્સ SLIP ચેનલ દ્વારા રૂટ કરવા જોઈએ. SLIP ચેનલ ઇથરનેટ કરતાં લગભગ હજાર ગણી ધીમી હોવાથી, અમે સરળતાથી બફરને ઓવરફ્લો કરી શકીએ છીએ. નીચેનો આદેશ હોસ્ટ bsdi થી રાઉટર સન દ્વારા સોલારિસ પર 100 1024 બાઈટ ડેટાગ્રામ મોકલે છે. અમે પ્રમાણભૂત કાઢી નાખવાની સેવાને ડેટાગ્રામ મોકલીએ છીએ, જ્યાં તેને અવગણવામાં આવશે:

>bsdi % sock -u -i -w1024 -n100 સોલારિસ કાઢી નાખો

આકૃતિ 11.18 ICMP સ્ત્રોત દમન ભૂલ.

આકૃતિ 11.19 આ આદેશને અનુરૂપ tcpdump આઉટપુટ બતાવે છે.

>

1 0.0 bsdi.1403 > solaris.discard: udp 1024
26 લીટીઓ બતાવવામાં આવી નથી
27 0.10 (0.00) bsdi.1403 > solaris.discard: udp 1024
28 0.11 (0.01) સૂર્ય > bsdi: ICmp: સ્ત્રોત quench

29 0.11 (0.00) bsdi.1403 > solaris.discard: udp 1024
30 0.11 (0.00) સૂર્ય > bsdi: ICmp: સ્ત્રોત quench
142 લીટીઓ દર્શાવવામાં આવી નથી
173 0.71 (0.06) bsdi.1403 > solaris.discard: udp 1024
174 0.71 (0.00) સૂર્ય > bsdi: ICmp: સ્ત્રોત ક્વેન્ચ

આકૃતિ 11.19 રાઉટર સનથી ICMP સ્ત્રોત સપ્રેસન.

અમે આ આઉટપુટમાંથી ઘણી રેખાઓ દૂર કરી છે. પ્રથમ 26 ડેટાગ્રામ ભૂલો વિના પ્રાપ્ત થયા હતા: અમે ફક્ત પ્રથમ માટે આઉટપુટ દર્શાવ્યું હતું. 27મા ડેટાગ્રામથી શરૂ કરીને, જ્યારે પણ ડેટાગ્રામ મોકલવામાં આવે છે ત્યારે અમને સોર્સ સપ્રેશન એરર મળે છે. કુલ આઉટપુટની 26+(74x2)=174 રેખાઓ હતી.

પ્રકરણ 2 માં અમારી સીરીયલ લાઇન બેન્ડવિડ્થ ગણતરીમાંથી, આપણે જોઈ શકીએ છીએ કે 9600 bps પર 1024-બાઇટ ડેટાગ્રામને ટ્રાન્સમિટ કરવામાં એક સેકન્ડ કરતાં વધુ સમય લાગશે. (અમારા ઉદાહરણમાં, આમાં વધુ સમય લાગશે કારણ કે 20+8+1024 બાઇટ્સનો ડેટાગ્રામ વિભાજિત થશે કારણ કે સૂર્યથી નેટબી સુધીની SLIP લિંકનું MTU 552 બાઇટ્સ છે.) જો કે, આકૃતિ 11.19 માં બતાવેલ સમયથી, આપણે જોઈએ છીએ તે રાઉટર સનને SLIP ચેનલ પર પ્રથમ મોકલવામાં આવે તે પહેલા એક સેકન્ડ કરતાં પણ ઓછા સમયમાં તમામ 100 ડેટાગ્રામ પ્રાપ્ત થયા હતા. તે સ્પષ્ટ છે કે અમે તેના ઘણા બફરનો ઉપયોગ કર્યો છે.

જો કે RFC 1009ને જ્યારે તેના બફર્સ ભરાઈ જાય ત્યારે સ્ત્રોત સપ્રેશન ભૂલો જનરેટ કરવા માટે રાઉટરની જરૂર પડે છે, નવી રાઉટર જરૂરીયાતો RFC [Almquist 1993] આમાં ફેરફાર કરે છે અને કહે છે કે રાઉટરએ સ્ત્રોત સપ્રેશન ભૂલો જનરેટ કરવી જોઈએ નહીં.

ઉદાહરણમાં નોંધવા માટેનો આગળનો મુદ્દો એ છે કે સોક પ્રોગ્રામને ક્યારેય સૂચનાઓ પ્રાપ્ત થઈ નથી કે સ્ત્રોત દબાવવામાં આવ્યો હતો, અથવા જો તેણે કર્યું હોય, તો તેણે તેને અવગણ્યું. આ સૂચવે છે કે UDP પ્રોટોકોલનો ઉપયોગ કરતી વખતે BSD અમલીકરણો સામાન્ય રીતે પ્રાપ્ત સ્ત્રોત દમન સંદેશાઓને અવગણે છે. (ટીસીપીના કિસ્સામાં, જ્યારે સૂચના પ્રાપ્ત થાય છે, ત્યારે કનેક્શન પર ડેટા ટ્રાન્સમિશન ધીમો પડી જાય છે જેના માટે સ્રોત દબાવવામાં આવે છે. અમે પ્રકરણ 21 ના ​​વિભાગમાં આની ચર્ચા કરીશું.) સમસ્યા એ છે કે પ્રક્રિયા જે ડેટા જનરેટ કરે છે. જે બદલામાં કારણ બને છે જ્યારે સ્ત્રોત દમન સંદેશ પ્રાપ્ત થાય છે ત્યારે દમન સ્ત્રોત પહેલેથી જ પૂર્ણ થઈ શકે છે. ખરેખર, જો આપણે યુનિક્સ ટાઈમ પ્રોગ્રામનો ઉપયોગ કરીને અંદાજ લગાવીએ કે સોક પ્રોગ્રામ કેટલા સમયથી ચાલી રહ્યો છે, તો આપણે શોધી કાઢીએ છીએ કે તે માત્ર 0.5 સેકન્ડ માટે ચાલ્યો હતો. જો કે, અમે આકૃતિ 11.19 માં જોયું કે પ્રથમ ડેટાગ્રામ મોકલ્યાના 0.71 સેકન્ડ પછી, એટલે કે, પ્રક્રિયા બંધ થઈ ગયા પછી કેટલાક સ્રોત દમન સંદેશાઓ પ્રાપ્ત થયા હતા. જો અમારો પ્રોગ્રામ 100 ડેટાગ્રામ બનાવે અને બહાર નીકળી જાય તો શું થાય છે. બધા 100 ડેટાગ્રામ મોકલવામાં આવશે નહીં - તેમાંથી કેટલાક આઉટપુટ કતારમાં હશે.

આ ઉદાહરણ સાબિત કરે છે કે UDP એક અવિશ્વસનીય પ્રોટોકોલ છે અને પ્રવાહ નિયંત્રણનું મહત્વ દર્શાવે છે. સોક પ્રોગ્રામે સફળતાપૂર્વક નેટવર્ક પર 100 ડેટાગ્રામ મોકલ્યા હોવા છતાં, માત્ર 26 તેમના ગંતવ્ય સુધી પહોંચ્યા. બાકીના 74 મોટા ભાગે મધ્યવર્તી રાઉટર દ્વારા કાઢી નાખવામાં આવ્યા હતા. જો એપ્લિકેશન અમુક પ્રકારની સૂચનાઓને સમર્થન આપતી નથી, તો મોકલનાર જાણતો નથી કે પ્રાપ્તકર્તાએ ડેટા સ્વીકાર્યો છે કે નહીં.

UDP સર્વર

UDP નો ઉપયોગ કરવાની ઘણી સુવિધાઓ છે જે સર્વરની ડિઝાઇન અને અમલીકરણને અસર કરે છે. ક્લાયંટ ડિઝાઇન અને અમલીકરણ સામાન્ય રીતે સર્વર્સને અમલમાં મૂકવા કરતાં સરળ છે. આથી અમે ક્લાયંટ ડેવલપમેન્ટને બદલે સર્વર ડેવલપમેન્ટની ચર્ચા કરીશું. સર્વર્સ સામાન્ય રીતે ઓપરેટિંગ સિસ્ટમ સાથે ક્રિયાપ્રતિક્રિયા કરે છે, અને મોટાભાગના સર્વર્સને એક જ સમયે બહુવિધ ક્લાયન્ટ્સની વિનંતીઓને હેન્ડલ કરવાની કોઈ રીતની જરૂર હોય છે.

સામાન્ય રીતે, જ્યારે ક્લાયંટ શરૂ થાય છે, ત્યારે તે તરત જ એક સર્વર સાથે જોડાણ સ્થાપિત કરે છે. બીજી બાજુ સર્વર્સ, સ્ટાર્ટ અપ કરે છે અને પછી ક્લાયન્ટ તરફથી વિનંતી આવવાની રાહ જોતી વખતે સૂઈ જાય છે. UDP ના કિસ્સામાં, જ્યારે ક્લાયંટ તરફથી ડેટાગ્રામ આવે છે ત્યારે સર્વર "જાગે છે", આ ડેટાગ્રામમાં અમુક સ્વરૂપમાં વિનંતી શામેલ હોઈ શકે છે.

અમે ક્લાયન્ટ્સ અને સર્વર્સના પ્રોગ્રામિંગ પાસાઓને ધ્યાનમાં લઈશું નહીં (તે બધું વધુ વિગતવાર વર્ણવે છે), પરંતુ અમે UDP પ્રોટોકોલની લાક્ષણિકતાઓને ધ્યાનમાં લઈશું જે UDP નો ઉપયોગ કરતા સર્વરની ડિઝાઇન અને અમલીકરણને અસર કરે છે. (અમે TCP સર્વરની વિગતોની ચર્ચા પ્રકરણ 18 માં એક વિભાગમાં કરીશું.) અમે ઉપયોગમાં લેવાતા UDP અમલીકરણોના આધારે કેટલીક લાક્ષણિકતાઓની ચર્ચા કરીશું, અને અમે તે લાક્ષણિકતાઓ પણ જોઈશું જે મોટાભાગના અમલીકરણો માટે સામાન્ય છે.

ક્લાયન્ટનું IP સરનામું અને પોર્ટ નંબર

ક્લાયન્ટ તરફથી UDP ડેટાગ્રામ આવે છે. IP હેડરમાં સ્ત્રોત અને ગંતવ્ય IP એડ્રેસ હોય છે, અને UDP હેડરમાં સ્ત્રોત અને ગંતવ્ય UDP પોર્ટ નંબરો હોય છે. જ્યારે એપ્લિકેશન UDP ડેટાગ્રામ મેળવે છે, ઓપરેટિંગ સિસ્ટમસંદેશ કોણે મોકલ્યો છે તે જણાવવું જોઈએ - સ્ત્રોત IP સરનામું અને પોર્ટ નંબર.

આ લાક્ષણિકતા એક UDP સર્વરને બહુવિધ ક્લાયન્ટ્સને હેન્ડલ કરવાની મંજૂરી આપે છે. દરેક પ્રતિભાવ ક્લાયન્ટને મોકલવામાં આવે છે જેણે વિનંતી મોકલી છે.

ગંતવ્ય IP સરનામું

કેટલીક એપ્લિકેશનોને જાણવાની જરૂર છે કે ડેટાગ્રામ કોના માટે નિર્ધારિત છે, એટલે કે, ગંતવ્ય IP સરનામું. ઉદાહરણ તરીકે, હોસ્ટ આવશ્યકતાઓ RFC સ્પષ્ટ કરે છે કે TFTP સર્વરે પ્રાપ્ત ડેટાગ્રામને અવગણવા જોઈએ જે બ્રોડકાસ્ટ સરનામાં પર મોકલવામાં આવે છે. (અમે માં બ્રોડકાસ્ટ એડ્રેસીંગ અને TFTP માં વર્ણન કરીશું.)

આનો અર્થ એ છે કે ઑપરેટિંગ સિસ્ટમે પ્રાપ્ત કરેલ UDP ડેટાગ્રામમાંથી ગંતવ્ય IP સરનામું એપ્લિકેશનને પસાર કરવું આવશ્યક છે. કમનસીબે, તમામ અમલીકરણો આ સુવિધા પ્રદાન કરતા નથી.

સોકેટ્સ API IP_RECVDSTADDR વિકલ્પનો ઉપયોગ કરીને આ ક્ષમતા પ્રદાન કરે છે. ટેક્સ્ટમાં આવરી લેવામાં આવેલી સિસ્ટમોમાંથી, માત્ર BSD/386, 4.4BSD, અને AIX 3.2.2 આ વિકલ્પને સમર્થન આપે છે. SVR4, SunOS 4.x અને Solaris 2.x સપોર્ટેડ નથી.

UDP ઇનપુટ કતાર

પ્રકરણ 1 વિભાગમાં, અમે કહ્યું કે મોટાભાગના UDP સર્વર્સ એક જ UDP પોર્ટ (પૂર્વ-જાણીતા સર્વર પોર્ટ્સ) નો ઉપયોગ કરીને ક્લાયન્ટને બધી વિનંતીઓ આપી શકે છે.

સામાન્ય રીતે, એપ્લિકેશન દ્વારા ઉપયોગમાં લેવાતા દરેક UDP પોર્ટ સાથે સંકળાયેલ ઇનપુટ કતારનું કદ મર્યાદિત છે. આનો અર્થ એ છે કે વિવિધ ક્લાયન્ટ્સ તરફથી એક જ સમયે આવતી વિનંતીઓ UDP કતારમાં આપમેળે કતારબદ્ધ થાય છે. પ્રાપ્ત થયેલ UDP ડેટાગ્રામ એપ્લિકેશનને મોકલવામાં આવે છે (જ્યારે તે આગલા ડેટાગ્રામની વિનંતી કરે છે) જે ક્રમમાં તેઓ પ્રાપ્ત થયા હતા.

જો કે, એવી શક્યતા છે, જો કતાર ભરેલી હોય, તો કર્નલમાં UDP મોડ્યુલ ઇનકમિંગ ડેટાગ્રામને કાઢી નાખશે. અમે નીચેના પ્રયોગ દ્વારા આ અવલોકન કરી શકીએ છીએ. અમે અમારો સોક પ્રોગ્રામ bsdi હોસ્ટ પર શરૂ કરીએ છીએ, આમ UDP સર્વર શરૂ કરીએ છીએ:

>

bsdi % sock -s -u -v -E -R256 -r256 -P30 6666
140.252.13.33 થી 140.252.13.63 સુધી: 1111111111 સૂર્યથી પ્રસારણ સરનામા સુધી
140.252.13.34 થી, 140.252.13.35 સુધી: 4444444444444 svr4 થી વ્યક્તિગત સરનામા પર

અમે નીચેના ફ્લેગ્સનો ઉપયોગ કર્યો: -s, સર્વર તરીકે પ્રોગ્રામ ચલાવે છે, UDP માટે -u, -v, ક્લાયંટનું IP સરનામું છાપે છે, અને -E ગંતવ્યનું IP સરનામું છાપે છે (આ કિસ્સામાં સિસ્ટમ તેને મંજૂરી આપે છે). વધુમાં, અમે આ પોર્ટ માટે UDP રીસીવ બફરને 256 બાઇટ્સ ( -R) પર સેટ કરીએ છીએ, તેની સાથે દરેક એપ્લિકેશન (-r) દ્વારા વાંચી શકાય તેવા કદ સાથે. -P30 ફ્લેગ તમને પ્રથમ ડેટાગ્રામ વાંચતા પહેલા UDP પોર્ટ સાફ કર્યા પછી 30 સેકન્ડ રાહ જોવાનું કહે છે. આ અમને અન્ય બે હોસ્ટ પર ક્લાયંટ શરૂ કરવા, કેટલાક ડેટાગ્રામ મોકલવા અને પ્રાપ્ત કતાર કેવી રીતે કાર્ય કરે છે તે જોવા માટે સમય આપે છે.

સર્વર શરૂ થયા પછી અને 30-સેકન્ડનો વિરામ પસાર થયા પછી, અમે હોસ્ટ સન પર એક ક્લાયંટ શરૂ કરીએ છીએ અને ત્રણ ડેટાગ્રામ મોકલીએ છીએ:

>

સૂર્ય % sock -u -v 140.252.13.63 6666ઇથરનેટ બ્રોડકાસ્ટ એડ્રેસ પર
140.252.13.33.1252 થી 140.252.13.63.6666 ના રોજ જોડાયેલ
1111111111 11 બાઇટ્સ ડેટા (નવીલાઇન સાથે)
222222222 10 બાઇટ્સ ડેટા (નવીલાઇન સાથે)
33333333333 12 બાઇટ્સ ડેટા (નવીલાઇન સાથે)

ગંતવ્ય સરનામું પ્રસારણ સરનામું છે (140.252.13.63). પછી અમે svr4 હોસ્ટ પર બીજો ક્લાયંટ શરૂ કર્યો અને ત્રણ વધુ ડેટાગ્રામ મોકલ્યા:

>

svr4% sock -u -v bsdi 6666
0.0.0.0.1042 થી 140.252.13.35.6666 પર જોડાયેલ
4444444444444 ડેટાના 14 બાઇટ્સ (નવીલાઇન સાથે)
555555555555555 ડેટાના 16 બાઇટ્સ (નવીલાઇન સાથે)
66666666 9 બાઇટ્સ ડેટા (નવીલાઇન સાથે)

bsdi પર અગાઉ દર્શાવેલ ઇન્ટરેક્ટિવ આઉટપુટમાં નોંધવા જેવી પ્રથમ બાબત એ છે કે એપ્લિકેશન દ્વારા માત્ર બે ડેટાગ્રામ પ્રાપ્ત થયા હતા: પ્રથમ સૂર્યમાંથી, જે તમામ હતા, અને પ્રથમ svr4, જે તમામ ચોગ્ગા હતા. બાકીના ચાર ડેટાગ્રામ કાઢી નાખવામાં આવ્યા હતા.

આકૃતિ 11.20 માં tcpdump આદેશનું આઉટપુટ બતાવે છે કે તમામ છ ડેટાગ્રામ ગંતવ્ય યજમાનને વિતરિત કરવામાં આવ્યા હતા. ડેટાગ્રામ બે ક્લાયન્ટ્સ પાસેથી વિપરીત ક્રમમાં આવ્યા: પ્રથમ સૂર્યથી, પછી svr4 અને તેથી વધુ. અમે એ પણ નોંધી શકીએ છીએ કે સર્વર ઊંઘમાં હતું ત્યારે 30 સેકન્ડના સમયગાળા દરમિયાન તમામ છ લગભગ 12 સેકન્ડમાં વિતરિત કરવામાં આવ્યા હતા.

>

1 0.0 સૂર્ય.1252 > 140.252.13.63.6666: udp 11
2 2.499184 (2.4992) svr4.1042 > bsdi.6666: udp 14
3 4.959166 (2.4600) સૂર્ય.1252 > 140.252.13.63.6666: udp 10
4 7.607149 (2.6480) svr4.1042 > bsdi.6666: udp 16
5 10.079059 (2.4719) સૂર્ય.1252 > 140.252.13.63.6666: udp 12
6 12.415943 (2.3369) svr4.1042 > bsdi.6666: udp 9

આકૃતિ 11.20 બે ક્લાયન્ટ્સ દ્વારા મોકલવામાં આવેલ UDP ડેટાગ્રામ માટે tcpdump આઉટપુટ.

એ પણ નોંધવું જોઈએ કે -E વિકલ્પ સાથે, સર્વર દરેક ડેટાગ્રામનું ગંતવ્ય IP સરનામું શોધી શકે છે. સર્વર પસંદ કરી શકે છે કે બ્રોડકાસ્ટ એડ્રેસ પર મોકલવામાં આવેલ પ્રથમ પ્રાપ્ત ડેટાગ્રામ સાથે શું કરવું.

આ ઉદાહરણમાં, કેટલીક વધુ સુવિધાઓ પર ધ્યાન આપવું જરૂરી છે. પ્રથમ, જ્યારે ઇનપુટ કતાર ભરાઈ ગઈ હતી ત્યારે એપ્લિકેશને જાણ કરી ન હતી. વધારાના UDP ડેટાગ્રામ ખાલી કાઢી નાખવામાં આવ્યા હતા. અમે tcpdump આઉટપુટમાં પણ જોઈ શકીએ છીએ કે ક્લાયન્ટને માહિતી આપવા માટે કંઈપણ પાછું મોકલવામાં આવ્યું નથી કે ડેટાગ્રામ્સ કાઢી નાખવામાં આવ્યા હતા. ICMP સ્ત્રોત દમન સંદેશ જેવું કંઈ જ મોકલવામાં આવ્યું ન હતું, બિલકુલ કંઈ જ નહીં. છેલ્લે, અમે એ નિર્દેશ કરવા માંગીએ છીએ કે UDP ઇનપુટ કતાર FIFO (ફર્સ્ટ ઇન, ફર્સ્ટ આઉટ) ધોરણે કાર્ય કરે છે, જ્યારે આપણે આ પ્રકરણના વિભાગમાં જોયું તેમ, ARP ઇનપુટ કતાર LIFO (છેલ્લે માં, પ્રથમ બહાર) આધાર.

સ્થાનિક IP સરનામાની મર્યાદા

મોટાભાગના UDP સર્વર્સ UDP એન્ડપોઇન્ટ બનાવતી વખતે તેમના IP સરનામાઓ માટે વાઇલ્ડકાર્ડનો ઉપયોગ કરે છે. આનો અર્થ એ છે કે સર્વર પોર્ટ માટે નિર્ધારિત ઇનકમિંગ UDP ડેટાગ્રામ કોઈપણ સ્થાનિક ઇન્ટરફેસ દ્વારા સ્વીકારવામાં આવશે. ઉદાહરણ તરીકે, અમે પોર્ટ 7777 પર UDP સર્વર શરૂ કરી શકીએ છીએ:

>સૂર્ય % sock -u -s 7777

અમે પછી આ અંતિમ બિંદુની સ્થિતિ જોવા માટે netstat આદેશનો ઉપયોગ કરીશું:

>

સૂર્ય % netstat -a -n -f inet
સક્રિય ઇન્ટરનેટ કનેક્શન્સ (સર્વર સહિત)
Proto Recv-Q Send-Q સ્થાનિક સરનામું વિદેશી સરનામું (રાજ્ય)
udp 0 0 *.7777*.*

આ આઉટપુટમાં, અમે ઘણી રેખાઓ દૂર કરી છે અને ફક્ત તે જ છોડી દીધી છે જે અમને રસપ્રદ છે. ધ -a ફ્લેગ તમામ નેટવર્ક એન્ડપોઇન્ટ પર અહેવાલ આપે છે. -n ફ્લેગ DNS નો ઉપયોગ કરવાને બદલે અને સરનામાંને નામોમાં રૂપાંતરિત કરવાને બદલે દશાંશ સંકેતમાં IP સરનામાંને છાપે છે, અને સેવાના નામોને બદલે પોર્ટ નંબર છાપે છે. -f inet વિકલ્પ માત્ર TCP અને UDP એન્ડપોઇન્ટની જાણ કરે છે.

સ્થાનિક સરનામું *.7777 તરીકે છાપવામાં આવે છે, જ્યાં ફૂદડીનો અર્થ છે કે કોઈપણ સરનામાને સ્થાનિક IP સરનામા તરીકે બદલી શકાય છે.

જ્યારે સર્વર તેનો એન્ડપોઇન્ટ બનાવે છે, ત્યારે તે હોસ્ટના સ્થાનિક IP સરનામાઓમાંથી એકનો ઉલ્લેખ કરી શકે છે, જેમાં તેના બ્રોડકાસ્ટ સરનામાંઓમાંથી એકનો સમાવેશ થાય છે, તે એન્ડપોઇન્ટના સ્થાનિક IP સરનામા તરીકે. આ કિસ્સામાં, આવનારા UDP ડેટાગ્રામને અંતિમ બિંદુ પર જ ટ્રાન્સમિટ કરવામાં આવશે જો ગંતવ્ય IP સરનામું ઉલ્લેખિત સ્થાનિક સરનામાં સાથે મેળ ખાતું હોય. સોક પ્રોગ્રામનો ઉપયોગ કરીને, તમે પોર્ટ નંબર પહેલાં IP સરનામું સ્પષ્ટ કરી શકો છો, અને આ IP સરનામું અંતિમ બિંદુ માટે સ્થાનિક IP સરનામું બની જાય છે. દાખ્લા તરીકે,

>સૂર્ય % sock -u -s 140.252.1.29 7777

SLIP ઇન્ટરફેસ પર આવતા ડેટાગ્રામમાંથી, 140.252.1.29 સરનામા સાથે ડેટાગ્રામ પસંદ કરે છે. netstat આદેશ આઉટપુટ આના જેવો દેખાશે:

>


udp 0 0 140.252.1.29.7777 *.*

જો આપણે હોસ્ટ bsdi થી આ સર્વર પર ડેટાગ્રામ મોકલવાનો પ્રયાસ કરીએ, જેનું સરનામું 140.252.13.35 છે, ઈથરનેટ દ્વારા, પોર્ટ અનુપલબ્ધ હોવા અંગે ICMP ભૂલ પરત કરવામાં આવશે. સર્વર ક્યારેય આ ડેટાગ્રામ જોશે નહીં. આકૃતિ 11.21 આને વધુ વિગતવાર બતાવે છે.

>

1 0.0 bsdi.1723 > sun.7777: udp 13
2 0.000822 (0.0008) સન > bsdi: ICmp: sun udp પોર્ટ 7777 અગમ્ય

આકૃતિ 11.21 UDP ડેટાગ્રામ પ્રોસેસિંગ નિષ્ફળતા સર્વરના સ્થાનિક સરનામા સાથે મેળ ખાતી નથી.

તે જ પોર્ટ પર અન્ય સર્વર્સ ચલાવવાનું શક્ય છે, દરેક તેના પોતાના સ્થાનિક IP સરનામા સાથે. જો કે, એપ્લિકેશને સિસ્ટમને સમાન પોર્ટ નંબરનો ફરીથી ઉપયોગ કરવાની મંજૂરી આપવી જોઈએ.

સોકેટ વિકલ્પ SO_REUSEADDR API માં ઉલ્લેખિત હોવો આવશ્યક છે. આ -A વિકલ્પનો ઉપયોગ કરીને અમારા સોક પ્રોગ્રામ દ્વારા કરવામાં આવે છે.

સન હોસ્ટ પર આપણે સમાન UDP પોર્ટ (8888) પર પાંચ અલગ-અલગ સર્વર શરૂ કરી શકીએ છીએ:

>

સૂર્ય % sock -u -s 140.252.1.29 8888 SLIP ચેનલ માટે
સૂર્ય % sock -u -s -A 140.252.13.33 8888ઇથરનેટ માટે
સૂર્ય % sock -u -s -A 127.0.0.1 8888લૂપબેક ઈન્ટરફેસ માટે
સૂર્ય % sock -u -s -A 140.252.13.63 8888ઇથરનેટ બ્રોડકાસ્ટ વિનંતીઓ માટે
સૂર્ય % sock -u -s -A 8888બાકીની દરેક વસ્તુ માટે (IP એડ્રેસમાં મેટાકેરેક્ટર)

સર્વરમાંથી પ્રથમ -A ફ્લેગ સાથે શરૂ થવાની અપેક્ષા હતી, જે સિસ્ટમને કહે છે કે સમાન પોર્ટ નંબરનો ફરીથી ઉપયોગ કરી શકાય છે. નેટસ્ટેટ કમાન્ડ આઉટપુટ નીચેના પાંચ સર્વર બતાવે છે:

>

Proto Recv-Q Send-Q સ્થાનિક સરનામું વિદેશી સરનામું (રાજ્ય)
udp 0 0 *.8888*.*
udp 0 0 140.252.13.63.8888 *.*
udp 0 0 127.0.0.1 8888 *.*
યુડીપી 0 0 140.252.13.33 8888 *.*
udp 0 0 140.252.1.29 8888 *.*

આ દૃશ્યમાં, ફક્ત 140.252.1.255 સરનામા માટે નિર્ધારિત ડેટાગ્રામ જ સર્વરને સ્થાનિક IP સરનામા તરીકે ઉપયોગમાં લેવાતા વાઇલ્ડકાર્ડ અક્ષરો સાથે હિટ કરશે, કારણ કે અન્ય ચાર સર્વર તમામ સંભવિત સરનામાંને આવરી લે છે.

IP એડ્રેસ અવેજીનો ઉપયોગ કરતી વખતે, પ્રાથમિકતા સિસ્ટમનો ઉપયોગ કરવામાં આવે છે. નિર્દિષ્ટ IP સરનામા સાથેનો અંતિમ બિંદુ જે ગંતવ્ય IP સરનામાં સાથે મેળ ખાય છે તે હંમેશા વાઇલ્ડકાર્ડ સરનામાં પહેલાં પસંદ કરવામાં આવશે. જ્યારે ઉલ્લેખિત સરનામા માટે કોઈ મેળ ન મળે ત્યારે જ વાઈલ્ડકાર્ડ એન્ડપોઈન્ટનો ઉપયોગ થાય છે.

બાહ્ય IP સરનામાઓને મર્યાદિત કરવું

અમે અગાઉ બતાવેલ નેટસ્ટેટ કમાન્ડના તમામ આઉટપુટમાં, રિમોટ IP એડ્રેસ અને રિમોટ પોર્ટ નંબર *.* તરીકે દર્શાવવામાં આવ્યા છે. આનો અર્થ એ છે કે એન્ડપોઇન્ટ કોઈપણ IP સરનામાં અને કોઈપણ પોર્ટ નંબર પરથી આવનારા UDP ડેટાગ્રામને સ્વીકારશે. મોટાભાગના અમલીકરણો UDP એન્ડપોઇન્ટ્સને રિમોટ એડ્રેસને પ્રતિબંધિત કરવાની મંજૂરી આપે છે.

બીજા શબ્દોમાં કહીએ તો, અંતિમ બિંદુ માત્ર ઉલ્લેખિત IP સરનામા અને પોર્ટ નંબર પરથી UDP ડેટાગ્રામ સ્વીકારી શકે છે. અમારો સોક પ્રોગ્રામ રિમોટ IP એડ્રેસ અને પોર્ટ નંબરનો ઉલ્લેખ કરવા માટે -f વિકલ્પનો ઉપયોગ કરે છે:

>સૂર્ય % sock -u -s -f 140.252.13.35.4444 5555

આ કિસ્સામાં, રિમોટ IP એડ્રેસ 140.252.13.35 (અમારું હોસ્ટ bsdi), અને રિમોટ પોર્ટ નંબર 4444 પર સેટ કરેલ છે. પૂર્વ-જાણીતું સર્વર પોર્ટ 5555 છે. જો આપણે નેટસ્ટેટ ચલાવીએ, તો આપણે જોશું કે સ્થાનિક IP સરનામું પણ સેટ છે, ભલે અમે તેનો સીધો ઉલ્લેખ કર્યો ન હોય:

>

Proto Recv-Q Send-Q સ્થાનિક સરનામું વિદેશી સરનામું (રાજ્ય)
યુડીપી 0 0 140.252.13.33.5555 140.252.13.35.4444

આડ-અસરબર્કલે સિસ્ટમો પર દૂરસ્થ IP સરનામું અને દૂરસ્થ પોર્ટ નંબરનો ઉલ્લેખ કરવો: જો દૂરસ્થ સરનામું સેટ કરતી વખતે સ્થાનિક IP સરનામું પસંદ ન થયું હોય, તો સ્થાનિક સરનામું આપમેળે પસંદ કરવામાં આવે છે. સ્થાનિક IP સરનામું ઇન્ટરફેસના IP સરનામા પર સેટ કરેલું છે જે IP રૂટીંગનો ઉપયોગ કરીને ઉલ્લેખિત રિમોટ IP સરનામાં સુધી પહોંચવા માટે પસંદ કરવામાં આવે છે. ખરેખર, આ ઉદાહરણમાં, ઈથરનેટ માટે સૂર્યનું IP સરનામું જે રિમોટ એડ્રેસ સાથે જોડાયેલ છે તે 140.252.13.33 છે.

આકૃતિ 11.22 ત્રણ પ્રકારનાં સરનામાં અને પોર્ટ્સ બતાવે છે જે UDP સર્વર પોતાના માટે સેટ કરી શકે છે.

આકૃતિ 11.22 UDP સર્વર માટે સ્થાનિક અને દૂરસ્થ IP સરનામાં અને પોર્ટ નંબર સ્પષ્ટ કરી રહ્યા છે.

બધા કિસ્સાઓમાં, lport એ સર્વરનું પૂર્વ-જાણીતું પોર્ટ છે, અને localIP એ સ્થાનિક ઇન્ટરફેસનું IP સરનામું હોવું આવશ્યક છે. આકૃતિ 11.22 માં જે ક્રમમાં ત્રણ રેખાઓ ગોઠવવામાં આવી છે તે ક્રમ દર્શાવે છે કે જેમાં UDP મોડ્યુલ એ નક્કી કરવાનો પ્રયાસ કરે છે કે કયા સ્થાનિક એન્ડપોઇન્ટને ઇનકમિંગ ડેટાગ્રામ મળ્યો છે. સૌથી વધુ પ્રતિબંધિત સરનામાં-થી-પોર્ટ એસોસિએશન (પ્રથમ લાઇન) પ્રથમ પસંદ કરવામાં આવે છે, અને ઓછી પ્રતિબંધિત એક (છેલ્લી લાઇન, જ્યાં IP સરનામું અને પોર્ટ નંબર બંને મેટાકેરેક્ટર તરીકે ઉલ્લેખિત છે) છેલ્લે પસંદ કરવામાં આવે છે.

પોર્ટ દીઠ બહુવિધ સ્વાગત

જોકે RFC માં ઉલ્લેખિત નથી, મોટાભાગના અમલીકરણો એક સમયે માત્ર એક જ એપ્લિકેશનને એક સ્થાનિક સરનામા અને UDP પોર્ટ નંબર સાથે સાંકળવાની મંજૂરી આપે છે. જ્યારે UDP ડેટાગ્રામ તેના IP સરનામાં અને પોર્ટ નંબર પર ગંતવ્ય હોસ્ટ પર પહોંચે છે, ત્યારે એક નકલ એક જ એન્ડપોઇન્ટ પર પહોંચાડવામાં આવે છે. એન્ડપોઇન્ટનું IP સરનામું વાઇલ્ડકાર્ડ તરીકે રજૂ કરી શકાય છે, જેમ કે અગાઉ બતાવ્યું છે.

ઉદાહરણ તરીકે, SunOS 4.1.3 માં અમે પોર્ટ 9999 પર વાઇલ્ડકાર્ડ્સના સ્વરૂપમાં સ્થાનિક IP સરનામા સાથે એક સર્વર શરૂ કર્યું છે:

>સૂર્ય % sock -u -s 9999

જો આપણે તે જ સ્થાનિક વાઇલ્ડકાર્ડ સરનામાં અને સમાન પોર્ટ સાથે બીજું સર્વર શરૂ કરવાનો પ્રયાસ કરીએ, તો તે કામ કરશે નહીં, ભલે આપણે -A વિકલ્પનો ઉલ્લેખ કરીએ:

>

સૂર્ય % sock -u -s 9999તે આ રીતે ન થવું જોઈએ
સ્થાનિક સરનામું બાંધી શકાતું નથી: સરનામું પહેલેથી ઉપયોગમાં છે

સૂર્ય % sock -u -s -A 9999તેથી જ અમે -A ધ્વજનો ઉલ્લેખ કર્યો છે
સ્થાનિક સરનામું બાંધી શકાતું નથી: સરનામું પહેલેથી ઉપયોગમાં છે

મલ્ટિકાસ્ટ (જુઓ) ને સપોર્ટ કરતી સિસ્ટમો માટે, વસ્તુઓ અલગ છે. બહુવિધ એન્ડપોઇન્ટ્સ સમાન સ્થાનિક સરનામું અને UDP પોર્ટ નંબરનો ઉપયોગ કરી શકે છે, પરંતુ એપ્લિકેશને API ને જણાવવું જોઈએ કે આની મંજૂરી છે (-A ફ્લેગ SO_REUSEADDR સોકેટ વિકલ્પનો ઉપયોગ કરે છે).

4.4BSD, જે મલ્ટીકાસ્ટિંગને સપોર્ટ કરે છે, એપ્લીકેશનને એક જ પોર્ટને શેર કરવા માટે બહુવિધ એન્ડપોઇન્ટને મંજૂરી આપવા માટે એક અલગ સોકેટ વિકલ્પ (SO_REUSEPORT) સેટ કરવાની જરૂર છે. વધુમાં, દરેક એન્ડપોઇન્ટે આ વિકલ્પનો ઉલ્લેખ કરવો આવશ્યક છે, જેમાં આ પોર્ટનો ઉપયોગ કરતા પ્રથમ એન્ડપોઇન્ટનો સમાવેશ થાય છે.

જ્યારે UDP ડેટાગ્રામ તેના ગંતવ્ય IP સરનામાં પર પહોંચે છે, જે એક પ્રસારણ અથવા મલ્ટિકાસ્ટ સરનામું છે, અને તે IP સરનામાં અને પોર્ટ નંબર સાથે સંકળાયેલા બહુવિધ એન્ડપોઇન્ટ્સ હોય છે, ત્યારે ઇનકમિંગ ડેટાગ્રામની એક નકલ દરેક એન્ડપોઇન્ટને મોકલવામાં આવે છે. (અંતિમ બિંદુનું સ્થાનિક IP સરનામું વાઇલ્ડકાર્ડ્સ તરીકે નિર્દિષ્ટ કરી શકાય છે અને તે કોઈપણ ગંતવ્ય IP સરનામા સાથે મેળ ખાશે.) જો કે, જો આવનાર IP ડેટાગ્રામ પાસે ગંતવ્ય IP સરનામું હોય જે ખાનગી સરનામું હોય, તો ડેટાગ્રામની માત્ર એક નકલ એક અંતિમ બિંદુને વિતરિત કરવામાં આવે છે. કયા અંતિમ બિંદુ વ્યક્તિગત સરનામા ડેટાગ્રામ મેળવે છે તે અમલીકરણ આધારિત છે.

સંક્ષિપ્ત તારણો

UDP એ એક સરળ પ્રોટોકોલ છે. સત્તાવાર સ્પષ્ટીકરણ RFC 768 [પોસ્ટેલ 1980] માત્ર ત્રણ પાના લાંબુ છે. તે IP ઉપર અને પાછળની વપરાશકર્તા પ્રક્રિયાઓને જે સેવાઓ પ્રદાન કરે છે તે પોર્ટ નંબર અને વૈકલ્પિક ચેકસમ છે. અમે ચેકસમ ગણતરીઓની સમીક્ષા કરવા અને ફ્રેગમેન્ટેશન કેવી રીતે કાર્ય કરે છે તે જોવા માટે UDP નો ઉપયોગ કર્યો.

આગળ અમે ICMP અગમ્ય ભૂલ જોઈ, જે નવા પરિવહન MTU નિર્ધારણ વિશેષતાનો ભાગ છે (જુઓ પ્રકરણ 2, વિભાગ). અમે Traceroute અને UDP નો ઉપયોગ કરીને પરિવહન MTU નક્કી કરવાનું જોયું. UDP અને ARP વચ્ચેની ક્રિયાપ્રતિક્રિયાની પ્રક્રિયાની પણ ચર્ચા કરવામાં આવી છે.

અમે ચકાસ્યું છે કે ICMP સ્ત્રોત સપ્રેશન એરર એવી સિસ્ટમ દ્વારા મોકલી શકાય છે કે જે IP ડેટાગ્રામ્સ તેની પ્રક્રિયા કરી શકે તેના કરતાં વધુ ઝડપથી પ્રાપ્ત કરી રહી છે. UDP નો ઉપયોગ કરીને આ ICMP ભૂલો સરળતાથી જનરેટ કરવી શક્ય છે.

કસરતો

  1. આ પ્રકરણના વિભાગમાં, અમે 1473 બાઈટના વપરાશકર્તા ડેટાના કદ સાથે UDP ડેટાગ્રામ લખીને ઈથરનેટમાં ફ્રેગમેન્ટેશન કર્યું છે. જો IEEE 802 એન્કેપ્સ્યુલેશનનો ઉપયોગ કરવામાં આવે તો (પ્રકરણ 2, વિભાગ) ઇથરનેટ પર ફ્રેગમેન્ટેશનનું કારણ બની શકે તેવા વપરાશકર્તા ડેટાનું સૌથી નાનું કદ શું છે?
  2. RFC 791 [પોસ્ટેલ 1981a] વાંચો અને મને કહો કે શા માટે છેલ્લા એક સિવાયના તમામ ટુકડાઓ 8 બાઇટ્સ લંબાઈના ગુણાંકના હોવા જોઈએ.
  3. યુઝર ડેટાના 8192 બાઇટ્સ સાથે ઇથરનેટ અને UDP ડેટાગ્રામની કલ્પના કરો. કેટલા ટુકડાઓ સ્થાનાંતરિત થશે અને દરેક ટુકડા માટે ઓફસેટ લંબાઈ કેટલી હશે?
  4. અગાઉના ઉદાહરણ સાથે ચાલુ રાખીને, કલ્પના કરો કે આ ડેટાગ્રામ્સ પછી 552 ના MTU સાથે SLIP ચેનલમાં સ્થાનાંતરિત થાય છે. તમારે યાદ રાખવાની જરૂર છે કે દરેક ફ્રેગમેન્ટમાં ડેટાનો જથ્થો (IP હેડર સિવાયની દરેક વસ્તુ) 8 બાઈટનો બહુવિધ હોવો જોઈએ. કેટલા ટુકડાઓ પ્રસારિત થાય છે અને દરેક ટુકડાની ઓફસેટ અને લંબાઈ કેટલી છે?
  5. UDP નો ઉપયોગ કરતી એપ્લિકેશન ડેટાગ્રામ મોકલે છે જે 4 ભાગોમાં વિભાજિત છે. કલ્પના કરો કે ટુકડાઓ 1 અને 2 તેમના ગંતવ્ય પર પહોંચ્યા, જ્યારે ટુકડા 3 અને 4 ખોવાઈ ગયા. એપ્લિકેશનનો સમય સમાપ્ત થાય છે અને પછી, 10 સેકન્ડ પછી, UDP ડેટાગ્રામને ફરીથી ટ્રાન્સમિટ કરે છે. આ ડેટાગ્રામ પ્રથમ ટ્રાન્સમિશન (સમાન ઑફસેટ અને સમાન લંબાઈ) ની બરાબર એ જ રીતે વિભાજિત છે. હવે કલ્પના કરો કે ટુકડાઓ 1 અને 2 ખોવાઈ ગયા છે, પરંતુ ટુકડા 3 અને 4 તેમના ગંતવ્ય પર પહોંચે છે. રીસીવિંગ હોસ્ટ પર ફરીથી એસેમ્બલી ટાઈમર 60 સેકન્ડ પર સેટ છે, તેથી જ્યારે ટુકડાઓ 3 અને 4 તેમના અંતિમ મુકામ પર પહોંચ્યા, પ્રથમ ટ્રાન્સમિશનના ટુકડાઓ 1 અને 2 હજુ સુધી કાઢી નાખવામાં આવ્યા ન હતા. શું પ્રાપ્તકર્તા આ ચાર ટુકડાઓમાંથી IP ડેટાગ્રામ એસેમ્બલ કરી શકે છે?
  6. તમે કેવી રીતે જાણી શકો કે આકૃતિ 11.15 માંના ટુકડાઓ ખરેખર આકૃતિ 11.14 માં 5 અને 6 પંક્તિઓને અનુરૂપ છે?
  7. ), સખત અને છૂટક સ્ત્રોત રૂટીંગ (પ્રકરણ 8, વિભાગ). તમને લાગે છે કે ફ્રેગમેન્ટેશન દરમિયાન આ વિકલ્પો કેવી રીતે હેન્ડલ કરવામાં આવે છે? તમારા જવાબની તુલના RFC 791 સાથે કરો.
  8. અમે કહ્યું કે આવનારા IP ડેટાગ્રામ્સ ગંતવ્ય UDP પોર્ટ નંબરના આધારે ડિમલ્ટિપ્લેક્સ્ડ છે. શું તે યોગ્ય છે?

વપરાશકર્તા ડેટાગ્રામ પ્રોટોકોલ - UDP

UDP પ્રોટોકોલ TCP/IP પ્રોટોકોલ સ્ટેકમાં વપરાતા બે ટ્રાન્સપોર્ટ લેયર પ્રોટોકોલ્સમાંથી એક છે. UDP એપ્લીકેશન પ્રોગ્રામને એપ્લીકેશન લેયર પ્રોટોકોલને IP માં રૂપાંતરિત કરવા સાથે સંકળાયેલ ન્યૂનતમ ઓવરહેડ સાથે નેટવર્ક પર તેના સંદેશાઓ પ્રસારિત કરવાની મંજૂરી આપે છે. જો કે, એપ્લિકેશન પ્રોગ્રામે પોતે ખાતરી કરવાની કાળજી લેવી જોઈએ કે સંદેશ તેના ગંતવ્ય પર પહોંચાડવામાં આવ્યો હતો. UDP ડેટાગ્રામ (સંદેશ) હેડર આકૃતિ 2.10 માં બતાવ્યા પ્રમાણે દેખાય છે.

ચોખા. 2.10. UDP સંદેશ હેડર માળખું

UDP પ્રોટોકોલ ડેટા યુનિટને UDP પેકેટ અથવા વપરાશકર્તા ડેટાગ્રામ કહેવામાં આવે છે. UDP પેકેટમાં હેડર અને ડેટા ફીલ્ડ હોય છે જેમાં એપ્લિકેશન લેયર પેકેટ હોય છે. હેડરમાં એક સરળ ફોર્મેટ છે અને તેમાં ચાર બે-બાઈટ ફીલ્ડ્સ છે:

    UDP સ્ત્રોત પોર્ટ - મોકલવાની પ્રક્રિયાનો પોર્ટ નંબર,

    UDP ગંતવ્ય પોર્ટ - પ્રાપ્તકર્તા પ્રક્રિયાનો પોર્ટ નંબર,

    UDP સંદેશ લંબાઈ - બાઈટમાં UDP પેકેટની લંબાઈ,

    UDP ચેકસમ - UDP પેકેટનું ચેકસમ

UDP પેકેટના તમામ ફીલ્ડ ભરેલા હોવા જરૂરી નથી. જો મોકલેલ ડેટાગ્રામ પ્રતિસાદની અપેક્ષા રાખતો નથી, તો પ્રેષકના સરનામાની જગ્યાએ શૂન્ય મૂકવામાં આવી શકે છે. તમે ચેકસમની ગણતરી કરવાનો ઇનકાર પણ કરી શકો છો, પરંતુ મહેરબાની કરીને નોંધ કરો કે IP પ્રોટોકોલ ડેટા ફીલ્ડને અવગણીને માત્ર IP પેકેટ હેડર માટે જ ચેકસમની ગણતરી કરે છે.

હેડરમાંના બંદરો UDP પ્રોટોકોલને મલ્ટિપ્લેક્સર તરીકે વ્યાખ્યાયિત કરે છે જે એપ્લીકેશનમાંથી સંદેશાઓને એકત્રિત કરવા અને પ્રોટોકોલ સ્તર પર મોકલવાની મંજૂરી આપે છે. આ કિસ્સામાં, એપ્લિકેશન ચોક્કસ પોર્ટનો ઉપયોગ કરે છે. નેટવર્ક પર વાતચીત કરતી એપ્લિકેશનો વિવિધ પોર્ટનો ઉપયોગ કરી શકે છે, જે પેકેટ હેડરમાં પ્રતિબિંબિત થાય છે. કુલ, 216 વિવિધ બંદરો વ્યાખ્યાયિત કરી શકાય છે. પ્રથમ 256 પોર્ટ કહેવાતી "જાણીતી સેવાઓ" ને સોંપવામાં આવે છે, જેમાં ઉદાહરણ તરીકે, UDP પોર્ટ 53 નો સમાવેશ થાય છે, જે DNS સેવાને સોંપવામાં આવે છે.

ક્ષેત્ર લંબાઈસંદેશની કુલ લંબાઈ નક્કી કરે છે. ક્ષેત્ર ચેકસમડેટા અખંડિતતાને નિયંત્રિત કરવા માટે સેવા આપે છે. યુડીપી પ્રોટોકોલનો ઉપયોગ કરતી એપ્લિકેશને ચેકસમ અને લેન્થ ફીલ્ડનું વિશ્લેષણ કરીને ડેટાની અખંડિતતાની કાળજી લેવી જોઈએ. વધુમાં, UDP દ્વારા ડેટાની આપ-લે કરતી વખતે, એપ્લિકેશન પ્રોગ્રામે પોતે જ પ્રાપ્તકર્તાને ડેટાની ડિલિવરીની દેખરેખ રાખવાની કાળજી લેવી જોઈએ. આ સામાન્ય રીતે એપ્લિકેશન પ્રોગ્રામ્સ વચ્ચે ડિલિવરી પુષ્ટિકરણની આપલે દ્વારા પ્રાપ્ત થાય છે.

સૌથી વધુ જાણીતી UDP-આધારિત સેવાઓ BIND ડોમેન નેમ સર્વિસ અને NFS વિતરિત ફાઇલ સિસ્ટમ છે. ટ્રેસરાઉટ ઉદાહરણ પર પાછા ફરતા, આ પ્રોગ્રામ UDP ટ્રાન્સપોર્ટનો પણ ઉપયોગ કરે છે. વાસ્તવમાં, તે UDP સંદેશ છે જે નેટવર્ક પર મોકલવામાં આવે છે, પરંતુ તે એવા પોર્ટનો ઉપયોગ કરે છે કે જેમાં સેવા નથી, તેથી જ એક ICMP પેકેટ જનરેટ થાય છે, જે પ્રાપ્ત કરનાર મશીન પર સેવાનો અભાવ શોધી કાઢે છે જ્યારે પેકેટ છેલ્લે સુધી પહોંચે છે. ગંતવ્ય મશીન.

ટ્રાન્સફર કંટ્રોલ પ્રોટોકોલ - TCP

જો એપ્લિકેશન માટે નેટવર્ક પર ડેટા ટ્રાન્સમિશનની ગુણવત્તાનું નિરીક્ષણ કરવું મહત્વપૂર્ણ છે, તો આ કિસ્સામાં TCP પ્રોટોકોલનો ઉપયોગ થાય છે. આ પ્રોટોકોલને વિશ્વસનીય, કનેક્શન-ઓરિએન્ટેડ અને ફ્લો-ઓરિએન્ટેડ પ્રોટોકોલ પણ કહેવામાં આવે છે. પ્રોટોકોલના આ ગુણધર્મોની ચર્ચા કરતા પહેલા, ચાલો નેટવર્ક પર પ્રસારિત ડેટાગ્રામના ફોર્મેટને ધ્યાનમાં લઈએ (આકૃતિ 2.11). આ બંધારણ મુજબ, TCP, UDP ની જેમ, પોર્ટ ધરાવે છે. પ્રથમ 256 પોર્ટ WKS ને સોંપવામાં આવ્યા છે, પોર્ટ 256 થી 1024 યુનિક્સ સેવાઓને સોંપવામાં આવ્યા છે, અને બાકીના તમારા વિવેકબુદ્ધિથી વાપરી શકાય છે. ક્ષેત્રમાં ક્રમ નંબરપેકેટ નંબરને પેકેટના અનુક્રમમાં વ્યાખ્યાયિત કરવામાં આવે છે જે સમગ્ર સંદેશ બનાવે છે, ત્યારબાદ સ્વીકૃતિ ક્ષેત્ર આવે છે નોલેજ નંબરઅને અન્ય નિયંત્રણ માહિતી.

ચોખા. 2.11. TCP પેકેટ માળખું

    સ્ત્રોત પોર્ટ (SOURS PORT) 2 બાઇટ્સ ધરાવે છે, મોકલવાની પ્રક્રિયાને ઓળખે છે;

    ગંતવ્ય પોર્ટ (DESTINATION PORT) 2 બાઇટ્સ ધરાવે છે, પ્રાપ્તકર્તા પ્રક્રિયાને ઓળખે છે;

    સિક્વન્સ નંબર (SEQUENCE NUMBER) 4 બાઇટ્સ ધરાવે છે, બાઇટ નંબર સૂચવે છે, જે મોકલેલા ડેટાના પ્રવાહને સંબંધિત સેગમેન્ટની ઓફસેટ નક્કી કરે છે;

    પુષ્ટિ થયેલ નંબર (સ્વીકૃતિ નંબર) 4 બાઇટ્સ ધરાવે છે, પ્રાપ્ત સેગમેન્ટમાં મહત્તમ બાઇટ નંબર ધરાવે છે, એકથી વધીને; તે આ મૂલ્ય છે જેનો ઉપયોગ રસીદ તરીકે થાય છે;

    હેડરની લંબાઈ (HLEN) 4 બિટ્સ લાંબી છે અને TCP સેગમેન્ટ હેડરની લંબાઈ સૂચવે છે, જે 32-બીટ શબ્દોમાં માપવામાં આવે છે. હેડરની લંબાઈ નિશ્ચિત નથી અને વિકલ્પો ફીલ્ડમાં સેટ કરેલ મૂલ્યોના આધારે બદલાઈ શકે છે;

    અનામત (આરક્ષિત) 6 બિટ્સ ધરાવે છે, ક્ષેત્ર પછીના ઉપયોગ માટે આરક્ષિત છે;

    કોડ બિટ્સ (CODE BITS) 6 બિટ્સ ધરાવે છે અને આપેલ સેગમેન્ટના પ્રકાર વિશેની સેવા માહિતી ધરાવે છે, આ ક્ષેત્રના અનુરૂપ બિટ્સને એક પર સેટ કરીને ઉલ્લેખિત છે:

    URG - તાત્કાલિક સંદેશ;

    ACK - પ્રાપ્ત સેગમેન્ટ માટે રસીદ;

    PSH - બફર ભરવાની રાહ જોયા વિના સંદેશ મોકલવાની વિનંતી;

    આરએસટી - કનેક્શન પુનઃસ્થાપિત કરવાની વિનંતી;

    SYN - કનેક્શન સ્થાપિત કરતી વખતે પ્રસારિત ડેટાના કાઉન્ટર્સને સિંક્રનાઇઝ કરવા માટે વપરાતો સંદેશ;

    FIN એ સંકેત છે કે ટ્રાન્સમિટિંગ સાઇડ ટ્રાન્સમિટેડ ડેટા સ્ટ્રીમમાં છેલ્લા બાઈટ પર પહોંચી ગઈ છે.

    વિન્ડો (WINDOW) 2 બાઇટ્સ ધરાવે છે, બાઇટ્સમાં વિન્ડો કદનું જાહેર કરેલ મૂલ્ય ધરાવે છે;

    ચેકસમ (CHECKSUM) 2 બાઇટ્સ લે છે અને સેગમેન્ટ દીઠ ગણતરી કરવામાં આવે છે;

    અર્જન્ટ પોઈન્ટર (અર્જન્ટ પોઈન્ટર) 2 બાઈટ્સ ધરાવે છે, તેનો ઉપયોગ URG કોડ બીટ સાથે થાય છે, તે ડેટાના અંતને સૂચવે છે જે બફર ઓવરફ્લો હોવા છતાં, તાત્કાલિક પ્રાપ્ત થવો જોઈએ;

    વિકલ્પો - આ ફીલ્ડમાં ચલ લંબાઈ છે અને તે એકસાથે ગેરહાજર હોઈ શકે છે, મહત્તમ ફીલ્ડનું કદ 3 બાઈટ્સ છે; સહાયક સમસ્યાઓ ઉકેલવા માટે વપરાય છે, ઉદાહરણ તરીકે, મહત્તમ સેગમેન્ટ કદ પસંદ કરતી વખતે;

    પેડિંગ, એક વેરિયેબલ-લેન્થ પેડિંગ, એક ડમી ફીલ્ડ છે જેનો ઉપયોગ હેડરના કદને 32-બીટ શબ્દોની પૂર્ણાંક સંખ્યા પર લાવવા માટે થાય છે.

TCP ની વિશ્વસનીયતા એ હકીકતમાં રહેલી છે કે ડેટા સ્ત્રોત તેને મોકલવાનું પુનરાવર્તન કરે છે સિવાય કે તે ચોક્કસ સમયગાળાની અંદર પ્રાપ્તકર્તા પાસેથી પુષ્ટિ મેળવે કે તે સફળતાપૂર્વક પ્રાપ્ત થયું હતું. આ મિકેનિઝમ કહેવામાં આવે છે રીટ્રાન્સમિશન (PAR) સાથે હકારાત્મક જાગૃતિ. જેમ આપણે અગાઉ વ્યાખ્યાયિત કર્યું છે તેમ, TCP શબ્દોમાં ટ્રાન્સમિશનના એકમ (ડેટા પેકેટ, સંદેશ, વગેરે) ને સેગમેન્ટ કહેવામાં આવે છે. TCP હેડરમાં ચેકસમ ફીલ્ડ છે. જો ટ્રાન્સમિશન દરમિયાન ડેટાને નુકસાન થાય છે, તો મોડ્યુલ જે TCP સેગમેન્ટ્સને IP પેકેટોથી અલગ કરે છે તે ચેકસમનો ઉપયોગ કરીને આને નિર્ધારિત કરી શકે છે. ક્ષતિગ્રસ્ત પેકેટ નાશ પામે છે અને સ્ત્રોત પર કંઈ મોકલવામાં આવતું નથી. જો ડેટા દૂષિત ન હતો, તો તે એપ્લિકેશન સંદેશ એસેમ્બલી દ્વારા પસાર થાય છે, અને સ્ત્રોતને એક સ્વીકૃતિ મોકલવામાં આવે છે.

કનેક્શન ઓરિએન્ટેશન એ હકીકત દ્વારા નક્કી કરવામાં આવે છે કે ડેટા સેગમેન્ટ મોકલતા પહેલા, સ્ત્રોત અને ગંતવ્ય TCP મોડ્યુલ્સ નિયંત્રણ માહિતીનું વિનિમય કરે છે. આ વિનિમય કહેવાય છે હેન્ડશેક(શાબ્દિક રીતે "હેન્ડશેક"). TCP ત્રણ તબક્કાના હેન્ડ-શેકનો ઉપયોગ કરે છે:

    સ્ત્રોત તેને સિંક્રોનાઇઝ સિક્વન્સ નંબર્સ (SYN) ફ્લેગ સાથેનું પેકેટ મોકલીને ગંતવ્ય સાથે જોડાણ સ્થાપિત કરે છે. અનુક્રમમાંનો નંબર એપ્લિકેશન સંદેશમાં પેકેટ નંબરને ઓળખે છે. તે 0 અથવા એક હોવું જરૂરી નથી. પરંતુ અન્ય તમામ સંખ્યાઓ તેનો આધાર તરીકે ઉપયોગ કરશે, જે પેકેટોને યોગ્ય ક્રમમાં એકત્રિત કરવાની મંજૂરી આપશે;

    પ્રાપ્તકર્તા SYN રસીદ સ્વીકૃતિ ફીલ્ડમાં એક નંબર સાથે જવાબ આપે છે જે સ્ત્રોત દ્વારા સેટ કરેલ નંબર સાથે મેળ ખાય છે. વધુમાં, “ક્રમમાં સંખ્યા” ફીલ્ડ એ નંબર પણ સૂચવી શકે છે જેની વિનંતી સ્ત્રોત દ્વારા કરવામાં આવી હતી;

    સ્ત્રોત પુષ્ટિ કરે છે કે તેણે ગંતવ્ય સેગમેન્ટ સ્વીકાર્યું છે અને ડેટાનો પ્રથમ ભાગ મોકલે છે.

ગ્રાફિકલી આ પ્રક્રિયા આકૃતિ 2.12 માં રજૂ કરવામાં આવી છે.

ચોખા. 2.12. TCP કનેક્શન સ્થાપિત કરી રહ્યા છીએ

કનેક્શન સ્થાપિત થયા પછી, સ્ત્રોત પ્રાપ્તકર્તાને ડેટા મોકલે છે અને તેની પાસેથી પુષ્ટિની રાહ જુએ છે કે તે પ્રાપ્ત થઈ ગયું છે, પછી સંદેશ સમાપ્ત થાય ત્યાં સુધી ફરીથી ડેટા વગેરે મોકલે છે. જ્યારે ફ્લેગ ફીલ્ડમાં FIN બીટ સેટ કરવામાં આવે ત્યારે સંદેશ સમાપ્ત થાય છે, જેનો અર્થ થાય છે "કોઈ વધુ ડેટા નથી".

પ્રોટોકોલની સ્ટ્રીમિંગ પ્રકૃતિ એ હકીકત દ્વારા નક્કી કરવામાં આવે છે કે SYN ટ્રાન્સમિટેડ બાઈટની ગણતરી માટે પ્રારંભિક સંખ્યા નક્કી કરે છે, પેકેટો નહીં. આનો અર્થ એ છે કે જો SYN ને 0 પર સેટ કરવામાં આવ્યું હતું અને 200 બાઇટ્સ ટ્રાન્સમિટ કરવામાં આવ્યા હતા, તો પછીના પેકેટમાં સેટ કરેલ નંબર 2 નહીં પણ 201 હશે.

તે સ્પષ્ટ છે કે પ્રોટોકોલની સ્ટ્રીમિંગ પ્રકૃતિ અને ડેટાની પ્રાપ્તિની પુષ્ટિ કરવાની જરૂરિયાત ડેટા ટ્રાન્સફર ઝડપની સમસ્યાને જન્મ આપે છે. આ સમસ્યાને ઉકેલવા માટે, "વિંડો" - એક ક્ષેત્ર - વિંડોનો ઉપયોગ કરો. વિંડોનો ઉપયોગ કરવાનો વિચાર એકદમ સરળ છે: તેની રસીદની પુષ્ટિની રાહ જોયા વિના ડેટા ટ્રાન્સમિટ કરો. આનો અર્થ એ છે કે સ્રોત તેની રસીદની પુષ્ટિની રાહ જોયા વિના વિન્ડોની સમાન ડેટાની ચોક્કસ માત્રાને પ્રસારિત કરે છે, અને તે પછી તે ટ્રાન્સમિશન બંધ કરે છે અને પુષ્ટિની રાહ જુએ છે. જો તે પ્રસારિત ડેટાના માત્ર એક ભાગ માટે પુષ્ટિ પ્રાપ્ત કરે છે, તો તે પુષ્ટિ થયેલ એક પછીના નંબરમાંથી એક નવો ભાગ ટ્રાન્સમિટ કરવાનું શરૂ કરશે. આ આકૃતિ 2.13 માં ગ્રાફિકલી બતાવવામાં આવ્યું છે.

ચોખા. 2.13. TCP ડેટા ટ્રાન્સમિશન મિકેનિઝમ

આ ઉદાહરણમાં, વિન્ડો 250 બાઇટ્સ પહોળી પર સેટ છે. આનો અર્થ એ છે કે વર્તમાન સેગમેન્ટ એ 250 બાઈટના SYN ઓફસેટ સાથેનો સેગમેન્ટ છે. જો કે, સમગ્ર વિન્ડોને ટ્રાન્સમિટ કર્યા પછી, સ્ત્રોત TCP મોડ્યુલને માત્ર પ્રથમ 100 બાઇટ્સ પ્રાપ્ત કરવા માટે સ્વીકૃતિ પ્રાપ્ત થઈ. તેથી, ટ્રાન્સફર 101 બાઇટ્સથી શરૂ થશે, અને 251 થી નહીં.

આમ, અમે TCP પ્રોટોકોલના તમામ મૂળભૂત ગુણધર્મોની તપાસ કરી છે. તે ફક્ત સૌથી પ્રખ્યાત એપ્લિકેશનોને નામ આપવાનું બાકી છે જે TCP ડેટા વિનિમય માટે વાપરે છે. આ મુખ્યત્વે TELNET અને FTP, તેમજ HTTP પ્રોટોકોલ છે, જે વર્લ્ડ વાઈડ વેબનું હૃદય છે.

ચાલો પ્રોટોકોલ વિશેની વાતચીતમાં થોડો વિક્ષેપ પાડીએ અને સમગ્ર TCP/IP સિસ્ટમના IP સરનામાઓ જેવા મહત્વપૂર્ણ ઘટક તરફ આપણું ધ્યાન કેન્દ્રિત કરીએ.

શુભ દિવસ, પ્રિય વાચકો.
લોકપ્રિય માંગ દ્વારા, આજે હું તમારા માટે એક લેખ પ્રકાશિત કરી રહ્યો છું જે તમને મૂળભૂત શરતોની મૂળભૂત બાબતોનો પરિચય કરાવશે કમ્પ્યુટર નેટવર્ક, એટલે કે:

  • નેટવર્ક પ્રોટોકોલ્સ - આ ડરામણા નામો શું છે અને તેનો ઉપયોગ શું છે?
  • UDP, TCP, ICMP - શું, શા માટે અને શું તફાવત છે
  • દરેક વ્યક્તિ પાસે IP સરનામું હોય છે, પરંતુ દરેકને ખબર નથી હોતી કે આ વસ્તુ શા માટે છે :-)
  • એડ્રેસ માસ્ક (સબનેટ)
  • ગેટવે
  • રૂટીંગ કોષ્ટકો વિશે થોડાક શબ્દો
  • બંદરો - તેઓ ખરેખર શું છે?
  • Mac સરનામું

તે જેવી.

મને લાગે છે કે, લેખ, યુવાન અને વૃદ્ધ દરેક માટે ઉપયોગી થશે, કારણ કે તેમાં વિચિત્ર, અગમ્ય ક્રિયાઓ અથવા શબ્દોનો સમૂહ નથી, પરંતુ સુલભ ભાષામાં પ્રસ્તુત માહિતીનો એક બ્લોક છે, જે ઓછામાં ઓછું આપશે. તમે સમજો છો કે તે બધું સામાન્ય રીતે કેવી રીતે કાર્ય કરે છે અને શા માટે તેની જરૂર છે. જાઓ.

નેટવર્ક પ્રોટોકોલ્સ TCP/IP, NWLink IPX/SPX, NetBEUI

ચાલો નેટવર્ક પ્રોટોકોલ શું છે અને તેનો ઉપયોગ શેના માટે થાય છે તેની સાથે શરૂ કરીએ.
નેટવર્ક પ્રોટોકોલકમ્પ્યુટર્સ વચ્ચેના સંચાર માટે અમલમાં મૂકાયેલ સોફ્ટવેર નિયમોનો સમૂહ છે. એક પ્રકારની ભાષા જેમાં કોમ્પ્યુટર એકબીજા સાથે વાત કરે છે અને માહિતી પ્રસારિત કરે છે. અગાઉ, કમ્પ્યુટર્સ હતા, તેથી વાત કરીએ તો, વિન્ડોઝના બહુભાષી અને જૂના સંસ્કરણો પ્રોટોકોલના સંપૂર્ણ સેટનો ઉપયોગ કરતા હતા - TCP/IP, NWLink IPX/SPX, NetBEUI. હવે અમે એક સામાન્ય કરાર પર આવ્યા છીએ, અને ધોરણ એ TCP/IP પ્રોટોકોલનો વિશેષ ઉપયોગ બની ગયો છે, અને તેથી તેની આગળ ચર્ચા કરવામાં આવશે.

જ્યારે તેઓ TCP/IP વિશે વાત કરે છે, ત્યારે તેઓ સામાન્ય રીતે આ નામનો અર્થ ઘણા જુદા જુદા... નિયમો અથવા, કહો, ધોરણો કે જે આ પ્રોટોકોલનો ઉપયોગ કરીને (અથવા ઉપયોગ કરવા માટે) સૂચવવામાં આવે છે. તેથી, ઉદાહરણ તરીકે, એવા નિયમો છે કે જેના દ્વારા મેઇલ સર્વર્સ વચ્ચે સંદેશાઓની આપ-લે થાય છે અને એવા નિયમો છે કે જેના દ્વારા અંતિમ વપરાશકર્તા તેના મેઇલબોક્સમાં પત્રો મેળવે છે. ઇન્ટરનેટ પર "ટેલિફોન" વાર્તાલાપ ગોઠવવા માટે વિડિયો કોન્ફરન્સ અને નિયમો છે. હકીકતમાં, આ ખરેખર નિયમો પણ નથી... વધુ એક પ્રકારનું વ્યાકરણ, અથવા કંઈક. સારું, તમે જાણો છો, અંગ્રેજીમાં સંવાદો રચવા માટે એક માળખું છે, ફ્રેન્ચમાં બીજું છે... તો TCP/IP માં કંઈક સમાન છે, એટલે કે. વિવિધ વ્યાકરણના નિયમોનો ચોક્કસ સમૂહ ચોક્કસપણે અભિન્ન TCP/IP પ્રોટોકોલ છે અથવા, વધુ સ્પષ્ટ રીતે, TCP/IP પ્રોટોકોલ સ્ટેક.

નેટવર્ક પ્રોટોકોલ્સ UDP, TCP, ICMP

TCP/IP પ્રોટોકોલની અંદર, ડેટા ટ્રાન્સમિશન માટે ઉપયોગમાં લેવાતા પ્રોટોકોલ TCP અને UDP છે. ઘણા લોકોએ કદાચ સાંભળ્યું હશે કે TCP અને UDP બંને પોર્ટ છે, પરંતુ દરેક જણ જાણે નથી કે તફાવત શું છે અને તે શું છે. તો..

TCP પ્રોટોકોલ (ટ્રાન્સમિશન કંટ્રોલ પ્રોટોકોલ) દ્વારા ડેટા ટ્રાન્સમિશન માટે માહિતીની પ્રાપ્તિની પુષ્ટિ જરૂરી છે. "સારું, તેઓ કહે છે, શું તમને તે મળ્યું? - સમજાયું!" જો ટ્રાન્સમિટ કરનાર પક્ષને સ્થાપિત સમયમર્યાદામાં જરૂરી પુષ્ટિ પ્રાપ્ત ન થાય, તો ડેટા ફરીથી ટ્રાન્સમિટ કરવામાં આવશે. તેથી, TCP ને કનેક્શન-આધારિત પ્રોટોકોલ ગણવામાં આવે છે, જ્યારે UDP (યુઝર ડેટાગ્રામ પ્રોટોકોલ) નથી. UDP નો ઉપયોગ એવા કિસ્સાઓમાં થાય છે જ્યાં રિસેપ્શન કન્ફર્મેશન જરૂરી નથી (ઉદાહરણ તરીકે, DNS વિનંતીઓ અથવા IP ટેલિફોની (જેમાંથી Skype એક અગ્રણી પ્રતિનિધિ છે)). એટલે કે, તફાવત સ્વાગતની પુષ્ટિની હાજરીમાં રહેલો છે. એવું લાગે છે કે "બધું જ છે!", પરંતુ વ્યવહારમાં તે મહત્વપૂર્ણ ભૂમિકા ભજવે છે.

ICMP પ્રોટોકોલ (ઇન્ટરનેટ કંટ્રોલ મેસેજ પ્રોટોકોલ) પણ છે, જેનો ઉપયોગ નેટવર્ક પેરામીટર્સ વિશે ડેટા ટ્રાન્સમિટ કરવા માટે થાય છે. તેમાં ઉપયોગિતા પેકેજ પ્રકારોનો સમાવેશ થાય છે જેમ કે પિંગ, અગમ્ય અંતર, TTLવગેરે

IP સરનામું શું છે

દરેક પાસે એક હોય છે, પરંતુ દરેકને ખ્યાલ હોતો નથી કે આ કેવા પ્રકારનું સરનામું છે અને તેના વિના જીવવું કેમ અશક્ય છે. હું તને કહી રહ્યો છું.

IP એડ્રેસ એ 32-બીટ નંબર છે જેનો ઉપયોગ નેટવર્ક પરના કમ્પ્યુટરને ઓળખવા માટે થાય છે. આ સંખ્યાના દરેક ઓક્ટેટના દશાંશ મૂલ્યોમાં સરનામું લખવાનો રિવાજ છે, પરિણામી મૂલ્યોને બિંદુઓથી અલગ કરીને. ઉદાહરણ તરીકે, 192.168.101.36

IP એડ્રેસ યુનિક છે, જેનો અર્થ છે કે દરેક કોમ્પ્યુટર પાસે સંખ્યાઓનું પોતાનું સંયોજન હોય છે, અને નેટવર્ક પર સમાન સરનામાંવાળા બે કમ્પ્યુટર હોઈ શકતા નથી. IP સરનામાઓ કેન્દ્રિય રીતે વિતરિત કરવામાં આવે છે, ઈન્ટરનેટ પ્રદાતાઓ તેમની જરૂરિયાતો અનુસાર રાષ્ટ્રીય કેન્દ્રો પર અરજી કરે છે. પ્રદાતાઓ દ્વારા પ્રાપ્ત સરનામાંની શ્રેણી ગ્રાહકો વચ્ચે વધુ વિતરિત કરવામાં આવે છે. ક્લાયન્ટ, બદલામાં, પોતાને પ્રદાતા તરીકે કાર્ય કરી શકે છે અને સબક્લાયન્ટ્સ વગેરે વચ્ચે પ્રાપ્ત IP સરનામાઓનું વિતરણ કરી શકે છે. IP સરનામાંઓનું વિતરણ કરવાની આ પદ્ધતિથી, કમ્પ્યુટર સિસ્ટમ વિશિષ્ટ IP સરનામું ધરાવતા કમ્પ્યુટરનું "સ્થાન" બરાબર જાણે છે; - તેણીને "માલિક" નેટવર્ક પર ડેટા મોકલવા માટે તે પૂરતું છે, અને પ્રદાતા, બદલામાં, ગંતવ્યનું વિશ્લેષણ કરશે અને, સરનામાંનો આ ભાગ કોને આપવામાં આવ્યો છે તે જાણીને, તેના આગલા માલિકને માહિતી મોકલશે. જ્યાં સુધી ડેટા ગંતવ્ય કમ્પ્યુટર પર ન આવે ત્યાં સુધી IP એડ્રેસ સબરેન્જ.

સ્થાનિક નેટવર્ક્સના નિર્માણ માટે, વિશિષ્ટ સરનામાં રેન્જ ફાળવવામાં આવે છે. આ સરનામાં છે 10.x.x.x, 192.168.x.x, 10.x.x.x, 172.16.x.x થી 172.31.x.x, 169.254.x.x, જ્યાં x નો અર્થ 0 થી 254 સુધીની કોઈપણ સંખ્યા છે. ઉલ્લેખિત સરનામાંઓથી પ્રસારિત થયેલા પેકેટો રૂટ કરવામાં આવતાં નથી, બીજા શબ્દોમાં કહીએ તો, તે ફક્ત ઇન્ટરનેટ પર મોકલવામાં આવતાં નથી, અને તેથી વિવિધ સ્થાનિક નેટવર્ક્સ પરના કમ્પ્યુટર્સમાં ઉલ્લેખિત રેન્જમાંથી મેળ ખાતા સરનામાં હોઈ શકે છે. એટલે કે, કંપની LLC "Horns and Hooves" અને LLC "Vasya and Company" પાસે 192.168.0.244 સરનામાંવાળા બે કોમ્પ્યુટર હોઈ શકે છે, પરંતુ ઈન્ટરનેટ પ્રદાતા પાસેથી મળેલા સરનામાં 85.144.213.122 સાથે કહી શકતી નથી, કારણ કે . ઈન્ટરનેટ પર બે સરખા IP એડ્રેસ હોઈ શકતા નથી. આવા કમ્પ્યુટર્સથી ઇન્ટરનેટ અને પાછળની માહિતી મોકલવા માટે, વિશિષ્ટ પ્રોગ્રામ્સ અને ઉપકરણોનો ઉપયોગ કરવામાં આવે છે જે ઇન્ટરનેટ સાથે કામ કરતી વખતે સ્થાનિક સરનામાંઓને વાસ્તવિક સાથે બદલે છે. બીજા શબ્દોમાં કહીએ તો, ડેટા વાસ્તવિક IP સરનામાથી નેટવર્કને મોકલવામાં આવે છે, અને સ્થાનિક એકથી નહીં. આ પ્રક્રિયા વપરાશકર્તા દ્વારા ધ્યાન આપવામાં ન આવે અને તેને સરનામાં અનુવાદ કહેવામાં આવે છે. હું એ પણ ઉલ્લેખ કરવા માંગુ છું કે એક જ નેટવર્કમાં, એક કંપની, હોર્ન્સ અને હૂવ્સ એલએલસીમાં, એક સ્થાનિક IP સરનામાંવાળા બે કમ્પ્યુટર હોઈ શકતા નથી, એટલે કે, ઉપરના ઉદાહરણમાં તેનો અર્થ એ હતો કે સરનામાં 192.168.0.244 સાથે એક કમ્પ્યુટર એક કંપનીમાં, બીજી કંપનીમાં સમાન સરનામા સાથે. તે જ કંપનીમાં, 192.168.0.244 સરનામાંવાળા બે કમ્પ્યુટર્સ સાથે મળી શકશે નહીં.

તમે કદાચ બાહ્ય IP અને આંતરિક IP, કાયમી (સ્થિર IP) અને ચલ (ડાયનેમિક) IP જેવા શબ્દો સાંભળ્યા હશે. તેમના વિશે ટૂંકમાં:

  • બાહ્ય IP બરાબર એ જ IP છે જે તમારા પ્રદાતા તમને આપે છે, એટલે કે. ઇન્ટરનેટ પર તમારું અનન્ય સરનામું, ઉદાહરણ તરીકે, 85.144.24.122 છે
  • આંતરિક IP સ્થાનિક IP છે, એટલે કે. સ્થાનિક નેટવર્ક પર તમારો IP, ઉદાહરણ તરીકે, 192.168.1.3 છે
  • સ્ટેટિક IP એ IP છે જે દરેક કનેક્શન સાથે બદલાતું નથી, એટલે કે. તમને નિશ્ચિતપણે અને કાયમ માટે સોંપેલ
  • ડાયનેમિક IP એ ફ્લોટિંગ IP સરનામું છે જે દરેક કનેક્શન સાથે બદલાય છે

તમારા IP નો પ્રકાર (સ્થિર અથવા ગતિશીલ) તમારા પ્રદાતાની સેટિંગ્સ પર આધારિત છે.

એડ્રેસ માસ્ક શું છે (સબનેટ)

સબનેટની વિભાવના રજૂ કરવામાં આવી હતી જેથી એક સંસ્થાના IP સરનામાઓનો ભાગ, બીજી સંસ્થાનો ભાગ વગેરે પસંદ કરવાનું શક્ય બને. સબનેટ એ IP એડ્રેસની શ્રેણી છે જે સમાન સ્થાનિક નેટવર્કથી સંબંધિત માનવામાં આવે છે. સ્થાનિક નેટવર્ક પર કામ કરતી વખતે, માહિતી સીધી પ્રાપ્તકર્તાને મોકલવામાં આવે છે. જો ડેટા એવા IP સરનામાંવાળા કમ્પ્યુટર્સ માટે બનાવાયેલ છે જે સ્થાનિક નેટવર્કથી સંબંધિત નથી, તો પછી એક નેટવર્કથી બીજા નેટવર્ક પર ફોરવર્ડ કરવા માટેના રૂટની ગણતરી કરવા માટે તેના પર વિશેષ નિયમો લાગુ કરવામાં આવે છે.

માસ્ક એ એક પરિમાણ છે જે કહે છે સોફ્ટવેરઆ જૂથ (સબનેટ) માં કેટલા કમ્પ્યુટર્સ એક થયા છે તે વિશે. સરનામાં માસ્કમાં IP સરનામાં જેવું જ માળખું છે: તે સંખ્યાઓના ચાર જૂથોનો સમૂહ છે, જેમાંથી દરેક 0 થી 255 ની રેન્જમાં હોઈ શકે છે. આ કિસ્સામાં, માસ્ક મૂલ્ય જેટલું ઓછું છે, વધુ કમ્પ્યુટર્સ આ સબનેટ સાથે જોડાયેલા છે. નાની કંપનીના નેટવર્ક માટે, માસ્ક સામાન્ય રીતે 255.255.255.x (ઉદાહરણ તરીકે, 255.255.255.224) હોય છે. નેટવર્ક માસ્ક કમ્પ્યુટરને IP સરનામા સાથે અસાઇન કરવામાં આવે છે. તેથી, ઉદાહરણ તરીકે, 255.255.255.0 ના માસ્ક સાથેનું નેટવર્ક 192.168.0.0 એ 192.168.0.1 થી 192.168.254 192.168.0.0 સુધીના સરનામાંઓ સાથે 255.2516.25121251251251251.258.2512.5.258. 92.1 68.0. 127. મને લાગે છે કે અર્થ સ્પષ્ટ છે. નિયમ પ્રમાણે, IP સરનામાંને સાચવવા માટે પ્રદાતાઓ દ્વારા ઓછી સંખ્યામાં કમ્પ્યુટર્સ ધરાવતા નેટવર્કનો ઉપયોગ કરવામાં આવે છે. ઉદાહરણ તરીકે, ક્લાયન્ટને 255.255.255.252 ના માસ્ક સાથેનું સરનામું સોંપવામાં આવી શકે છે. આ સબનેટમાં માત્ર બે કોમ્પ્યુટર છે.

કમ્પ્યુટરને IP સરનામું પ્રાપ્ત થયા પછી અને સબનેટ માસ્કનું મૂલ્ય જાણ્યા પછી, પ્રોગ્રામ આ સ્થાનિક સબનેટમાં કામ કરવાનું શરૂ કરી શકે છે. જો કે, વૈશ્વિક નેટવર્ક પર અન્ય કમ્પ્યુટર્સ સાથે માહિતીની આપ-લે કરવા માટે, તમારે બાહ્ય નેટવર્ક માટે માહિતી ક્યાં મોકલવી તેના નિયમો જાણવાની જરૂર છે. આ હેતુ માટે, ગેટવે સરનામાં જેવી લાક્ષણિકતાનો ઉપયોગ કરવામાં આવે છે.

ગેટવે શું છે?

ગેટવે એ એક ઉપકરણ (કમ્પ્યુટર અથવા રાઉટર) છે જે વિવિધ IP સબનેટ વચ્ચે માહિતી ફોરવર્ડ કરે છે. જો પ્રોગ્રામ નક્કી કરે છે (IP અને માસ્ક દ્વારા) કે ગંતવ્ય સરનામું સ્થાનિક સબનેટનો ભાગ નથી, તો તે આ ડેટાને ઉપકરણ પર મોકલે છે જે ગેટવે તરીકે કાર્ય કરે છે. પ્રોટોકોલ સેટિંગ્સમાં, આવા ઉપકરણનું IP સરનામું સ્પષ્ટ કરો.

ફક્ત સ્થાનિક નેટવર્કમાં કામ કરવા માટે, ગેટવેનો ઉલ્લેખ કરી શકાતો નથી.

ઈન્ટરનેટ સાથે કનેક્ટ થતા વ્યક્તિગત વપરાશકર્તાઓ માટે, અથવા સિંગલ કનેક્શન ચેનલ સાથેના નાના વ્યવસાયો માટે, સિસ્ટમ પાસે ફક્ત એક જ ગેટવે સરનામું હોવું જોઈએ - આ તે ઉપકરણનું સરનામું છે જેનું ઈન્ટરનેટ કનેક્શન છે. જો ત્યાં બહુવિધ માર્ગો છે, તો બહુવિધ ગેટવે હશે. આ કિસ્સામાં, ડેટા પાથ નક્કી કરવા માટે રૂટીંગ ટેબલનો ઉપયોગ થાય છે.

રૂટીંગ કોષ્ટકો શું છે

અને તેથી અમે સરળતાથી તેમના સુધી પહોંચી ગયા. અને તેથી.. આ કેવા પ્રકારના કોષ્ટકો છે?

કોઈ સંસ્થા અથવા વપરાશકર્તા પાસે ઈન્ટરનેટ સાથે કનેક્શનના ઘણા બિંદુઓ હોઈ શકે છે (ઉદાહરણ તરીકે, પ્રથમ પ્રદાતા સાથે કંઈક ખોટું થાય તો બેકઅપ ચેનલો, પરંતુ ઈન્ટરનેટ હજુ પણ ખૂબ જ જરૂરી છે) અથવા તેના બંધારણમાં ઘણા IP નેટવર્ક્સ ધરાવે છે. આ કિસ્સામાં, જેથી સિસ્ટમને ખબર પડે કે આ અથવા તે માહિતી મોકલવા માટે કઈ રીતે (કયા ગેટવે દ્વારા) રૂટીંગ કોષ્ટકોનો ઉપયોગ કરવામાં આવે છે. દરેક ગેટવે માટે રૂટીંગ કોષ્ટકો તે ઈન્ટરનેટ સબનેટ્સ સૂચવે છે કે જેના માટે માહિતી તેમના દ્વારા પ્રસારિત થવી જોઈએ. આ કિસ્સામાં, ઘણા ગેટવે માટે તમે સમાન શ્રેણીઓ સેટ કરી શકો છો, પરંતુ ડેટા ટ્રાન્સમિશન માટે વિવિધ ખર્ચ સાથે: ઉદાહરણ તરીકે, માહિતી ચેનલ પર મોકલવામાં આવશે જેની કિંમત સૌથી ઓછી છે, અને જો તે એક અથવા બીજા કારણોસર નિષ્ફળ જાય, તો પછી ઉપલબ્ધ મોટા ભાગના આપોઆપ સસ્તા કનેક્શનનો ઉપયોગ કરવામાં આવશે.

નેટવર્ક પોર્ટ્સ શું છે

ડેટા ટ્રાન્સમિટ કરતી વખતે, પ્રેષક અને પ્રાપ્તકર્તાના IP સરનામાઓ ઉપરાંત, માહિતી પેકેટમાં પોર્ટ નંબરો હોય છે. ઉદાહરણ: 192.168.1.1:80, - આ કિસ્સામાં 80 એ પોર્ટ નંબર છે. પોર્ટ એ એક નંબર છે જેનો ઉપયોગ ડેટા પ્રાપ્ત કરવા અને ટ્રાન્સમિટ કરતી વખતે કરવામાં આવે છે તે પ્રક્રિયા (પ્રોગ્રામ) ને ઓળખવા માટે જે ડેટા પર પ્રક્રિયા કરવી જોઈએ. તેથી, જો પેકેટ પોર્ટ 80 પર મોકલવામાં આવે છે, તો આ સૂચવે છે કે માહિતી HTTP સર્વર માટે બનાવાયેલ છે.

1 થી 1023 સુધીના પોર્ટ નંબરો ચોક્કસ પ્રોગ્રામ્સ (કહેવાતા જાણીતા બંદરો) ને સોંપવામાં આવે છે. 1024 -65 535 નંબરવાળા પોર્ટ્સનો ઉપયોગ માલિકીના કાર્યક્રમોમાં થઈ શકે છે. આ કિસ્સામાં, ફ્રી પોર્ટ પસંદ કરીને પ્રોગ્રામ્સ દ્વારા જ શક્ય તકરાર ઉકેલવી આવશ્યક છે. બીજા શબ્દોમાં કહીએ તો, બંદરો ગતિશીલ રીતે વિતરિત કરવામાં આવશે: શક્ય છે કે આગલી વખતે જ્યારે પ્રોગ્રામ શરૂ થાય, ત્યારે તે એક અલગ પોર્ટ મૂલ્ય પસંદ કરશે, સિવાય કે, અલબત્ત, તમે સેટિંગ્સ દ્વારા પોર્ટને મેન્યુઅલી સેટ કરો.

MAC સરનામું શું છે

હકીકત એ છે કે નેટવર્ક પર મોકલવામાં આવેલા પેકેટો કોમ્પ્યુટરને સંબોધવામાં આવે છે તેમના નામ અથવા IP સરનામાઓ દ્વારા નહીં. પેકેટ ચોક્કસ સરનામાંવાળા ઉપકરણ માટે બનાવાયેલ છે, જેને MAC સરનામું કહેવામાં આવે છે.

MAC સરનામું એ નેટવર્ક ઉપકરણનું અનન્ય સરનામું છે, જે તેને સાધન ઉત્પાદક દ્વારા સોંપવામાં આવે છે, એટલે કે. આ તમારા નેટવર્ક કાર્ડનો એક પ્રકારનો સ્ટેમ્પ નંબર છે. MAC સરનામાંનો પ્રથમ અર્ધ એ ઉત્પાદકનો ઓળખકર્તા છે, બીજો આ ઉપકરણનો અનન્ય નંબર છે.

નિયમ પ્રમાણે, પ્રદાતા સાથે (જો પ્રદાતા લોગિન-પાસવર્ડને બદલે MAC સરનામું બંધનકર્તા ઉપયોગ કરે છે) અથવા રાઉટર સેટ કરતી વખતે ઓળખ માટે MAC સરનામું જરૂરી છે.

જ્યાં તમામ નેટવર્ક સેટિંગ્સ જોવા માટે

તમે આ બધું ક્યાં જોઈ શકો છો અને બદલી શકો છો તે વિશે થોડાક શબ્દો કહેવાનું હું લગભગ ભૂલી ગયો છું.



શું તમને લેખ ગમ્યો? તમારા મિત્રો સાથે શેર કરો!