binary and decimal

IP დამისამართება, მისი გადაყვანა ორობითიდან ათობითში და პირიქით, შემდეგ ქვექსელების ანუ ე.წ. საბნეტის შექმნა საკმაოდ საინტერესო თემაა, თუმცა ქართულად ნორმალური მასალა პრაქტიკულად არ იშოვება, ვერც რუსულად ვნახე ვერაფერი ნორმალური, ვერც ინგლისურად, სანამ სისკოს წიგნი არ ჩამივარდა ხელში… ხოდა, გადავწყვიტე, ეს მასალა დამედო ბლოგზე, იქნებ ვინმეს დაეხმაროს ეს პოსტი Smile

რადგან აქამდე მოხვედით და ამ სტატიას კითხულობთ, თქვენთვის აღარ იქნება საჭირო, იმის განმარტება რა არის და რა ევალება IP მისამართს, რა განსხვავებაა შიდა და გარე IP-ს შორის და ა.შ. (თუ არადა, ვიკიპედიაზეც არის ამაზე მასალა და დროს არ დავკარგავ, თუმცა, ამ სტატიის წაკითხვამდე აუცილებლად გადახედეთ, თუ არ იცით).

დღეს ვისაუბროთ შიდა IP დამისამართებაზე. ქსელის ნიღბსა და ორობით სისტემაზე. არ მინდა ძალიან გავართულო სტატია, დღეს ავხსნი საწყისებს და თუ დაგაინტერესებთ, შემდეგ პოსტებში ჩავუღრმავდები ამ თემას. ახლა კი, მივხედოთ ელემენტარულ საკითხებს.

პირველ რიგში, რისგან შედგება IP მისამართი? მისი “შიგთავსი” ორობით რიცხვთა სისტემაა, ნოლების და ერთიანების კომბინაცია და მთლიანობაში არის 32 ბიტი. ასეთი სახით გამოსახული IP მისამართის წაკითხვა და დამახსოვრება, საკმაოდ რთულია და გასამარტივებლად, დაყოფილია ოთხ ნაწილად, ანუ 4 ბაიტად, თითოეული შეიცავს 8 ბიტს და ამიტომაც ეწოდებათ ოქტეტი (ბერძ. ოქტეტი – რვა). თუმცა, ვერც ოქტეტები ვერ გვიშველიდა, ორობითიდან ათობითში გადაყვანა რომ არ ხდებოდეს ამ მისამართების. მაგ: IP მისამართი 192.168.1.5 ორობითში ასე გამოიყურება – 11000000.10101000.00000001.00000101 აღსაქმელად რომელი უფრო ადვილია, თავად შეადარეთ Open-mouthed smile

ეს ნაწილი არაა რთული, წავიდეთ ცოტა წინ და ვნახოთ, როგორ უნდა გადავიყვანოთ ნებისმიერი IP მისამართი ორობით ფორმატში და პირიქით Smile

აქ ცოტაოდენი მათემატიკა დაგვჭირდება. ვინც მათემატიკასთან არ მეგობრობთ მაინცდამაინც, ნუ შეგეშინდებათ – ძალიან ცოტა გვჭირდება Open-mouthed smile მოკლედ, გავერკვეთ ორობით რიცხვთა სისტემაში.

ცხრილი #1

ორობით რიცხვთა სისტემაორობით რიცხვთა სისტემა საკმაოდ მნიშვნელოვანია IP დამისამართებაში. დაიმახსოვრეთ, როდესაც ხედავთ რიცხვს, მარჯვენა მხარეს სხვა, უფრო აღმატებული რიცხვით, ეს ნიშნავს, რომ ეს რიცხვი იმდენჯერ უნდა გაამრავლოთ საკუთარ თავზე, რამდენსაც მარჯვენა რიცხვი გიჩვენებთ. მაგ: 23 იქნება: 2*2*2  რომლის შედეგიც არის 8 . ქვემოთ არის ორობითი რიცხვების სია, თავისი ხარისხებით
20 = 121 = 222 = 4

