الإنسان يعدّ بالعشرة — لأن لديه عشرة أصابع. الحاسوب يعدّ باثنين — لأن دوائره الإلكترونية تعرف حالتين فقط: تيار يجري (1) أو لا يجري (0). جهد مرتفع أو منخفض. مفتاح مفتوح أو مغلق. هذا النظام ذو الحالتين يُسمى النظام الثنائي (Binary) وهو اللغة الأم لكل جهاز حاسوبي من معالج الجيب إلى عملاق مراكز البيانات.
| أنظمة الترقيم في الشبكات — الثنائي والعشري والسادس عشر من الصفر |
لكن الثنائي صعب على الإنسان — قراءة 11000000101010000000000100000001 أصعب بكثير من قراءة 192.168.1.1. لهذا طوّر علماء الحاسوب أنظمة ترقيم وسيطة تُسهّل التعامل البشري مع بيانات الآلة دون فقدان الدقة: النظام العشري الذي نعرفه، والنظام السداسي عشري (Hexadecimal) الذي يُمثّل 4 بتات في رمز واحد.
جدول المحتويات
في هذا المقال — الأخير في سلسلة الطبقة الفيزيائية — سنُتقن التحويل بين هذه الأنظمة بفهم حقيقي لا حفظاً أعمى، ونربطها بتطبيقات شبكية ملموسة: عناوين IP وMAC وترميزات الحروف ASCII وUnicode.
لماذا نحتاج أنظمة ترقيم متعددة؟
قبل أن نبدأ التحويلات، نفهم لماذا كل نظام موجود وأين يُستخدَم:
| النظام | الأساس | الرموز المستخدمة | يُستخدَم في |
|---|---|---|---|
| ثنائي (Binary) | 2 | 0، 1 | داخل الحاسوب، الدوائر الإلكترونية، الإرسال الرقمي |
| ثماني (Octal) | 8 | 0، 1، 2، 3، 4، 5، 6، 7 | صلاحيات Unix/Linux، بعض بروتوكولات قديمة |
| عشري (Decimal) | 10 | 0 إلى 9 | التعامل البشري اليومي، عناوين IPv4 المعروضة |
| سادس عشري (Hexadecimal) | 16 | 0 إلى 9، A، B، C، D، E، F | عناوين MAC، IPv6، ألوان HTML، كودات الخطأ |
السادس عشري (Hex) شائع جداً في الشبكات لسبب هندسي بسيط: كل رمز Hex واحد يُمثّل 4 بتات بالضبط (nibble). هذا يعني أن بايتاً كاملاً (8 بتات) يُمثَّل برمزَين Hex فقط. عنوان MAC مثلاً هو 48 بتاً — يُكتَب كـ 12 رمزاً Hex بدلاً من 48 رقماً ثنائياً.
الجدول المرجعي: Hex ↔ Binary ↔ Decimal
هذا الجدول هو مرجعك الأساسي — احفظ الصف من 0 إلى F وستُتقن أسرع أسلوب للتحويل بين Hex وBinary:
| عشري (Decimal) | سداسي عشري (Hex) | ثنائي (Binary) — 4 بتات |
|---|---|---|
| 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 |
| 10 | A | 1010 |
| 11 | B | 1011 |
| 12 | C | 1100 |
| 13 | D | 1101 |
| 14 | E | 1110 |
| 15 | F | 1111 |
التحويل من عشري إلى ثنائي
الأسلوب: القسمة المتكررة على 2 مع حفظ الباقي. نقرأ البواقي من الأسفل للأعلى.
الفكرة الأساسية
كل عدد عشري يمكن تمثيله كمجموع لقوى العدد 2:
| قوة 2 | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
|---|---|---|---|---|---|---|---|---|
| القيمة | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
مثال محلول: 56 → ثنائي (من المقرر)
الطريقة الأولى — القسمة المتكررة:
| العدد | ÷ 2 | الناتج | الباقي (البت) |
|---|---|---|---|
| 56 | ÷2 | 28 | 0 ← (LSB) |
| 28 | ÷2 | 14 | 0 |
| 14 | ÷2 | 7 | 0 |
| 7 | ÷2 | 3 | 1 |
| 3 | ÷2 | 1 | 1 |
| 1 | ÷2 | 0 | 1 ← (MSB) |
نقرأ البواقي من الأسفل للأعلى (من MSB لـ LSB):
التحقق (الطريقة الثانية — مجموع قوى 2):
111000 = 1×2⁵ + 1×2⁴ + 1×2³ + 0×2² + 0×2¹ + 0×2⁰
= 32 + 16 + 8 + 0 + 0 + 0 = 56 ✓
مثال محلول: 192 → ثنائي (مهم للشبكات!)
لماذا 192؟ لأن العنوان 192.168.1.1 الذي يراه الجميع يجب أن يُحوَّل لثنائي داخل الحاسوب.
| العدد | ÷ 2 | الناتج | الباقي |
|---|---|---|---|
| 192 | ÷2 | 96 | 0 |
| 96 | ÷2 | 48 | 0 |
| 48 | ÷2 | 24 | 0 |
| 24 | ÷2 | 12 | 0 |
| 12 | ÷2 | 6 | 0 |
| 6 | ÷2 | 3 | 0 |
| 3 | ÷2 | 1 | 1 |
| 1 | ÷2 | 0 | 1 |
التحويل من ثنائي إلى عشري
الأسلوب: ضرب كل بت في قوة 2 المقابلة له ثم الجمع. نبدأ من اليمين (2⁰) ونتحرك يساراً (2¹، 2²...).
مثال محلول: 11001100 → عشري (من المقرر)
| البت | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| قوة 2 | 2⁷=128 | 2⁶=64 | 2⁵=32 | 2⁴=16 | 2³=8 | 2²=4 | 2¹=2 | 2⁰=1 |
| الحساب | 1×128 | 1×64 | 0×32 | 0×16 | 1×8 | 1×4 | 0×2 | 0×1 |
| القيمة | 128 | 64 | 0 | 0 | 8 | 4 | 0 | 0 |
المجموع = 128 + 64 + 0 + 0 + 8 + 4 + 0 + 0
مثال إضافي: 10101010 → عشري (عنوان شائع في الشبكات)
10101010 = 128+0+32+0+8+0+2+0 = 170
هذا العنوان مألوف في قناع الشبكة الكلاسيكي 255.255.255.0 — حيث 11111111 = 255.
التحويل من سادس عشري إلى عشري
الأسلوب: ضرب كل رمز في قوة 16 المقابلة ثم الجمع. نبدأ من اليمين (16⁰) ونتحرك يساراً.
قيمة الرقم الـ Hex = (رمز الموضع الأيمن × 16⁰) + (رمز الموضع التالي × 16¹) + ...
قاعدة التحويل من Hex إلى Decimal
مثال محلول: 9D → عشري (من المقرر)
أولاً نُحوّل الرموز: 9 = 9، D = 13
| الرمز | 9 | D |
|---|---|---|
| القيمة العشرية | 9 | 13 |
| قوة 16 | 16¹ = 16 | 16⁰ = 1 |
| الحساب | 9 × 16 = 144 | 13 × 1 = 13 |
المجموع = 144 + 13
مثال إضافي: FF → عشري
F = 15، F = 15
= (15 × 16) + (15 × 1) = 240 + 15 = 255
هذا لماذا 255.255.255.255 هو عنوان Broadcast — FF.FF.FF.FF بالـ Hex، وكل بايت به كل البتات تساوي 1 (11111111).
مثال ثلاثي الأرقام: A2F → عشري
A=10، 2=2، F=15
= (10 × 16²) + (2 × 16¹) + (15 × 16⁰)
= (10 × 256) + (2 × 16) + (15 × 1)
= 2560 + 32 + 15 = 2607
التحويل من سادس عشري إلى ثنائي
هذا هو أسهل التحويلات وأسرعها — لأن كل رمز Hex يُقابل 4 بتات بالضبط. ما عليك سوى استبدال كل رمز بمقابله الثنائي من الجدول المرجعي مباشرة.
كل رمز Hex = 4 بتات ثنائية. استبدل كل رمز بـ 4 بتاته وأنت انتهيت.
القاعدة الذهبية في Hex ↔ Binary
مثال محلول: C8 → ثنائي (من المقرر)
C = 12 (عشري) = 1100 (ثنائي)
8 = 8 (عشري) = 1000 (ثنائي)
| رمز Hex | C | 8 |
|---|---|---|
| ثنائي (4 بتات) | 1100 | 1000 |
مثال: عنوان MAC الجزئي A3:2F → ثنائي
A = 1010، 3 = 0011، 2 = 0010، F = 1111
النتيجة: 1010 0011 : 0010 1111
هكذا يُمثَّل عنوان MAC داخل الذاكرة والبروتوكولات الشبكية.
العكس: ثنائي → سادس عشري
العملية معكوسة — اقسم البتات إلى مجموعات من 4 بدءاً من اليمين، ثم حوّل كل مجموعة لرمز Hex:
مثال: 10110101 → نقسم: 1011 | 0101 → B | 5 → B5 (Hex)
الطريقة السريعة: التحويل العشري → ثنائي بجدول القوى
للتحويل السريع خاصة في الشبكات حيث الأعداد دائماً بين 0 و255، جدول قوى 2 يُسرّع العملية كثيراً:
- ضع جدول القوى أمامك: 128، 64، 32، 16، 8، 4، 2، 1
- ابدأ بأكبر قوة لا تتجاوز العدد — ضع 1 تحتها واطرحها
- انتقل للقوة التالية — إذا أمكن طرحها ضع 1، وإلا ضع 0
- كرر حتى تصل للباقي صفر
مثال: 200 → ثنائي بالطريقة السريعة
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|
| 1 (200-128=72) | 1 (72-64=8) | 0 (32>8) | 0 (16>8) | 1 (8-8=0) | 0 | 0 | 0 |
ASCII وUnicode: كيف تُخزَّن الحروف؟
الحاسوب يفهم الأرقام فقط. إذن كيف يتعامل مع الحروف والرموز؟ الجواب: بإعطاء كل حرف رقماً محدداً متفقاً عليه عالمياً.
ASCII — الترميز الأصلي
ASCII (American Standard Code for Information Interchange) وضع عام 1963 جدولاً يُعطي كل حرف وعلامة ترقيم ورمز تحكم رقماً بين 0 و127 (7 بتات). مثلاً:
| الحرف | قيمة ASCII (عشري) | ثنائي (8 بتات) | Hex |
|---|---|---|---|
| A (حرف كبير) | 65 | 01000001 | 41 |
| a (حرف صغير) | 97 | 01100001 | 61 |
| B | 66 | 01000010 | 42 |
| Z | 90 | 01011010 | 5A |
| 0 (الصفر المكتوب) | 48 | 00110000 | 30 |
| 9 | 57 | 00111001 | 39 |
| ! | 33 | 00100001 | 21 |
| مسافة (Space) | 32 | 00100000 | 20 |
لاحظ: A = 65 وa = 97. الفرق 32 — وهو نفس قيمة بت واحد (2⁵). تغيير البت الخامس يُحوّل بين الحرف الكبير والصغير — خدعة تُستخدم في تحسين الأداء في بعض البرامج.
| صورة توضيحية جزء من جدول ASCII يُظهر الأرقام 32-126 مع الحروف المقابلة |
ASCII الموسّع — 256 رمزاً
ASCII الأصلي 7 بتات يُغطي 128 رمزاً فقط — كافٍ للإنجليزية لكن غير كافٍ للغات الأخرى. الحل الأول كان ASCII الموسّع (8 بتات، 256 رمزاً) الذي أضاف حروفاً أوروبية. لكن المشكلة: صفحات الكود (Code Pages) المختلفة أعطت نفس الأرقام (128-255) حروفاً مختلفة في كل لغة — فظهرت مشاكل التوافق الشهيرة عند تبادل الملفات بين اللغات.
Unicode — الحل الشامل للعالم
Unicode جاء لحل المشكلة جذرياً: نظام ترميز موحد يُعطي كل حرف وكل رمز في كل لغات العالم رقماً فريداً عالمياً. يدعم الآن أكثر من 140,000 رمز من أكثر من 150 نظام كتابة.
الترميز الأشيع لـ Unicode هو UTF-8:
- يُشفّر الحروف الإنجليزية والرموز الأساسية بـ بايت واحد (متوافق مع ASCII)
- الحروف العربية تحتاج 2 بايت
- بعض الرموز والإيموجي تحتاج 4 بايت
| الحرف | Unicode Codepoint | UTF-8 (Hex) | عدد البايتات |
|---|---|---|---|
| A | U+0041 | 41 | 1 بايت |
| é | U+00E9 | C3 A9 | 2 بايت |
| ع (عين عربية) | U+0639 | D8 B9 | 2 بايت |
| 😀 (إيموجي) | U+1F600 | F0 9F 98 80 | 4 بايت |
أهمية أنظمة الترقيم في الشبكات
هذه المفاهيم ليست أكاديمية بحتة — هي حاضرة في كل عنوان شبكي وكل أمر تُدخله على الـ Switch أو الـ Router.
عنوان IPv4 والثنائي
عنوان IPv4 هو 32 بت مُقسَّمة إلى 4 أجزاء بالعشري. كل جزء بايت (8 بتات) يتراوح بين 0 و255:
| الشكل العشري | 192 . 168 . 1 . 1 | |||
|---|---|---|---|---|
| الشكل الثنائي | 11000000 | 10101000 | 00000001 | 00000001 |
قناع الشبكة 255.255.255.0 يُصبح:
11111111 . 11111111 . 11111111 . 00000000
الـ AND الثنائي (Bitwise AND) بين العنوان والقناع يُعطي عنوان الشبكة — وهذا ما يفعله الـ Router داخلياً لتحديد الشبكة المستهدفة.
عنوان MAC والسداسي عشري
عنوان MAC هو 48 بتاً مُمثَّلاً كـ 6 بايتات بالـ Hex:
00:1A:2B:3C:4D:5E
كل زوج Hex = بايت = 8 بتات. 6 أزواج × 8 بتات = 48 بتاً. بالـ Hex يُقرأ بسهولة — بالثنائي كان سيكون 48 رقماً!
الجزء الأول (3 بايت = OUI) يُحدد الشركة المُصنّعة. الجزء الثاني (3 بايت) رقم فريد للجهاز:
| 00:1A:2B | 3C:4D:5E |
|---|---|
| OUI — رمز الشركة المُصنّعة | رقم الجهاز الفريد |
عنوان IPv6 والسداسي عشري
IPv6 هو 128 بتاً — مكتوباً كـ 8 مجموعات من 4 أرقام Hex مفصولة بنقطتين:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
كل مجموعة 4 رموز Hex = 16 بتاً. 8 مجموعات × 16 بتاً = 128 بتاً. بدون Hex كان سيكون 128 رقماً ثنائياً — مستحيل التعامل معه يدوياً.
الأمن السيبراني وأنظمة الترقيم
في تحليل الثغرات والشيفرة الخبيثة، قراءة Hex ضرورية:
- Shellcode: كود هجوم يُكتَب بالـ Hex مثل:
\x90\x90\xEB\x0A— القدرة على قراءته مباشرة ميزة أساسية في تحليل البرمجيات الخبيثة. - Packet Analysis: أدوات مثل Wireshark تُعرض محتوى الحزم بالـ Hex — قراءتها تكشف البروتوكول والبيانات المخفية.
- Hash Values: MD5 وSHA-256 تُعطي نتيجة بالـ Hex — مقارنتها تكشف التلاعب بالملفات.
- كلمات المرور المُشفّرة: تُخزَّن كـ Hash بالـ Hex في قواعد البيانات.
تمارين تطبيقية للتدريب الذاتي
الإتقان يأتي بالتكرار. هذه تمارين متدرجة — حاول حلّها بنفسك قبل الاطلاع على الجواب.
المجموعة الأولى: عشري → ثنائي
التمارين والأجوبة
1. حوّل 128 إلى ثنائي: الجواب: 10000000 (128 = 2⁷)
2. حوّل 255 إلى ثنائي: الجواب: 11111111 (أقصى قيمة لبايت)
3. حوّل 172 إلى ثنائي: الجواب: 10101100 (128+32+8+4=172)
4. حوّل 10 إلى ثنائي: الجواب: 00001010 (8+2=10)
المجموعة الثانية: ثنائي → عشري
التمارين والأجوبة
1. حوّل 10000000 إلى عشري: الجواب: 128
2. حوّل 11111111 إلى عشري: الجواب: 255
3. حوّل 01010101 إلى عشري: الجواب: 85 (64+16+4+1)
4. حوّل 11000000 إلى عشري: الجواب: 192 (أول رقم في عنوان 192.168.x.x)
المجموعة الثالثة: Hex → عشري وثنائي
التمارين والأجوبة
1. حوّل FF إلى عشري: الجواب: 255 (15×16 + 15×1)
2. حوّل 1A إلى عشري: الجواب: 26 (1×16 + 10×1)
3. حوّل AC إلى ثنائي: الجواب: 10101100 (A=1010، C=1100)
4. حوّل 2F إلى ثنائي: الجواب: 00101111 (2=0010، F=1111)
تحدي الشبكات: حوّل عنوان IP كاملاً
التحدي: 192.168.10.1
192 = 11000000
168 = 10101000
10 = 00001010
1 = 00000001
العنوان كاملاً بالثنائي: 11000000.10101000.00001010.00000001
خلاصة
أنظمة الترقيم — الثنائي والعشري والسداسي عشري — هي لغة الحواسيب والشبكات. إتقانها لا يعني حفظ خوارزميات، بل فهم لماذا كل نظام موجود وكيف يُخدم الهدف المُصمَّم له.
الثنائي هو اللغة الأم للدوائر الإلكترونية — بسيط فيزيائياً (حالتان فقط) لكن مطوّل للإنسان. العشري لغة الإنسان — مريح للتعامل البشري. السداسي عشري هو الجسر الذكي بين الاثنين — يُمثّل 4 بتات برمز واحد فيُقلص البيانات الثنائية الطويلة لشكل إنساني مقبول.
في عالم الشبكات: كل عنوان IP يُعالَج ثنائياً، كل عنوان MAC ومعظم بروتوكولات الشبكة تُكتَب سداسياً، وكل رمز تكتبه في بريدك الإلكتروني يُخزَّن كرقم ASCII أو Unicode ثم يُرسَل ثنائياً عبر الوسيط.
وبهذا المقال تكتمل سلسلة الطبقة الفيزيائية (الفصل الثاني) من مسار تعلم الشبكات. في السلسلة القادمة سننتقل إلى طبقة ربط البيانات (Data Link Layer) — حيث تُصبح البتات الخام إطارات، وتُحل مشاكل الوصول المشترك للوسيط، وتبدأ قصة عناوين MAC واتفاقيات الإرسال على الشبكة المحلية.
أسئلة شائعة (FAQ)
لماذا يستخدم الحاسوب النظام الثنائي دون العشري؟
لأن الدوائر الإلكترونية تعرف حالتين فيزيائيتين فقط: جهد مرتفع (1) أو منخفض (0)، تيار يجري أو لا يجري، مفتاح مفتوح أو مغلق. بناء دائرة تميّز 10 مستويات للجهد (كما يتطلب النظام العشري) معقد وعرضة للخطأ وغالٍ. النظام الثنائي بحالتين واضحتين أبسط وأموثق وأسرع بكثير للتنفيذ في الترانزستورات الإلكترونية.
ما الفرق بين Bit وByte وNibble؟
Bit هو أصغر وحدة معلومات — قيمته 0 أو 1. Nibble هو 4 بتات معاً — يُمثَّل برمز Hex واحد (0-F). Byte هو 8 بتات = نيبلَين = رمزان Hex — يُمثّل قيمة بين 0 و255. الـ Byte هو الوحدة الأساسية للذاكرة والنقل — عنوان IP = 4 بايت، عنوان MAC = 6 بايت، حرف ASCII = 1 بايت، حرف عربي بـ UTF-8 = 2 بايت.
لماذا تنتهي عناوين IP بـ .255 أو .0؟ ما علاقة ذلك بالثنائي؟
بالثنائي: 255 = 11111111 (كل البتات 1) و0 = 00000000 (كل البتات 0). في شبكة بقناع /24 (255.255.255.0): عنوان الشبكة (x.x.x.0) — آخر بايت كله أصفار — يُمثّل الشبكة نفسها ولا يُعطى لجهاز. عنوان البث (x.x.x.255) — آخر بايت كله آحاد — مخصص للـ Broadcast للجميع. هذان العنوانان "المحجوزان" في كل شبكة سببهما الثنائي مباشرة.
ما الفرق بين ASCII وUnicode وأيهما أستخدم؟
ASCII نظام قديم (1963) يُغطي 128 رمزاً فقط — الإنجليزية والرموز الأساسية. Unicode نظام حديث يُغطي أكثر من 140,000 رمز من كل لغات العالم بما فيها العربية والصينية والإيموجي. عملياً: UTF-8 (تشفير Unicode) هو المعيار الحالي لكل الويب والبرمجيات الحديثة. لا تزال تقرأ عن ASCII في سياقات الشبكات والأمن لكن لا تُنشئ تطبيقات جديدة بـ ASCII فقط.
لماذا عناوين MAC تُكتَب بالـ Hex وليس بالعشري؟
عنوان MAC هو 48 بتاً. بالثنائي: 48 رقماً — صعب القراءة. بالعشري: الأرقام لا تنقسم بشكل نظيف (3 أرقام عشرية لا تتوافق مع 8 بتات). بالـ Hex: كل 4 بتات = رمز واحد، إذن 48 بتاً = 12 رمزاً Hex مُقسَّمة بنقطتين: XX:XX:XX:XX:XX:XX. قابل للقراءة ومرتبط مباشرة بالبنية الثنائية — لهذا Hex هو الاختيار المنطقي الوحيد لعناوين MAC وIPv6.
كيف يستخدم متخصص الأمن السيبراني الـ Hex في عمله؟
بطرق عدة في العمل اليومي: قراءة Shellcode في تحليل البرمجيات الخبيثة (مثل \x90\x90 = NOP sled). فحص محتوى الحزم الشبكية في Wireshark حيث كل شيء يُعرض بالـ Hex. مقارنة Hash المشبوه (MD5/SHA-256) بقواعد بيانات البرمجيات الخبيثة. فهم بنية ملفات التنفيذ (PE Header للـ EXE) عند الهندسة العكسية. تعديل بيانات ثنائية في الـ Hex Editor لاختبار الثغرات.