الأساسيات:
IEEE 802.11 وطبقة MAC.
حجر الأساس. كل قيد ستراه لاحقاً — لماذا نحتاج active monitor، لماذا الـ ACK يجب أن يأتي من العتاد، لماذا القفز بين القنوات حسّاس للتوقيت — ينبع مباشرةً من تفاصيل هذه الوحدة. لا تتجاوزها.
لماذا الاتصال المباشر بين الأجهزة صعب أصلاً؟
شبكات Wi-Fi التقليدية تعمل بنمط البنية التحتية (Infrastructure mode): كل الأجهزة (Stations / STA) تتصل عبر نقطة وصول مركزية (Access Point / AP). الـ AP هو «المنسّق»: يحدّد القناة، يوزّع التوقيت عبر إطار الـ Beacon، ويعرف من المتصل (Association). هذا يبسّط كل شيء لأن هناك مرجع زمني ومكاني واحد.
الاتصال المباشر (peer-to-peer) بين جهازين بدون AP يفقد هذا المنسّق المركزي، فيظهر سؤالان جوهريان لا بد من حلّهما:
التزامن (Synchronization)
إذا كان كل جهاز سيقفز بين قنوات متعددة (وهو ما يفعله AWDL)، فكيف يضمن جهازان أنهما على نفس القناة في نفس اللحظة؟ بدون ساعة مشتركة، سيتحدّثان في الفراغ.
التنسيق (Coordination)
من يتكلم متى؟ في غياب AP، يجب أن تتفق الأجهزة على قواعد للوصول للوسط (الهواء) دون أن تتصادم إشاراتهم.
البروتوكولات المختلفة تحلّ هاتين المشكلتين بطرق مختلفة:
| البروتوكول | الجهة | آلية التزامن/التنسيق | ملاحظة |
|---|---|---|---|
| AWDL | Apple (خاص) | Master election + Availability Windows + channel hopping متزامن | DRILL_TARGET |
| Wi-Fi Direct (P2P) | Wi-Fi Alliance | أحد الأجهزة يصير «Group Owner» يلعب دور AP افتراضي | قياسي مفتوح |
| Wi-Fi Aware (NAN) | Wi-Fi Alliance | عناقيد (clusters) متزامنة بإطارات discovery دورية | يستخدمه Android |
| IBSS / Ad-hoc | IEEE 802.11 | كل الأجهزة تتشارك BSSID وتولّد Beacons بالتناوب | قديم/نادر |
| BLE | Bluetooth SIG | إعلانات دورية على 3 قنوات | للاكتشاف لا للنقل الثقيل |
AWDL لا يخترع طبقة فيزيائية جديدة. هو طبقة منطقية فوق 802.11 العادي، يعيد استخدام نفس الإطارات والـ PHY، لكنه يفرض جدول قفز قنوات ونظام توقيت خاصاً به. لذلك فهم 802.11 = فهم AWDL.
معمارية 802.11: الطبقات المعنية
نتعامل مع طبقتين فقط في هذه الدورة:
- PHY (الطبقة الفيزيائية): التشكيل (modulation)، الترميز، النطاقات والقنوات. لا نتحكم بها برمجياً عادةً، لكنها مصدر القيود الزمنية (مثل SIFS).
- MAC (التحكم بالوصول للوسط): هنا تعيش الإطارات، العناوين، آلية التنافس، والـ ACK. كل عملنا في المحاكاة يدور حول هذه الطبقة.
تنقسم MAC إلى وظيفتين تاريخياً:
- DCF (Distributed Coordination Function): الوصول الموزّع التنافسي عبر CSMA/CA — الأساس وما يستخدمه AWDL داخل نوافذه.
- PCF / HCF: تنسيق مركزي عبر الـ AP — لا يعنينا.
تشريح إطار 802.11
كل ما يطير في الهواء هو إطار من أحد ثلاثة أصناف رئيسية. معرفة أيّ صنف نحقن وأيّ صنف نلتقط = جوهر المحاكاة.
الأصناف الثلاثة بالتفصيل
① Management frames (Type=00)
لإدارة الاتصال والاكتشاف.
- Beacon (subtype 8): يعلن وجود الشبكة، يحمل التوقيت (TSF) ومعلومات القناة.
- Probe Request/Response: الاكتشاف الفعّال.
- Association/Authentication: الانضمام لشبكة.
- Action frames (subtype 13): إطارات «حركة» قابلة للتوسعة. هنا يعيش AWDL — إطارات المزامنة والانتخاب في AWDL كلها Action frames من نوع Vendor-Specific.
② Control frames (Type=01)
إطارات قصيرة جداً تنظّم تدفّق البيانات.
- ACK (subtype 13): تأكيد استلام إطار. هذا الإطار هو بطل القصة كلها — صغره وحساسية توقيته (SIFS) هما سبب اشتراط العتاد الخاص (الوحدة 3).
- RTS / CTS: حجز الوسط لتفادي «العقدة المخفية».
- Block Ack: تأكيد مجمّع لعدة إطارات.
③ Data frames (Type=10)
تحمل الحمولة الفعلية (IP، UDP، TCP...).
- QoS Data (subtype 8): إطار بيانات بجودة خدمة. AWDL يستخدم هذا الصنف ويُدخل ترويسة AWDL خاصة بعد ترويسة MAC مباشرةً، ثم تأتي حمولة IPv6.
دلالة العناوين الثلاثة
نظام العنونة في 802.11 يربك المبتدئين لأنه يستخدم 3 عناوين (وأحياناً 4). تفسيرها يعتمد على بِتّي ToDS/FromDS.
للحالة الشائعة في الاتصال المباشر (لا توجد DS / شبكة سلكية خلفية):
- Addr1 = Receiver Address (RA): من سيستقبل الإطار الآن.
- Addr2 = Transmitter Address (TA): من أرسل الإطار الآن.
- Addr3 = BSSID: معرّف الشبكة.
في AWDL تحديداً، الـ BSSID قيمة ثابتة محجوزة 00:25:00:FF:94:73 لكل إطارات AWDL.
هذا «التوقيع» يجعل التعرّف على حركة AWDL في ملف التقاط سهلاً جداً — فلتر بسيط:
wlan.bssid == 00:25:00:ff:94:73.
آلية الوصول للوسط: CSMA/CA و DCF
الهواء وسط مشترك؛ لو أرسل جهازان معاً، تتصادم الإشارتان وتُفقدان. الإيثرنت السلكي يكتشف التصادم (Collision Detection). الراديو لا يستطيع السماع أثناء الإرسال، فيلجأ 802.11 لـ تجنّب التصادم (Collision Avoidance) عبر CSMA/CA:
- Carrier Sense: قبل الإرسال، استمع للقناة.
- إن كانت مشغولة → انتظر حتى تفرغ.
- إن كانت فارغة لمدة فاصل زمني محدّد (DIFS) → ابدأ Backoff عشوائياً: اختر رقماً عشوائياً ضمن نافذة التنافس (Contention Window / CW) وعُدّ تنازلياً، وأرسل عند الوصول للصفر.
- بعد الإرسال الناجح، ينتظر المرسل ACK من المستقبل. لا ACK = افتراض فقدان = إعادة إرسال مع مضاعفة CW (binary exponential backoff).
النقطة 4 قاتلة: إذا أرسل لك جهاز Apple إطاراً وأنت (المحاكي) لم تردّ بـ ACK خلال المهلة، سيظن أن الإطار ضاع، يعيد إرساله عدة مرات، ثم يعتبرك غير موجود (unreachable) ويتجاهلك. لهذا «الاستماع فقط» (passive monitor) لا يكفي للمشاركة الحقيقية في الشبكة.
المسافات بين الإطارات (IFS) — قلب معضلة التوقيت
الفجوات الزمنية بين الإطارات ليست عشوائية؛ هي مُعرّفة بدقّة وتُنشئ نظام أولويات. من الأقصر (الأعلى أولوية) للأطول:
| الفاصل | المدة (5 GHz OFDM) | الغرض |
|---|---|---|
| SIFS (Short IFS) | 16 µs | أقصر فجوة؛ بين الإطار والـ ACK المقابل له، وبين RTS/CTS |
| SIFS (2.4 GHz / 802.11b) | 10 µs | نفس الغرض بترميز أقدم |
| PIFS | SIFS + slot | أولوية متوسطة (PCF) |
| DIFS | SIFS + 2 × slot | الفجوة قبل بدء التنافس في DCF |
| AIFS | متغيّر حسب فئة QoS | نسخة DCF الواعية بجودة الخدمة |
قاعدة SIFS — الجملة الواحدة التي تحكم الدورة كلها
عندما تستقبل محطة إطاراً موجّهاً إليها ويمرّ سليماً (FCS صحيح)، يجب أن تبدأ إرسال الـ ACK بالضبط بعد SIFS — أي 16 ميكروثانية في 5 GHz. ليس 20، وليس 50.
ميزانية الـ 16 ميكروثانية يجب أن تتّسع لكل هذا:
لماذا يستحيل على CPU عام تحقيق هذا؟
- زمن المقاطعة (interrupt latency): من وصول الإطار حتى تنبيه المعالج قد يستغرق وحده عشرات الميكروثانيات.
- نقل DMA من الشريحة لذاكرة النظام، ثم عودة الـ ACK، رحلتان عبر الناقل.
- تبديل سياق نظام التشغيل وجدولة المهام = عدم حتمية زمنية (non-determinism).
توليد الـ ACK بتوقيت SIFS لا بد أن يحدث داخل firmware / MAC processor الشريحة. لا يمكن لأي ترقيع في الـ driver أن يضيف هذه القدرة إن لم تكن آلات الحالة والمؤقتات موجودة في السيليكون نفسه.
النطاقات والقنوات والمجالات التنظيمية
2.4 GHz
قنوات 1–14 (متاحة جزئياً حسب البلد)، مزدحمة وبطيئة. AWDL يستخدمه ثانوياً.
5 GHz
قنوات كثيرة (36، 40، 44، 48، 149، 153، …)، أعرض وأسرع. AWDL يفضّل 5 GHz لأداء أعلى.
- بعض قنوات 5 GHz تخضع لـ DFS (Dynamic Frequency Selection): يجب على الجهاز «الاستماع» للرادار قبل الإرسال، وقد يُمنع البثّ ابتداءً عليها. هذا يعقّد القفز/الحقن على تلك القنوات.
- المجال التنظيمي (Regulatory Domain): البلد يحدّد القنوات والقدرة المسموحة. على Linux يُضبط عبر
iw reg set <CC>. قد تمنعك إعداداتك التنظيمية من الحقن على قنوات معيّنة.
root@recon: ~ · regulatory domain
# تحقّق من المجال الحالي
$ iw reg get
country US: DFS-FCC
(2402 - 2472 @ 40), (N/A, 30), (N/A)
(5170 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
...
# بدّله إن لزم (يتطلّب CRDA)
$ sudo iw reg set US
نقاط ارتكاز الوحدة 0
- AWDL = منطق فوق 802.11، وليس PHY جديداً → إتقان 802.11 شرط.
- الإطارات 3 أصناف: Management (ومنها Action = جسد AWDL)، Control (ومنها ACK = عقدة المشكلة)، Data (ومنها QoS-Data = ناقل بيانات AWDL).
- BSSID ثابت لـ AWDL:
00:25:00:FF:94:73. - CSMA/CA يفرض أن غياب ACK = «الجهاز غير موجود».
- SIFS ≈ 16 µs قيد عتادي صارم يحكم كل قرارات اختيار العتاد لاحقاً.
تمارين الوحدة 0
- ارسم مخطط تسلسل (sequence diagram) لتبادل إطار Data واحد ناجح يتضمّن DIFS، Backoff، الإطار، SIFS، ثم ACK.
- لماذا لا يصلح أسلوب «Collision Detection» للراديو؟ اشرح فيزيائياً.
- افتح ملف pcap لأي حركة Wi-Fi (متوفر أمثلة كثيرة) في Wireshark وطبّق الفلتر
wlan.fc.type == 1ثمwlan.fc.type_subtype == 0x1d. ماذا ترى؟ كم حجم إطار الـ ACK؟