23 = 8

24 = 16

25 = 32

26 = 64

27 = 128

28 = 256

29 = 512

210 = 1,024

211 = 2,048

212 = 4,096

213 = 8,192

214 = 16,384

სანამ სტრესს მიიღებდეთ ბოლო რიცხვების გადამკიდე, განვიხილოთ მარტივი ტრიუკები მათ გამოსათვლელად: მაგ: 29 -ის მნიშვნელობა გვაქვს 512. თუკი ამხელა გამოთვლების დრო არ გაქვთ, უცებ მიუმატეთ ერთმანეთს წინა მნიშვნელობა, ანუ 28 ის მნიშვნელობა არის 256. 256+256=512 210 = 1,024 კი არის 2*512 ან 512+512, ჯამში, ყველასათვის ცნობილი 1,024 და ა.შ.  და კიდევ 20 = 1 ეს არ მოგეჩვენებათ ლოგიკურ შედეგად და არც არის, უბრალოდ შეთანხმებაა, რომ 2 ხარისხად 0 –ს ჰქონდეს მნიშვნელობა 1.

მე დაბეჯითებით გირჩევთ, დაიმახსოვროთ ეს ცხრილი, გამუქებული ნაწილი მაინც. უფრო სწორად, უნდა დაიმახსოვროთ რიცხვები: 1, 2, 4, 8, 16, 32, 64,128 და მათი ლოგიკური მნიშვნელობის  ცოდნისათვის დაიმახსოვრეთ ეს ცხრილი. ყურადღება: ბევრი დამწყები უშვებს შეცდომას და როცა ამრავლებს მაგ: 2*2*2 კალკულატორით, პირდაპირ 3*2-ს ამრავლებს და იღებს რა თქმა უნდა 6-ს, თუკი სათითაოდ აკრეფთ 2*2*2 და დააჭერთ დადასტურებას მიიღებთ 8-ს და ეს იქნება ხარისხი. არავითარი დამატებით ოპერაცია აღარაა საჭირო.

ერთი სიტყვით, ჩვენ გვაქვს უკვე რიცხვები 1, 2, 4, 8, 16, 32, 64,128 და ეს რიცხვები შეესაბამება ოქტეტების ორობით მნიშვნელობას, ოღონდ მარჯვნიდან მარცხნივ. მოდი გამოვსახოთ ეს, ისევ იმავე IP მისამართისათვის: 192.168.1.5

როგორც ვთქვით, ამ IP მისამართს ორობითში აქვს ასეთი სახე:

11000000.10101000.00000001.00000101 შევუსაბამოთ მათ ზემოთ მოყვანილი ორის ახარისხებით მიღებული რიცხვები:

ცხრილი #2

192

1 1 0 0 0 0 0 0
128 64 32 16 8 4 2 1

168

1 0 1 0 1 0 0 0
128 64 32 16 8 4 2 1

1

0 0 0 0 0 0 0 1
128 64 32 16 8 4 2 1

5

0 0 0 0 0 1 0 1
128 64 32 16 8 4 2 1

ახლა ვნახოთ, რა პრინციპით უნდა ვიმოქმედოთ. ჩვენ უნდა შევკრიბოთ ეს რიცხვები, ოღონდ, მხოლოდ ისინი, რომლებიც ხვდებიან რიცხვი 1-ის გასწვრივ. 192 ის ორობით მნიშვნელობაში, როგორც ხედავთ ბოლოში გვაქვს ორი ერთიანი, ამიტომ ვკრებთ მის შესაბამის 64 და 128-ს. 64+128=192

168-ის ორობით მნიშვნელობაში არის სამი ერთიანი, მათ გასწვრივ კი რიცხვები არის 8, 32, 128. შევკრიბოთ 8+32+128=168

