أنظمة العد ليست موضوعًا رياضيًا منفصلًا عن الشبكات. عندما ترى عنوان IPv4 مثل 192.168.1.10 فأنت تقرأ تمثيلًا عشريًا لقيم مخزنة فعليًا على شكل Bits، وعندما تحسب Subnet Mask تحتاج إلى فهم Binary، بينما يظهر Hexadecimal مباشرة في IPv6 وعناوين MAC وقيم مثل EtherType.
لذلك لا تحتاج إلى حفظ تحويلات كثيرة بقدر ما تحتاج إلى فهم العلاقة بين ثلاثة أنظمة أساسية: Decimal (Base 10) الذي نستخدمه يوميًا، وBinary (Base 2) الذي تتعامل به الأنظمة الرقمية، وHexadecimal (Base 16) الذي يمنح البشر طريقة أقصر لقراءة مجموعات طويلة من البتات.
إذا كنت ما تزال في بداية دراسة Networking، فمن المفيد وضع هذا الموضوع ضمن الصورة الأكبر في دليل أساسيات الشبكات من الصفر، ثم العودة إلى الحسابات هنا.
ما معنى Base في أنظمة العد؟
الـBase أو الأساس يحدد عدد الرموز التي يستخدمها نظام العد، كما يحدد قيمة كل خانة حسب موضعها.
| النظام | الأساس | الرموز | أين يظهر في الشبكات؟ |
|---|---|---|---|
| Decimal | 10 | 0 إلى 9 | التمثيل المعتاد لعناوين IPv4 وأرقام كثيرة يقرأها المستخدم |
| Binary | 2 | 0 و1 | Bits، IPv4، Subnet Masks، Prefixes والعمليات المنطقية |
| Hexadecimal | 16 | 0 إلى 9 وA إلى F | IPv6، MAC Address، EtherType وتمثيل البيانات الثنائية بصورة مختصرة |
في النظام العشري مثلًا:
257
= 2 × 10² + 5 × 10¹ + 7 × 10⁰
= 200 + 50 + 7
الفكرة نفسها تعمل في Binary وHexadecimal؛ الذي يتغير هو الأساس وقيمة كل خانة.
النظام العشري Decimal في الشبكات
Decimal هو Base 10، أي يستخدم الأرقام من 0 إلى 9. لا توجد صعوبة خاصة فيه للمبتدئ، لكن المهم هو إدراك أن الرقم العشري الذي تراه غالبًا ليس الشكل الذي تُعالج به القيمة داخليًا.
عنوان IPv4 مثل:
192.168.1.10
مقسّم إلى أربعة أجزاء تسمى عادة Octets. عنوان IPv4 نفسه بطول 32 بت، كما تحدد مواصفة IPv4 الأصلية في RFC 791. وبما أن:
32 bits ÷ 4 = 8 bits
فإن كل Octet يحتوي على 8 Bits.
هذا هو السبب في أن كل جزء في التمثيل العشري المعتاد لـIPv4 يستطيع تمثيل قيمة من 0 إلى 255.
Binary: النظام الذي تحتاجه فعلًا لفهم IPv4 وSubnetting
Binary هو Base 2 ويستخدم رمزين فقط:
0
1
كل خانة تمثل قوة من قوى الرقم 2. وعندما نتعامل مع Octet واحد من 8 Bits، تكون قيم الخانات:
128 64 32 16 8 4 2 1
أو رياضيًا:
2⁷ 2⁶ 2⁵ 2⁴ 2³ 2² 2¹ 2⁰
إذا كانت الخانة تساوي 1 نضيف قيمتها، وإذا كانت 0 نتجاهلها.
تحويل Binary إلى Decimal
خذ القيمة:
11000000
نضعها مقابل قيم الخانات:
Binary: 1 1 0 0 0 0 0 0
Value: 128 64 32 16 8 4 2 1
الخانات التي تحتوي على 1 هي 128 و64، لذلك:
128 + 64 = 192
إذن:
11000000₂ = 192₁₀
لماذا أكبر قيمة في Octet هي 255؟
إذا كانت جميع البتات الثمانية تساوي 1:
11111111
نحصل على:
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 255
هناك في الحقيقة 256 احتمالًا مختلفًا في 8 Bits، لأن:
2⁸ = 256
لكن العد يبدأ من الصفر، ولذلك يكون النطاق:
0 إلى 255
الخلط بين «256 قيمة ممكنة» و«أكبر قيمة هي 256» من الأخطاء الشائعة. أكبر قيمة هي 255، بينما عدد القيم الممكنة هو 256.
كيفية تحويل Decimal إلى Binary بسرعة
في مسائل الشبكات، أسرع طريقة غالبًا ليست القسمة المتكررة على 2، بل استخدام جدول القوى:
128 64 32 16 8 4 2 1
لنحوّل 172.
نبدأ بأكبر قيمة لا تتجاوز 172:
172 - 128 = 44
44 - 32 = 12
12 - 8 = 4
4 - 4 = 0
إذن استخدمنا:
128 + 32 + 8 + 4 = 172
فنضع 1 في تلك الخانات و0 في البقية:
128 64 32 16 8 4 2 1
1 0 1 0 1 1 0 0
10101100
إذن:
172₁₀ = 10101100₂
مثال كامل: تحويل عنوان IPv4 إلى Binary
لنفترض أن لدينا:
172.16.5.10
نحوّل كل Octet بصورة مستقلة:
172 = 10101100
16 = 00010000
5 = 00000101
10 = 00001010
فيصبح العنوان:
10101100.00010000.00000101.00001010
هذه النقطة مهمة: النقاط التي تراها في IPv4 تساعد البشر على تقسيم العنوان إلى أربعة Octets، لكنها لا تعني أن كل جزء كيان مستقل عن بقية الـ32 Bit.
Binary وعلاقته بـSubnet Mask وCIDR
هنا تظهر القيمة العملية الحقيقية لتعلم Binary.
خذ Subnet Mask التالية:
255.255.255.192
بالثنائي:
255 = 11111111
255 = 11111111
255 = 11111111
192 = 11000000
إذن:
11111111.11111111.11111111.11000000
إذا عددنا البتات التي تساوي 1 نجد:
8 + 8 + 8 + 2 = 26
ولهذا يمكن كتابة القناع نفسه بصيغة CIDR:
/26
بمجرد أن ترى Subnet Mask على أنها سلسلة من Bits بدل أربعة أرقام عشرية منفصلة، يصبح فهم Prefix Length وحجم الشبكة أكثر منطقية. أما حساب Network Address وBroadcast Address وVLSM بالتفصيل فله دور مختلف، لذلك ستجده في شرح Subnetting وSubnet Mask وCIDR.
ما هو Hexadecimal؟
Hexadecimal أو Hex هو Base 16. ولأننا نحتاج إلى 16 رمزًا بينما لدينا عشرة أرقام فقط، تُستخدم الأحرف من A إلى F للقيم من 10 إلى 15:
| Hex | Decimal | Binary |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
أهم علاقة يجب تذكرها هي:
1 Hex digit = 4 Bits
وهذه ليست مصادفة. أربعة Bits توفر:
2⁴ = 16
احتمالًا، وهو العدد نفسه الذي يستطيع رقم Hex واحد تمثيله.
تحويل Binary إلى Hex بدون حسابات طويلة
قسّم الرقم الثنائي إلى مجموعات من أربعة Bits، ثم حوّل كل مجموعة مباشرة إلى Hex.
مثلًا:
Binary:
1101 0110
1101 = D
0110 = 6
Hex = D6
والعكس بسيط أيضًا:
Hex: 3A
3 = 0011
A = 1010
3A = 00111010
لهذا يستخدم Hex كثيرًا عندما يحتاج الإنسان إلى قراءة بيانات ثنائية طويلة؛ فهو أقصر بكثير من كتابة عشرات الأصفار والآحاد، مع إمكانية العودة إلى Binary بسهولة.
لماذا يتكون زوج Hex من 8 Bits؟
بما أن كل Hex Digit يمثل 4 Bits:
2 Hex digits = 8 Bits = 1 Octet
مثل:
FF
F = 1111
F = 1111
FF = 11111111
وبالعشري:
FF₁₆ = 255₁₀
لهذا ستلاحظ أن القيمة FF تتكرر كثيرًا عند التعامل مع الشبكات والبيانات منخفضة المستوى.
Hexadecimal في عناوين MAC
من أشهر الأماكن التي سترى فيها Hex عنوان MAC، مثل:
3C:52:82:1A:7F:B0
لدينا ست مجموعات، وكل مجموعة تحتوي على رقمين Hex. كل زوج يمثل 8 Bits:
3C = 8 bits
52 = 8 bits
82 = 8 bits
1A = 8 bits
7F = 8 bits
B0 = 8 bits
المجموع:
6 × 8 = 48 bits
توضح IEEE Registration Authority أن EUI-48 هو معرّف بطول 48 بت ويستخدم على نطاق واسع في عناوين MAC ضمن تقنيات IEEE 802.
ولا ينبغي فهم ذلك على أن كل MAC تراه «عنوان ثابت محفور في الجهاز ولا يمكن تغييره». توجد أيضًا عناوين Locally Administered وتقنيات تستخدم MAC Randomization. ما يهمنا هنا هو أن التمثيل السداسي العشري يجعل قراءة 48 Bit أكثر سهولة.
إذا أردت فهم الدور الشبكي للعنوان نفسه بدل طريقة كتابته فقط، يشرح مقال كيف يعمل MAC مع IP أثناء انتقال البيانات.
Hexadecimal في IPv6
IPv6 هو المثال الأوضح على فائدة Hex. عنوان IPv6 بطول 128 بت، وفق معمارية IPv6 المحددة في RFC 4291.
كتابة 128 Bit بالثنائي ستكون مرهقة جدًا:
00100000000000010000110110111000...
لذلك تكتب عناوين IPv6 باستخدام مجموعات Hexadecimal، مثل:
2001:db8:abcd:12:0:0:0:1
يمكن أن يحتوي الشكل الكامل على ثماني مجموعات، وكل مجموعة تمثل 16 Bit لأن:
4 Hex digits × 4 Bits = 16 Bits
وبالتالي:
8 groups × 16 Bits = 128 Bits
يمكن اختصار سلاسل الأصفار وفق قواعد IPv6، فيصبح المثال السابق:
2001:db8:abcd:12::1
وتحدد RFC 5952 توصيات التمثيل النصي القياسي لعناوين IPv6، ومنها حذف الأصفار الموجودة في بداية الحقول واستخدام :: لضغط أطول سلسلة مناسبة من الحقول الصفرية.
لا تحتاج في هذه المرحلة إلى تحويل عنوان IPv6 كامل إلى Binary يدويًا. الأهم هو إدراك أن كل Hex Digit يقابل بالضبط أربعة Bits، وبالتالي يمكنك تحليل أي جزء صغير من العنوان عند الحاجة.
Hex يظهر أيضًا داخل Ethernet Frames
Hex لا يقتصر على العناوين. عند تحليل حركة الشبكة باستخدام أدوات مثل Wireshark ستجد قيمًا مثل:
0x0800
0x0806
0x86DD
هذه أمثلة على EtherType. وتُظهر سجلات IANA لأرقام IEEE 802 أن:
0x0800يشير إلى IPv4.0x0806يشير إلى ARP.0x86DDيشير إلى IPv6.
هنا يظهر سبب آخر لاستخدام Hex: القيمة الثنائية لحقل بطول 16 Bit يمكن تمثيلها بأربعة أرقام Hex فقط.
إذا أردت معرفة مكان EtherType داخل الإطار وما علاقة ذلك بعناوين MAC وباقي الحقول، راجع شرح بنية الـFrame في الشبكات.
هل يجب تعلم Octal أيضًا للشبكات؟
ليس بنفس أهمية Binary وDecimal وHex في أساسيات Networking. النظام الثماني Octal مهم في مجالات أخرى مثل بعض تمثيلات صلاحيات Unix/Linux، لكنك تستطيع دراسة IPv4 وSubnetting وMAC وIPv6 دون جعله أولوية في البداية.
إذا كان هدفك الشبكات، ركز أولًا على:
- قوى 2 حتى 128.
- التحويل بين Decimal وBinary داخل 8 Bits.
- فهم أن كل Hex Digit يساوي 4 Bits.
- التحويل بين Binary وHex بمجموعات من أربعة Bits.
- ربط هذه المعرفة بـIPv4 وSubnet Masks وIPv6 وMAC.
اختبار سريع للفهم
حاول حل هذه القيم ذهنيًا قبل قراءة الإجابات:
1) 192 Decimal → Binary
2) 11111100 Binary → Decimal
3) 1010 Binary → Hex
4) F Hex → Binary
5) FF Hex → Decimal
الحلول:
1) 192 = 11000000
2) 11111100 = 252
3) 1010 = A
4) F = 1111
5) FF = 255
إذا أصبحت هذه التحويلات سريعة بالنسبة لك، فقد امتلكت تقريبًا كل ما تحتاجه من أنظمة العد للانتقال إلى حسابات IPv4 وSubnetting الأساسية.
أخطاء شائعة عند تعلم أنظمة العد في الشبكات
- حفظ جدول Subnetting دون فهم Binary: قد يساعد مؤقتًا، لكنه يجعل المسائل الجديدة أصعب.
- الاعتقاد أن 8 Bits تعني أن أكبر رقم هو 256: هناك 256 قيمة ممكنة، لكن النطاق يبدأ من 0 وينتهي عند 255.
- محاولة تحويل IPv6 كامل إلى Decimal: لا توجد حاجة عملية لذلك في معظم مهام الشبكات اليومية.
- نسيان الأصفار على اليسار عند تمثيل Octet: القيمة
5داخل Octet تكتب00000101عند الحاجة إلى تمثيل البتات الثمانية كاملة. - التعامل مع Hex كنظام منفصل تمامًا عن Binary: قوته الأساسية تأتي من أن كل رقم Hex يمثل أربعة Bits بالضبط.
الخلاصة
Decimal وBinary وHexadecimal ليست ثلاث طرق متنافسة لتخزين البيانات؛ إنها طرق مختلفة لتمثيل القيمة نفسها.
في الشبكات، يستخدم Decimal لأنه سهل للبشر في عناوين مثل IPv4، ويكشف Binary البنية الحقيقية للـBits التي تحتاجها لفهم Prefixes وSubnet Masks، بينما يختصر Hexadecimal مجموعات البتات الطويلة ويجعل قراءة IPv6 وعناوين MAC والحقول البروتوكولية أكثر عملية.
احفظ العلاقة الأساسية التالية، ثم تدرب على استخدامها:
1 Bit = 0 أو 1
4 Bits = 1 Hex digit
8 Bits = 1 Octet = 2 Hex digits
IPv4 = 32 Bits = 4 Octets
EUI-48 / MAC شائع = 48 Bits = 12 Hex digits
IPv6 = 128 Bits
عندما تصبح قوى 2 والتحويل بين Binary وDecimal وHex مألوفة، ستتوقف أرقام مثل 255.255.255.192 و/26 وFF و2001:db8::1 عن الظهور كقيم عشوائية، وستبدأ برؤية البنية المنطقية الموجودة خلفها.