1 –ის ორობითში კი გვაქვს ბოლოში ერთი ცალი 1-იანი და ყველაფერი ცხადია ისედაც Smile რაც შეეხება 5-ს, აქ ალბათ უკვე მიხვდით, რომ ვკრებთ 1-ს და 4-ს 1+4=5.

ესეც ჩვენი 192.168.1.5

ეს ნაწილი იმედია, გასაგებია, ახლა განვიხილოთ, თუ როგორ უნდა გადავიყვანოთ ათობითიდან ორობითში. ამისი ბევრი მეთოდი არსებობს, მაგრამ მე რომელიც უფრო მეტად პრაქტიკულად მეჩვენება, იმას გავარჩევ, ყველას ახსნის თავი ნამდვილად არ მაქვს… Smile

მაგალითისათვის,  ათობითიდან ორობითში “ჩამოვახარისხოთ” IP მისამართი 192.168.1.109 მოდი დავიწყოთ ისევ 192-დან და გავიხსენოთ ჩვენი ხარისხები 2-ის, 128, 64, 32, 16, 8, 4, 2, 1. (ცხრილი #1)

წეღან თუ მარჯვნიდან მარცხნივ ვწერდით, ახლა მოქმედებას ყოველთვის ვიწყებთ მარცხენა პირველი რიცხვიდან ანუ 128-დან და ვუყურებთ რიცხვების თავსებადობას. 192-ში 128 თავსდება და შესაბამისად  უნდა დავწეროთ 1 (ანუ 1 არის დადასტურება, კი, თავსდება, 0 უარყოფა – არა, არ თავსდება). რადგან თავსებადობა ვნახეთ, ახლა 192-ს უნდა გამოვაკლოთ 128 192-128=64 და ამის შემდეგ 64-ში ვაგრძელებთ თავსებადობის ძებნას. 64-ში 64 თავსდება და ვწერთ მეორე 1-იანს. ახლა 64-64=0 0-ში 32 არ თავსდება და ვწერთ ნოლს. აქ ბევრი მკითხაობაც აღარ უნდა იმას, რომ მომდევნო რიცხვები  16, 8, 4, 2, 1 არც ერთი არ თავსდება 0-ში და შესაბამისად სულ ვწერთ ნოლებს. ამიტომაც გამოიყურება 192 ორობითში 11000000 – სახით.

168 დავშალოთ ახლა. 168-ში 128 თავსდება და ვწერთ 1-ს, როგორც შევთანხმდით. შემდეგ: 168-128=40 40-ში 64 არ თავსდება და ვწერთ 0-ს. რადგან თავსებადობა ვერ ვიპოვეთ, არ ვაკლებთ ჯერ არაფერს და ისევ რაც გვაქვს, იქ ვეძებთ მომდევნო რიცხვის თავსებადობას, ანუ აქ ისევ 40-ში ვეძებთ, თუ მოთავსდება 32. რა თქმა უნდა, მოთავსდება და ვწერთ 1-ს. რადგან ვიპოვეთ თავსებადობა, ახლა 40-32=8 8-ში 16 არ მოთავსდება და ვწერთ ისევ 0-ს, სამაგიეროდ მომდევნო რიცხვი 8 თავსდება 8-ში და ვწერთ 8-ს. ახლა უკვე 8-8=0 შესაბამისად, 0-ში რადგან არ თავსდება არც 4, არც 2 და არც 1 ბოლოში ვწერთ სულ 0-ებს. ესეც ჩვენი 168 – 10101000

1-იანის ორობითში გამოსახვა კი თვადაც ხვდებით ალბათ უკვე, რომ ძალიან მარტივია, მაგრამ თუ ახსნაა, ახსნა იყოს Open-mouthed smile მოკლედ, 128, 64, 32, 16, 8, 4, 2, 1-დან მხოლოდ 1 თავსდება 1-ში და რა თქმა უნდა, წინ 0-ები გვაქვს ჩასაწერი. ანუ, რადგან 128 არ თავსდება 1-ში, არც 64 და ა.შ. 00000001 ეს არის 1-ის ორობითი ჩანაწერი.

ახლა 109. 109-ში 128 არ მოთავსდება, ამიტომ 0 გვაქვს პირველი და ვაგრძელებთ ძებნას. 109-ში 64 თავსდება, ანუ გვაქვს უკვე 1 და ახლა გამოვაკლოთ: 109-64=45 ახლა გვაქვს 45-ში მოსაძებნი შემდეგი რიცხვი, 32 და ის რა თქმა უნდა თავსდება 45-ში. ამიტომაც ვწერთ კიდევ 1-ს და ვაგრძელებთ გამოანგარიშებას:   45-32=13 აი, 13-ში 16 არ თავსდება, ამიტომაც ვწერთ 0-ს. სამაგიეროდ, 13-ში 8 თავსდება და ვწერთ 1-ს. შემდეგ კი 13-8=5. 5-ში 4 მოთავსდება და ვწერთ 1-ს და ვაკლებთ 5-4=1. 1-ში 2 არ თავსდება და ვწერთ 0-ს, სამაგიეროდ, 1-ში 1 თავსდება და ბოლოში ვწერთ 1-ს. ესეც ჩვენი 109-ის ორობითი ჩანაწერი – 01101101 გადავამოწმოთ? შევკრიბოთ ამ ორობითს შესაბამისი რიცხვები (ცხრ. #2) 1+4+8+32+64=109

სავარჯიშო: 1) გადაიყვანეთ ორობითში შემდეგი IP 192.168.1.67

2) გადაიყვანეთ ათობითში შემდეგი IP 11000000.10101000.00000001.01110101 (აქ პირველი სამი ოქტეტი მარტივია, დავღეჭეთ უკვე ზევით, ძირითადი სამუშაო გაქვთ ბოლო ოქტეტზე 01110101).

ქსელის ნიღაბი – Subnet Mask

ჩვენი ღრმად პატივცემული IP მისამართი შედგება ორი ნაწილისაგან, ეს არის ქსელური ნაწილი და ნაწილი ჰოსტებისათვის (ჰოსტი, ეს არის ქსელში ჩართული ნებისმიერი მოწყობილობა: კომპიუტერი, პრინტერი და ა.შ.) იმისათვის, რომ გავარჩიოთ, რა ნაწილია ქსელური და რა ჰოსტების, არსებობს ქსელის ნიღაბი, ანუ ე.წ. საბნეტ მასკა. ქსელის ნიღაბიც ასევე 32 ბიტიანია და დაყოფილია 4 ოქტეტად. იმისდა მიხედვით, ოქტეტების რა რაოდენობაა გამოყოფილი ქსელისათვის, ქსელი იყოფა კლასებად. ერთიანები ქსელის ნიღაბში განსაზღვრავენ ქსელის ნაწილს, 0-ები კი ჰოსტის ნაწილს.  IP მისამართის და ქსელის ნიღბის შედარება ხდება მარცხნიდან მარჯვნივ, თითოეული ბიტის მიხედვით.  ქსელის ნაწილი ითვლება ოქტეტებში შემავალი ერთიანებით, მაგ: 11111111.11111111.11111111.00000000 აქ 1-იანების შესაბამისი რიცხვებს (2-ის ხარისხები, ცხრ.#1) ვკრებთ, მარჯვნიდან მარცხნივ: 1++2+4+8+16+32+64+128=255

ჰოსტების რაოდენობა კი ითვლება შემდეგნაირად, ჰოსტების რაოდენობის შესაბამისი რიცხვი უნდა ავიყვანოთ 2-ის ხარისხში, ანუ 28 და გავიხესნოთ, რომ 28=256. შემდეგ, მიღებულ 256-ს ვაკლებთ 2-ს, რადგანაც პირველ და ბოლო მისამართს ვერ მივანიჭებთ ჰოსტს, ერთი არის ქსელის მისამართი, მეორე კი ბროუდქასთ მისამართი (ამაზე მოგვიანებით ვისაუბრებ დაწვრილებით, მომდევნო პოსტში). ჰოსტების რაოდენობის დათვლა ქსელის ნაწილის დათვლის მსგავსადაც შეიძლება ანუ შევკრიბოთ 1+4+8+16+32+64+128=255 და მიღებულ შედეგს 255 გამოვაკლოთ უკვე 1 და არა 2, რადგან ჰოსტის ბიტებიდან ყველა არაა 1-ის ტოლი, ერთ-ერთი აუცილებლად არის 0 და რადგან 0-ის მნიშვნელობა არის 0, ის თავისთავად, აღარც ემატება.

ერთი სიტყვით, ამ ნიღაბში ჰოსტების რაოდენობა გვაქვს 254 და თავად ნიღაბი კი ასე ჩაიწერება: 255.255.255.0

როგორც ზემოთ ვთქვით, ქსელის ნიღბით შეგვიძლია გავიგოთ რა კლასის ქსელთან გვაქვს საქმე:

A კლასის ქსელისათვის ქსელის დასანომრად იყენებენ პირველ ოქტეტს, ანუ 8 ბიტს და შესაბამისად, მისი ნიღაბია 255.0.0.0 ორობითში კი ასეთი სახე აქვს: 11111111.00000000.00000000.00000000

B კლასის ქსელში იყენებენ პირველ ორ ოქტეტს, 16 ბიტს და ნიღაბი იქნება: 255.255.0.0 ორობითში: 11111111.11111111.00000000.00000000

C კლასის ქსელში კი პირველ სამ ოქტეტს იყენებენ ქსელისათვის და ამიტმაც ნიღაბი გვაქვს 255.255.255.0 და ორობითში 11111111.11111111.11111111.00000000

არსებობს D და E კლასებიც, მაგრამ ამჟამად ის ჩვენი ინტერესის საგანს არ წარმოადგენს.

ზემოთ მოცემული დაყოფიდან ჩანს, რომ ყველაზე მეტი ჰოსტი შეიძლება ჩავრთოთ A კლასის ქსელში (126 ქსელი და16,777,214 ჰოსტი თითო ქსელში), შემდეგია B კლასის ქსელი (16,382 ქსელი და 65,534 ჰოსტი თითო ქსელში) და ბოლოს C კლასი (2,097,150 ქსელი 254 ჰოსტი თითო ქსელში).

A კლასის ქსელში IP მისამართები იწყება და მთავრდება 0-127 დიაპაზონით;

B კლასის ქსელში IP მისამართები იწყება და მთავრდება128-191 დიაპაზონით;

C კლასის ქსელში IP მისამართები იწყება და მთავრდება192-223 დიაპაზონით.

მაგ: 192.15.20.88 C კლასის ქსელის მისამართია. დღეს ყველაზე მეტად გამოიყენება C კლასის ქსელი და მომდევნო პოსტიც ამ კლასზე იქნება. კერძოდ, ქვესელების შექმნაზე, ანუ, როგორც ამბობენ, საბნეტის გაკეთებაზე.

დღეისათვის ამით მოვრჩები, თუ რაიმე კითხვა დაგებადათ, დატოვეთ კომენტარის სახით, შევეცდები, ვუპასუხო.

ყურადღება: პოსტზე ყველა საავტორო უფლება დაცულია, მისი რაიმენაირი ფორმით გამოყენება, ჩემთან შეთანხმების გარეშე, ისჯება საქართველოში მოქმედი კანონმდებლობით, საავტორო უფლებები შესახებ. მოკლედ, არავითარი გადაკოპირება, შეთანხმების გარეშე!!!

Advertisements