> ## Content Index
> Fetch the complete content index at: https://arabroot.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# Subnets وCIDR: كيف تقسم عناوين IP وتحسبها بيدك
- URL: https://arabroot.io/articles/الشبكات-الفرعية-subnets-و-cidr-و-vlsm/
- Published: 2026-10-07T16:00:00.000Z
- Updated: 2026-10-09T13:02:32.000Z
- Description: ماذا يعني /26 وكيف تحسب الشبكة ومدى الأجهزة بيدك، ثم تبني خطة عناوين كاملة لشركة صغيرة لا تتعارض فيها الشبكات.
- Author: فريق عرب رووت
- Tags: الأدلة التقنية, الشبكات والبنية التحتية, الشبكات والوصول, أساسيات, الاستضافة الذاتية

لنفرض أن لديك شركة صغيرة بدأت بعشرين جهازاً على شبكة واحدة عنوانها `192.168.1.0/24` كما جاءت من ال Router، ثم أضفتم كاميرات المراقبة، ثم شبكة Wi-Fi للضيوف، ثم سيرفرين للملفات وقاعدة البيانات، ثم طلب منك مسؤول الأمن أن تفصل الكاميرات عن أجهزة الموظفين، وطلب منك فريق ال VPN نطاقاً لا يتعارض مع شبكة الفرع الآخر، وفجأة تجد نفسك أمام أسئلة لا يجيب عنها ال Router: كم عنواناً تحتاج كل مجموعة؟ ما معنى `/26` و`255.255.255.192`؟ ولماذا يرفض الجهاز عنواناً يبدو صحيحاً؟

وفي [مصطلحات الاستضافة الذاتية](https://arabroot.io/articles/%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B0%D8%A7%D8%AA%D9%8A%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/#addresses) عرفنا الشبكة الفرعية Subnet وكتابة CIDR في سطرين، أما هنا فسوف نفتح العنوان من الداخل ونحسبه بأيدينا بالنظام الثنائي Binary، ثم نبني خطة عناوين كاملة لشركة صغيرة، وإذا كان النظام الثنائي جديداً عليك فابدأ بمقال [الأنظمة العددية والثنائي](https://arabroot.io/articles/%D8%A7%D9%84%D8%A7%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%B9%D8%AF%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AB%D9%86%D8%A7%D8%A6%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/#conversions) لأننا سوف نعتمد عليه في كل خطوة. وسوف نناقش في هذا المقال ما يلي:

- ماذا يوجد داخل عنوان IPv4، وما هو القناع Subnet Mask.
- لماذا نقسم الشبكة أصلاً: نطاق البث Broadcast Domain والتوجيه Routing وتخطيط العناوين وحدود الأمان.
- كيف انتقلنا من فئات العناوين Classes إلى CIDR، ولماذا.
- حساب عنوان الشبكة والبث ومدى الأجهزة بيدك بالنظام الثنائي.
- تقسيم كتلة واحدة بأقنعة متغيرة VLSM، مع خطة عناوين لشركة فيها موظفون وضيوف وكاميرات وسيرفرات وشبكة إدارة.
- تجميع المسارات Route Summarization، والعناوين الخاصة ونطاق CGNAT باختصار.
- لماذا كل شبكة في IPv6 طولها `/64`.
- الأدوات `ipcalc` و`sipcalc` ومكتبة `ipaddress` في Python بمخرجات حقيقية، ثم الأخطاء الشائعة.

## ماذا يوجد داخل عنوان IPv4؟

عنوان IPv4 كما عرفه [RFC 791](https://www.rfc-editor.org/rfc/rfc791?ref=arabroot.io) عام 1981 هو رقم واحد طوله 32 بتاً، ونحن نكتبه أربعة أرقام عشرية بينها نقاط حتى نقرأه، وكل رقم منها بايت Byte من 8 بتات يسمى Octet، لذلك لا يتجاوز أي جزء منها 255\. والمهم أن هذا الرقم الواحد يحمل معلومتين: الجزء الأيسر يحدد الشبكة Network Part، والجزء الأيمن يحدد الجهاز داخل الشبكة Host Part، والذي يحدد أين ينتهي الأول ويبدأ الثاني هو قناع الشبكة الفرعية Subnet Mask، وهو أيضاً 32 بتاً، آحاد متتالية فوق جزء الشبكة ثم أصفار فوق جزء الجهاز.

والصورة التالية تبين العنوان `192.168.10.77` مع القناع `255.255.255.192`، أي 26 بتاً للشبكة و6 بتات للجهاز:

![أربعة صناديق للأجزاء 192 و168 و10 و77، وتحتها 32 خانة للبتات: الصف الأول بتات العنوان والصف الثاني بتات القناع، أول 26 خانة من القناع آحاد بلون داكن وآخر 6 أصفار رمادية، وقوس برتقالي تحت أول 26 بتاً مكتوب عليه Network part 26 bits وقوس أزرق تحت آخر 6 مكتوب عليه Host part 6 bits مع 2 أس 6 يساوي 64 عنواناً، وفي الأسفل 192.168.10.77/26 تساوي العنوان مع القناع 255.255.255.192](https://arabroot.io/content/images/2026/10/subnets-cidr-01-address-structure.webp)

القناع آحاد فوق جزء الشبكة وأصفار فوق جزء الجهاز

وكتابة CIDR، أي `192.168.10.77/26`، هي نفس المعلومة بشكل أقصر: الرقم بعد الشرطة المائلة يسمى طول البادئة Prefix Length، وهو عدد الآحاد في القناع، فالقناع `255.255.255.192` هو `/26` لأن `255` ثلاث مرات تعطي 24 آحاداً، و`192` بالثنائي `11000000` تضيف اثنين. ولاحظ أن عدد العناوين في الشبكة يأتي من بتات الجهاز مباشرة: 6 بتات تعطي 2 أس 6، أي 64 عنواناً، وكلما زاد طول البادئة بواحد انقسم عدد العناوين على اثنين.

## لماذا نقسم الشبكة إلى شبكات فرعية Subnets؟

قد يتساءل البعض: لماذا لا نضع كل الأجهزة في شبكة `/16` كبيرة فيها 65,536 عنواناً وننتهي؟ والإجابة أن الشبكة الفرعية ليست طريقة لترقيم الأجهزة فقط، وإنما هي الوحدة التي يعمل عليها البث والتوجيه وقواعد الجدار الناري Firewall، وقد كتب [RFC 950](https://www.rfc-editor.org/rfc/rfc950?ref=arabroot.io) عام 1985 أن مؤسسات كثيرة اختارت أن تقسم شبكتها الواحدة إلى شبكات فرعية «لأسباب إدارية أو تقنية» بدل أن تطلب عدة أرقام شبكات، ووضع الطريقة القياسية لذلك. والصورة التالية تقارن شبكة واحدة مسطحة بشبكات فرعية خلف Router:

![لوحتان. في اليمين ONE FLAT NETWORK: Switch في الوسط حوله دوائر بث برتقالية متقطعة، ومتصل به حاسوب موظف وهاتف ضيف وكاميرا حمراء وقاعدة بيانات وحاسوب محمول وحاسوب المحاسبة، وسهم أحمر متقطع من الكاميرا إلى قاعدة البيانات مكتوب عليه camera to db:5432. وفي اليسار SUBNETS + ROUTER: Router وجدار ناري متصل بثلاث شبكات Staff على 10.20.0.0/25 وCameras على 10.20.0.192/27 وServers على 10.20.0.224/28، وكل شبكة داخلها دائرة بث خاصة بها. وفي الأسفل أربع بطاقات مرقمة: Broadcast domain وRouting وAddress plan وSecurity boundary](https://arabroot.io/content/images/2026/10/subnets-cidr-02-why-subnets.webp)

الشبكة الفرعية تحدد من يسمع البث، ومن يحتاج ال Router ليصل إلى غيره

وفي الشكل أعلاه لاحظ الأسباب الأربعة:

1. **نطاق البث Broadcast Domain**: رسائل البث مثل طلب ARP الذي يسأل «من صاحب العنوان كذا؟» وطلبات DHCP تصل إلى كل جهاز في نفس الشبكة، فكلما كبرت الشبكة زاد هذا الضجيج على كل جهاز، والأهم أن كل جهاز يرى جيرانه ويستطيع أن يكلمهم مباشرة دون أن يمر على أي جهاز وسيط.
2. **التوجيه Routing**: الجهاز يقارن عنوان الوجهة بشبكته، فإذا كانت الوجهة داخلها أرسل إليها مباشرة، وإلا أرسل الحزمة Packet إلى البوابة Gateway، وال Router يحتفظ بسطر واحد لكل شبكة وليس لكل جهاز، وهذا ما يجعل الإنترنت كله ممكناً كما شرحنا في [كيف يصل الإنترنت إلى بيتك](https://arabroot.io/articles/%D9%83%D9%8A%D9%81-%D9%8A%D8%B5%D9%84-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A5%D9%84%D9%89-%D8%A8%D9%8A%D8%AA%D9%83/#bgp).
3. **خطة العناوين Address Plan**: عندما تكون الكاميرات كلها في `10.20.0.192/27` فأنت تعرف من العنوان وحده نوع الجهاز ومكانه، وتكتب قاعدة واحدة للمجموعة كلها بدل قائمة عناوين.
4. **حد الأمان Security Boundary**: الحركة بين شبكتين فرعيتين لا بد أن تمر على ال Router، فهو المكان الطبيعي لقواعد الجدار الناري، أما داخل الشبكة الواحدة فلا يوجد شيء في الطريق. وهذا موضوع المقال التالي [تقسيم الشبكة Network Segmentation](https://arabroot.io/articles/%D8%AA%D9%82%D8%B3%D9%8A%D9%85-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-network-segmentation-vlan-%D9%88-vpc/) الذي نبني فيه هذه الحدود فعلاً بشبكات VLAN وجدار ناري.

## من الفئات Classes إلى CIDR: لماذا تغيرت الطريقة؟

في البداية لم يكن هناك قناع يكتب بجانب العنوان، فقد قسم RFC 791 العناوين إلى فئات Classes يعرفها الجهاز من البتات الأولى في العنوان نفسه: الفئة A تبدأ ببت `0` وطول شبكتها 8 بتات، أي ما نكتبه اليوم `/8`، والفئة B تبدأ بـ `10` وطولها `/16`، والفئة C تبدأ بـ `110` وطولها `/24`. وهذه الطريقة بسيطة، لكن يشرح [RFC 4632](https://www.rfc-editor.org/rfc/rfc4632?ref=arabroot.io) ثلاث مشكلات ظهرت مع نمو الإنترنت: الفئة C فيها 254 جهازاً فقط فهي صغيرة على مؤسسة متوسطة، والفئة B فيها 65,534 جهازاً فهي كبيرة جداً على أغلب المؤسسات، لكنها كانت الخيار الوحيد المناسب فاستنزفت بسرعة، ثم إن جداول التوجيه في أجهزة ال Router على الإنترنت كانت تكبر أسرع مما تتحمله الأجهزة والبرامج والفرق، وأخيراً كان واضحاً أن مساحة 32 بتاً كلها سوف تنفد.

والحل كان التوجيه بين النطاقات بلا فئات Classless Inter-Domain Routing، واختصاراً CIDR، الذي نشر أول مرة في RFC 1519 في سبتمبر 1993 ثم حل محله RFC 4632 في أغسطس 2006: يكتب طول البادئة صراحة مع كل شبكة، فيمكن أن تأخذ مؤسسة `/22` فيها 1024 عنواناً بدل فئة B كاملة، ويمكن لمزود الخدمة أن يعلن كتلة واحدة كبيرة تغطي كل عملائه. ولذلك عندما ترى اليوم `Class C` في مخرج أداة أو في كلام أحدهم فهو يقصد غالباً «`/24`»، والفئات نفسها لم تعد تحدد شيئاً في التوجيه.

## حساب الشبكة والبث ومدى الأجهزة بيدك

الآن سوف نحسب كل شيء عن العنوان `192.168.10.77/26` دون أي أداة، والطريقة واحدة لأي عنوان: نحول الجزء الذي يقع فيه حد القناع إلى الثنائي، لأن الأجزاء التي قناعها `255` لا تتغير، والأجزاء التي قناعها `0` تصبح أصفاراً في عنوان الشبكة. والصورة التالية تبين الخطوات على الجزء الرابع:

![أربعة صفوف مرقمة لبتات الجزء الرابع، وقبل كل صف الأجزاء الثلاثة الأولى كما هي. 1 Address: 01001101 تساوي 77. 2 Mask /26: 11000000 تساوي 192. 3 Network = IP AND mask: 01000000 تساوي 64. 4 Broadcast: 01111111 تساوي 127. وخط متقطع بعد أول بتين يفصل بتات الشبكة عن بتات الجهاز. وفي الأسفل الخطوة 5: Usable hosts من 192.168.10.65 إلى 192.168.10.126، أي 64 ناقص 2 يساوي 62](https://arabroot.io/content/images/2026/10/subnets-cidr-03-and-mask.webp)

عنوان الشبكة: بتات الجهاز أصفار، وعنوان البث: بتات الجهاز آحاد

1. **حول الجزء الرابع إلى الثنائي**: 77 = 64 + 8 + 4 + 1، أي `01001101`.
2. **اكتب القناع بالثنائي**: `/26` تعني 24 آحاداً في الأجزاء الثلاثة الأولى واثنين في الرابع، أي `11000000` \= 192.
3. **عنوان الشبكة Network Address**: عملية AND بين العنوان والقناع، أي نبقي البتات التي فوقها `1` ونصفر الباقي: `01001101` AND `11000000` \= `01000000` \= 64، فالشبكة `192.168.10.64/26`. وقد شرحنا عملية AND على البتات في [العمليات على البتات](https://arabroot.io/articles/%D8%A7%D9%84%D8%A7%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%B9%D8%AF%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AB%D9%86%D8%A7%D8%A6%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/#bitwise).
4. **عنوان البث Broadcast Address**: نفس بتات الشبكة مع جعل كل بتات الجهاز آحاداً: `01111111` \= 127، فالبث `192.168.10.127`.
5. **مدى الأجهزة Host Range**: كل ما بينهما، من `192.168.10.65` إلى `192.168.10.126`، أي 64 ناقص 2 = 62 جهازاً، لأن أول عنوان يمثل الشبكة نفسها وآخر عنوان للبث، وقد نص RFC 950 على أن العنوان الذي كله أصفار يعني «هذه الشبكة» والذي كله آحاد يعني «كل الأجهزة».

وبعد أن تفهم الطريقة الثنائية يوجد اختصار يستخدمه مهندسو الشبكات في رؤوسهم: حجم الكتلة Block Size في الجزء الذي فيه حد القناع هو 256 ناقص قيمة القناع في ذلك الجزء، فهنا 256 ناقص 192 = 64، والشبكات تبدأ عند مضاعفات 64: صفر و64 و128 و192، والعنوان 77 يقع بين 64 و128، فشبكته تبدأ عند 64، وبثها 127، أي العنوان الذي قبل بداية الشبكة التالية.

ولنأخذ مثالاً ثانياً يخطئ فيه كثيرون: هل `10.20.0.255` عنوان صالح لجهاز في الشبكة `10.20.0.0/23`؟ القناع `/23` هو `255.255.254.0`، فحد القناع في الجزء الثالث، وحجم الكتلة 256 ناقص 254 = 2، فالشبكة تغطي الجزء الثالث 0 و1، أي من `10.20.0.0` إلى `10.20.1.255`، والبث هو `10.20.1.255`، أما `10.20.0.255` فهو في منتصف الشبكة وصالح تماماً لجهاز، رغم أنه ينتهي بـ 255\. والجدول التالي يجمع الأطوال التي سوف تقابلها أكثر من غيرها:

| الطول | القناع          | عدد العناوين | الأجهزة | أين تراه غالباً                                                                                              |
| ----- | --------------- | ------------ | ------- | ------------------------------------------------------------------------------------------------------------ |
| /16   | 255.255.0.0     | 65,536       | 65,534  | كتلة VPC كاملة في السحابة، وشبكات Docker الافتراضية                                                          |
| /22   | 255.255.252.0   | 1,024        | 1,022   | موقع متوسط أو مجموعة فروع بعد التجميع                                                                        |
| /23   | 255.255.254.0   | 512          | 510     | شركة صغيرة كاملة كما في الخطة أدناه                                                                          |
| /24   | 255.255.255.0   | 256          | 254     | شبكة البيت أو مكتب صغير                                                                                      |
| /25   | 255.255.255.128 | 128          | 126     | أجهزة الموظفين                                                                                               |
| /26   | 255.255.255.192 | 64           | 62      | ضيوف Wi-Fi                                                                                                   |
| /27   | 255.255.255.224 | 32           | 30      | كاميرات أو طابعات                                                                                            |
| /28   | 255.255.255.240 | 16           | 14      | سيرفرات أو أجهزة الإدارة، وأصغر Subnet تقبله AWS                                                             |
| /30   | 255.255.255.252 | 4            | 2       | رابط بين جهازي توجيه Point-to-Point                                                                          |
| /31   | 255.255.255.254 | 2            | 2       | رابط Point-to-Point بلا شبكة وبث كما يسمح [RFC 3021](https://www.rfc-editor.org/rfc/rfc3021?ref=arabroot.io) |
| /32   | 255.255.255.255 | 1            | 1       | عنوان جهاز واحد في قاعدة جدار ناري أو مسار                                                                   |

## تقسيم الكتلة بأقنعة متغيرة VLSM: خطة عناوين لشركة صغيرة

الطريقة البسيطة أن تقسم الكتلة إلى شبكات متساوية، كأن تقسم `10.20.0.0/23` إلى أربع شبكات `/25` في كل منها 126 جهازاً، لكن هذا يعطي رابط الجدار الناري الذي يحتاج عنوانين فقط 126 عنواناً، ويعطي الموظفين المئة نفس حجم أجهزة الإدارة العشرة، وسرعان ما تنفد الكتلة وأغلبها فارغ. والطريقة الصحيحة هي الأقنعة المتغيرة الطول Variable Length Subnet Masking، واختصاراً VLSM: أن تعطي كل مجموعة أصغر شبكة تتسع لها، وهذا ممكن أصلاً لأن CIDR جعل الطول يكتب مع كل شبكة.

لنفرض أن الشركة حصلت على الكتلة `10.20.0.0/23` لموقعها، واحتياجاتها كما في الجدول التالي:

| المجموعة                   | عدد الأجهزة الآن | أصغر طول يتسع لها | السبب                               |
| -------------------------- | ---------------- | ----------------- | ----------------------------------- |
| الموظفون Staff             | 100              | /25 (126)         | /26 فيها 62 فقط                     |
| الضيوف Guests              | 60               | /26 (62)          | تكفي بالكاد، وسنعود لهذا            |
| الكاميرات Cameras          | 25               | /27 (30)          | /28 فيها 14                         |
| السيرفرات Servers          | 12               | /28 (14)          | والبوابة تأخذ عنواناً منها          |
| الإدارة Management         | 10               | /28 (14)          | واجهات إدارة ال Switch ونقاط الوصول |
| رابط الجدار الناري FW link | 2                | /30 (2)           | أو /31 إذا دعمتها الأجهزة           |

والقاعدة في التوزيع أربع خطوات: رتب المجموعات من الأكبر إلى الأصغر، واختر لكل منها أصغر طول يتسع لأجهزتها مع عنواني الشبكة والبث، وابدأ كل شبكة عند حد يقبل حجمها، أي عند مضاعف لحجم كتلتها، ثم اترك الباقي في نهاية الكتلة متصلاً حتى تستطيع أن تقسمه لاحقاً. والسبب في البدء بالأكبر أن الشبكات الكبيرة تحتاج حدوداً كبيرة، فإذا وضعت `/30` في البداية ثم أردت `/25` فلن تبدأ عند `10.20.0.4` وإنما تقفز إلى `10.20.0.128` وتضيع ما بينهما. والصورة التالية تبين النتيجة بمقياس حقيقي:

![شريط أفقي يمثل الكتلة 10.20.0.0/23 من 10.20.0.0 إلى 10.20.1.255 بمقياس عدد العناوين: Staff برتقالي 128 عنواناً على 10.20.0.0/25، ثم Guests أزرق 64 عنواناً على 10.20.0.128/26، ثم Cameras بنفسجي على 10.20.0.192/27، ثم Servers أخضر على 10.20.0.224/28، ثم Mgmt داكن على 10.20.0.240/28، ثم FW link صغير جداً على 10.20.1.0/30، ثم مساحة رمادية متقطعة مكتوب عليها free for growth من 10.20.1.4 إلى 10.20.1.255. وفوق كل جزء رسم الجهاز واسم المجموعة. وفي الأسفل أربع خطوات مرقمة للتوزيع](https://arabroot.io/content/images/2026/10/subnets-cidr-04-vlsm-plan.webp)

كل مجموعة في أصغر شبكة تتسع لها، والباقي متصل في النهاية

والآن نتحقق من الخطة بأداة `ipcalc`، والإصدار 0.51 الموجود في Debian يقبل الخيار `-s` مع قائمة بعدد الأجهزة المطلوب لكل شبكة، فيوزعها بنفس القاعدة:

```bash
ipcalc -n 10.20.0.0/23 -s 100 60 25 12 10 2
```

والمخرج سوف يكون كما يلي (حذفنا تفاصيل الشبكات الأربع الوسطى لأنها بنفس الشكل):

```text
Address:   10.20.0.0            00001010.00010100.0000000 0.00000000
Netmask:   255.255.254.0 = 23   11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255            00000000.00000000.0000000 1.11111111
=>
Network:   10.20.0.0/23         00001010.00010100.0000000 0.00000000
HostMin:   10.20.0.1            00001010.00010100.0000000 0.00000001
HostMax:   10.20.1.254          00001010.00010100.0000000 1.11111110
Broadcast: 10.20.1.255          00001010.00010100.0000000 1.11111111
Hosts/Net: 510                   Class A, Private Internet

1. Requested size: 100 hosts
Netmask:   255.255.255.128 = 25 11111111.11111111.11111111.1 0000000
Network:   10.20.0.0/25         00001010.00010100.00000000.0 0000000
HostMin:   10.20.0.1            00001010.00010100.00000000.0 0000001
HostMax:   10.20.0.126          00001010.00010100.00000000.0 1111110
Broadcast: 10.20.0.127          00001010.00010100.00000000.0 1111111
Hosts/Net: 126                   Class A, Private Internet

6. Requested size: 2 hosts
Netmask:   255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Network:   10.20.1.0/30         00001010.00010100.00000001.000000 00
HostMin:   10.20.1.1            00001010.00010100.00000001.000000 01
HostMax:   10.20.1.2            00001010.00010100.00000001.000000 10
Broadcast: 10.20.1.3            00001010.00010100.00000001.000000 11
Hosts/Net: 2                     Class A, Private Internet

Needed size:  260 addresses.
Used network: 10.20.0.0/23
Unused:
10.20.1.4/30
10.20.1.8/29
10.20.1.16/28
10.20.1.32/27
10.20.1.64/26
10.20.1.128/25
```

في المخرج أعلاه لاحظ التالي:

- الأداة تكتب البتات وتضع مسافة عند حد القناع، فترى بعينك أين تنتهي الشبكة، وهذا أفضل ما فيها للتعلم.
- عبارة `Class A` بقية من الفئات القديمة لأن العنوان يبدأ بالبت `0`، ولا علاقة لها بطول الشبكة، و`Private Internet` تعني أنه من نطاقات RFC 1918.
- القائمة `Unused` هي الباقي مقسماً إلى أكبر كتل ممكنة على حدودها الصحيحة، وهذا هو المكان الذي تضع فيه أي شبكة جديدة لاحقاً.

والأفضل أن تكون الخطة نفسها كوداً يراجع ويحفظ في Git بدل جدول في ملف Excel، لذلك كتبنا نفس التوزيع بمكتبة [ipaddress](https://docs.python.org/3/library/ipaddress.html?ref=arabroot.io) التي تأتي مع Python، والمثال التالي يبين الملف `plan.py`:

```python
import ipaddress

block = ipaddress.ip_network("10.20.0.0/23")
needs = {"staff": 100, "guests": 60, "cameras": 25, "servers": 12, "mgmt": 10, "fw-link": 2}

free = [block]
plan = {}
for name, hosts in sorted(needs.items(), key=lambda kv: -kv[1]):
    prefix = 32 - (hosts + 2 - 1).bit_length()          # smallest block with room for hosts + network + broadcast
    for i, net in enumerate(free):
        if net.prefixlen <= prefix:
            sub = next(net.subnets(new_prefix=prefix))
            free[i:i + 1] = list(net.address_exclude(sub)) if net != sub else []
            free.sort()
            plan[name] = sub
            break

print(f"{'zone':8} {'network':15} {'gateway':11} {'last host':11} {'usable':>6} {'need':>5}")
for name, net in plan.items():
    hosts = list(net.hosts())
    print(f"{name:8} {str(net):15} {str(hosts[0]):11} {str(hosts[-1]):11} {len(hosts):>6} {needs[name]:>5}")

nets = list(plan.values())
overlaps = [(a, b) for i, a in enumerate(nets) for b in nets[i + 1:] if a.overlaps(b)]
print("overlaps:", overlaps or "none")
print("free:", ", ".join(map(str, ipaddress.collapse_addresses(free))))
```

والمخرج سوف يكون كما يلي:

```text
zone     network         gateway     last host   usable  need
staff    10.20.0.0/25    10.20.0.1   10.20.0.126    126   100
guests   10.20.0.128/26  10.20.0.129 10.20.0.190     62    60
cameras  10.20.0.192/27  10.20.0.193 10.20.0.222     30    25
servers  10.20.0.224/28  10.20.0.225 10.20.0.238     14    12
mgmt     10.20.0.240/28  10.20.0.241 10.20.0.254     14    10
fw-link  10.20.1.0/30    10.20.1.1   10.20.1.2        2     2
overlaps: none
free: 10.20.1.4/30, 10.20.1.8/29, 10.20.1.16/28, 10.20.1.32/27, 10.20.1.64/26, 10.20.1.128/25
```

في الإعداد أعلاه لاحظ التالي:

- السطر الذي يحسب `prefix` يأخذ عدد البتات اللازمة لعدد الأجهزة زائد اثنين، فمئة جهاز مع عنواني الشبكة والبث تحتاج 7 بتات، أي `/25`.
- `net.subnets(new_prefix=prefix)` تعطي الشبكات الفرعية على حدودها الصحيحة، و`address_exclude` تعيد الباقي كتلاً صحيحة أيضاً، فلا يمكن أن يخرج من البرنامج شبكة تبدأ في مكان خاطئ.
- اتبعنا عرفاً واحداً: البوابة Gateway أول عنوان قابل للاستخدام في كل شبكة، والأهم من العرف نفسه أن يكون واحداً في كل الشبكات حتى لا يبحث أحد عن البوابة.
- فحص التداخل Overlap في النهاية هو أهم سطر، فالشبكتان المتداخلتان تعملان أحياناً وتفشلان أحياناً، وهذا أسوأ أنواع الأعطال.

هل هذه الخطة جاهزة للإنتاج؟ ليس تماماً، والتفصيل فيما يلي: شبكة الضيوف تتسع لـ 62 جهازاً والحاجة اليوم 60، فأول فعالية في الشركة تملؤها، وكذلك السيرفرات. والقاعدة أن تخطط لما تتوقعه بعد سنتين أو ثلاث وليس لما عندك اليوم، فلو جعلت الضيوف `/25` والسيرفرات `/27` لبقيت الكتلة نفسها كافية. وقد يتساءل البعض: إذا كانت الشبكات الخاصة في `10.0.0.0/8` فيها أكثر من 16 مليون عنوان، فلماذا لا أعطي كل مجموعة `/24` وأرتاح؟ والإجابة أن هذا اختيار معقول جداً داخل شبكة خاصة لأنه أسهل في القراءة، وكثير من الشركات تفعله، لكن VLSM يبقى ضرورياً في ثلاث حالات: عندما تكون الكتلة محدودة فعلاً، مثل العناوين العامة أو ال VPC في السحابة الذي لا يتجاوز `/16`، وعندما تريد أن تجمع شبكات موقع كامل في مسار واحد كما في القسم التالي، وعندما تقسم الكتلة على عدة فروع أو بيئات.

## تجميع المسارات Route Summarization

التجميع Summarization، ويسمى أيضاً Supernetting أو Aggregation، هو العملية العكسية: عدة شبكات متجاورة تعلن كشبكة واحدة أقصر طولاً. ولنفرض أن لديك أربعة فروع، شبكة كل منها `/24` من `172.16.0.0` إلى `172.16.3.0`، والصورة التالية تبين كيف يصل إلى المركز مسار واحد بدل أربعة:

![أربعة أجهزة Router للفروع في اليمين بالشبكات 172.16.0.0/24 و172.16.1.0/24 و172.16.2.0/24 و172.16.3.0/24 متصلة بـ Regional router، ومنه سهم أخضر إلى Core router مكتوب عليه 172.16.0.0/22 وإعلان واحد بدل أربعة. وفي اليسار جدول أحمر فيه أربعة مسارات بلا تجميع، وجدول أخضر فيه مسار واحد 172.16.0.0/22. وفي الأسفل الجزء الثالث بالثنائي للأرقام 0 و1 و2 و3 و5 مع خط فاصل بعد أول ست بتات](https://arabroot.io/content/images/2026/10/subnets-cidr-05-summarisation.webp)

أربع شبكات متجاورة تبدأ على حد /22 تصبح مساراً واحداً

والسبب بالثنائي: الجزء الثالث في الشبكات الأربع هو `00000000` و`00000001` و`00000010` و`00000011`، وأول ست بتات منها متطابقة، فالبادئة المشتركة 16 + 6 = 22 بتاً، والشبكة المجمعة `172.16.0.0/22`. ويقول RFC 4632 إن التجميع هو الطريقة الوحيدة المعروفة لتقليل حالة التوجيه في الشبكات، وإن التوجيه على الإنترنت يعتمد على أطول تطابق Longest Match، أي إذا كان لدى ال Router مساران يغطيان الوجهة، `/22` و`/24` مثلاً، فإنه يختار الأطول لأنه الأدق، ولهذا يمكنك أن تعلن الكتلة المجمعة وتبقي استثناء أدق لشبكة واحدة عند الحاجة. ونتحقق من ذلك بنفس المكتبة:

```python
import ipaddress as ip
branches = [ip.ip_network(f"172.16.{i}.0/24") for i in range(4)]
print(list(ip.collapse_addresses(branches)))
print(list(ip.collapse_addresses(branches + [ip.ip_network("172.16.5.0/24")])))
```

والمخرج سوف يكون كما يلي:

```text
[IPv4Network('172.16.0.0/22')]
[IPv4Network('172.16.0.0/22'), IPv4Network('172.16.5.0/24')]
```

لاحظ أن الشبكة `172.16.5.0/24` بقيت وحدها، لأن 5 بالثنائي `00000101` تختلف في البت السادس، ولو أضفت `172.16.4.0/24` أيضاً لما دخلت الشبكتان الجديدتان في `/22`، وإنما تحتاجان `/23` مستقلة. لذلك عندما توزع الشبكات على الفروع أعط كل فرع كتلة على حد يقبل التجميع، كأن يأخذ كل فرع `/22` كاملة حتى لو استخدم منها `/24` واحدة اليوم.

## العناوين الخاصة ونطاق CGNAT والعناوين المحجوزة

شرحنا في [ما هو NAT؟](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%88-nat-%D8%B4%D8%B1%D8%AD-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/#private-addresses) النطاقات الثلاثة التي خصصها [RFC 1918](https://www.rfc-editor.org/rfc/rfc1918?ref=arabroot.io) للشبكات الخاصة: `10.0.0.0/8` و`172.16.0.0/12` و`192.168.0.0/16`، والنطاق المشترك `100.64.0.0/10` الذي خصصه [RFC 6598](https://www.rfc-editor.org/rfc/rfc6598?ref=arabroot.io) لمزودي الخدمة في [CGNAT](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%88-nat-%D8%B4%D8%B1%D8%AD-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/#cgnat)، ولن نكرر ذلك هنا. وما يهمنا في التخطيط ملاحظتان: الأولى أن `172.16.0.0/12` ينتهي عند `172.31.255.255`، فالعنوان `172.32.0.9` عنوان عام وليس خاصاً، والثانية أن `100.64.0.0/10` ليس خاصاً ولا عاماً، فلا تستخدمه في شبكتك الداخلية لأن المزود أو أداة مثل Tailscale قد تستخدمه. وهناك نطاقات محجوزة أخرى سوف تراها: `127.0.0.0/8` للجهاز نفسه Loopback، و`169.254.0.0/16` للعناوين المحلية التي يعطيها الجهاز لنفسه عندما لا يجد DHCP كما في [RFC 3927](https://www.rfc-editor.org/rfc/rfc3927?ref=arabroot.io)، ونطاقات التوثيق `192.0.2.0/24` و`198.51.100.0/24` و`203.0.113.0/24` في [RFC 5737](https://www.rfc-editor.org/rfc/rfc5737?ref=arabroot.io) المخصصة للأمثلة في المقالات والكتب، والقائمة الكاملة في [سجل IANA للعناوين الخاصة الغرض](https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml?ref=arabroot.io).

وعند اختيار نطاق لشركتك تجنب الأكثر استخداماً: `192.168.0.0/24` و`192.168.1.0/24` لأنهما في كل بيت، فإذا اتصل موظف بال VPN من بيته وشبكته نفس شبكة المكتب لن يعرف جهازه أين يرسل الحزم، وتجنب `172.17.0.0/16` وما بعده لأن Docker يأخذها لشبكاته كما شرحنا في [نفاد نطاقات العناوين](https://arabroot.io/articles/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-docker-%D9%88%D8%A3%D9%81%D8%B6%D9%84-%D8%A7%D9%84%D9%85%D9%85%D8%A7%D8%B1%D8%B3%D8%A7%D8%AA/#address-pools)، واختر شيئاً من وسط `10.0.0.0/8` مثل `10.20.0.0` في مثالنا، واكتب في سجل واحد أي كتلة لأي موقع.

## IPv6 باختصار: لماذا كل شبكة /64؟

في IPv6 تتغير طريقة التفكير: العنوان 128 بتاً، والسؤال لم يعد «كم جهازاً عندي؟» لأن الجواب دائماً أن الشبكة تتسع لأكثر مما تحتاج. ويحدد [RFC 4291](https://www.rfc-editor.org/rfc/rfc4291?ref=arabroot.io) أن معرف الواجهة Interface ID في أغلب العناوين طوله 64 بتاً، ويحتاج الإعداد التلقائي للعناوين SLAAC في [RFC 4862](https://www.rfc-editor.org/rfc/rfc4862?ref=arabroot.io) أن يكون مجموع طول البادئة ومعرف الواجهة 128 بتاً بالضبط، لذلك كل شبكة محلية في IPv6 طولها `/64`، والتقسيم يحدث في البتات بين ما يعطيك المزود و`/64`، والصورة التالية تبين ذلك:

![شريط من 128 بتاً بثلاثة أجزاء: برتقالي من 0 إلى 48 مكتوب فيه 2001:db8:abcd وتحته Global routing prefix /48 من مزود الخدمة، وبنفسجي من 48 إلى 64 مكتوب فيه :0012 وتحته Subnet ID 16 bits و65,536 شبكة /64، وأزرق من 64 إلى 128 مكتوب فيه ::1 وتحته Interface ID 64 bits. وقوس تحت أول 64 بتاً مكتوب عليه /64 = the network part of every LAN](https://arabroot.io/content/images/2026/10/subnets-cidr-06-ipv6-64.webp)

البتات بين /48 و/64 هي التي تقسم بها الموقع

فإذا أعطاك المزود `/48` فلديك 16 بتاً للشبكات الفرعية، أي 65,536 شبكة `/64`، وإذا أعطاك `/56` فلديك 256 شبكة. ويذكر [RFC 6177](https://www.rfc-editor.org/rfc/rfc6177?ref=arabroot.io) أن الموقع يجب أن يحصل على مساحة تكفي احتياجه لسنوات، أي على الأقل `/64` واحدة وفي أغلب الحالات أكثر بكثير، حتى لا يضطر إلى NAT في IPv6\. أما الحماية التي كان كثيرون يظنونها من NAT فقد ناقشناها في [IPv6: هل ما زلنا نحتاج NAT؟](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%88-nat-%D8%B4%D8%B1%D8%AD-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/#ipv6).

## الأدوات: ipcalc وsipcalc وPython

بعد أن تحسب بيدك عدة مرات استخدم الأداة في العمل اليومي، والسبب أن الخطأ في حساب واحد قد يكلفك ساعات من البحث عن عطل. وكل المخرجات التالية من Container بـ Debian 13 فيه [ipcalc](https://jodies.de/ipcalc?ref=arabroot.io) الإصدار 0.51 و[sipcalc](https://github.com/sii/sipcalc?ref=arabroot.io) الإصدار 1.1.6 وPython 3.13، وكلها في مستودع Debian ([ipcalc](https://packages.debian.org/trixie/ipcalc?ref=arabroot.io) و[sipcalc](https://packages.debian.org/trixie/sipcalc?ref=arabroot.io)):

```bash
docker run -d --name lab-seg-calc debian:13 sleep 3600
docker exec lab-seg-calc sh -c 'apt-get update -qq && apt-get install -y -qq ipcalc sipcalc python3'
docker exec -it lab-seg-calc bash
```

### ipcalc: البتات أمام عينك

```bash
ipcalc -n 192.168.10.77/26
```

والمخرج سوف يكون كما يلي:

```text
Address:   192.168.10.77        11000000.10101000.00001010.01 001101
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   192.168.10.64/26     11000000.10101000.00001010.01 000000
HostMin:   192.168.10.65        11000000.10101000.00001010.01 000001
HostMax:   192.168.10.126       11000000.10101000.00001010.01 111110
Broadcast: 192.168.10.127       11000000.10101000.00001010.01 111111
Hosts/Net: 62                    Class C, Private Internet
```

نفس النتيجة التي حسبناها بأيدينا، والسطر `Wildcard` هو عكس القناع، وتستخدمه أجهزة Cisco في قوائم التحكم ACL. والخيار `-n` يمنع الألوان حتى يكون المخرج نصاً عادياً.

### sipcalc: التفاصيل وIPv6

```bash
sipcalc 192.168.10.77/26
sipcalc 2001:db8:abcd:12::1/64
```

والمخرج سوف يكون كما يلي:

```text
-[ipv4 : 192.168.10.77/26] - 0

[CIDR]
Host address		- 192.168.10.77
Host address (decimal)	- 3232238157
Host address (hex)	- C0A80A4D
Network address		- 192.168.10.64
Network mask		- 255.255.255.192
Network mask (bits)	- 26
Network mask (hex)	- FFFFFFC0
Broadcast address	- 192.168.10.127
Cisco wildcard		- 0.0.0.63
Addresses in network	- 64
Network range		- 192.168.10.64 - 192.168.10.127
Usable range		- 192.168.10.65 - 192.168.10.126

-
-[ipv6 : 2001:db8:abcd:12::1/64] - 0

[IPV6 INFO]
Expanded Address	- 2001:0db8:abcd:0012:0000:0000:0000:0001
Compressed address	- 2001:db8:abcd:12::1
Subnet prefix (masked)	- 2001:db8:abcd:12:0:0:0:0/64
Address ID (masked)	- 0:0:0:0:0:0:0:1/64
Prefix address		- ffff:ffff:ffff:ffff:0:0:0:0
Prefix length		- 64
Address type		- Aggregatable Global Unicast Addresses
Network range		- 2001:0db8:abcd:0012:0000:0000:0000:0000 -
			  2001:0db8:abcd:0012:ffff:ffff:ffff:ffff

-
```

لاحظ السطر `Host address (decimal)`: العنوان كله رقم واحد هو 3232238157، وهذا ما قلناه في البداية، فالنقاط للقراءة فقط. وفي IPv6 يعرض العنوان مكتوباً كاملاً ومختصراً، وهذا مفيد عندما تقارن عنواناً في سجل بعنوان في إعداد.

### Python ipaddress: للفحص داخل السكربتات

المكتبة نفسها التي بنينا بها الخطة تجيب عن الأسئلة اليومية، والمثال التالي يبين الملف `checks.py`:

```python
import ipaddress as ip

# 1. which subnet does an address belong to?
print(ip.ip_interface("192.168.10.77/26").network)
print(ip.ip_address("10.20.0.255") in ip.ip_network("10.20.0.0/23"))

# 2. host bits set: the most common typo in configs
try:
    ip.ip_network("192.168.10.77/26")
except ValueError as e:
    print("ValueError:", e)
print(ip.ip_network("192.168.10.77/26", strict=False))

# 3. summarise four branch networks into one route
branches = [ip.ip_network(f"172.16.{i}.0/24") for i in range(4)]
print(list(ip.collapse_addresses(branches)))
print(list(ip.collapse_addresses(branches + [ip.ip_network("172.16.5.0/24")])))

# 4. private, shared (CGNAT) or public?
for a in ["10.1.2.3", "172.31.0.9", "172.32.0.9", "100.64.1.1", "8.8.8.8"]:
    x = ip.ip_address(a)
    print(f"{a:11} private={x.is_private!s:5} global={x.is_global}")

# 5. IPv6: a /48 holds 65536 subnets of /64
site = ip.ip_network("2001:db8:abcd::/48")
print(2 ** (64 - site.prefixlen), next(site.subnets(new_prefix=64)))
print(ip.ip_network("2001:db8:abcd:12::/64").num_addresses)
```

والمخرج سوف يكون كما يلي:

```text
192.168.10.64/26
True
ValueError: 192.168.10.77/26 has host bits set
192.168.10.64/26
[IPv4Network('172.16.0.0/22')]
[IPv4Network('172.16.0.0/22'), IPv4Network('172.16.5.0/24')]
10.1.2.3    private=True  global=False
172.31.0.9  private=True  global=False
172.32.0.9  private=False global=True
100.64.1.1  private=False global=False
8.8.8.8     private=False global=True
65536 2001:db8:abcd::/64
18446744073709551616
```

في المخرج أعلاه لاحظ التالي:

- `ip_network` ترفض `192.168.10.77/26` لأن بتات الجهاز ليست أصفاراً، أي أن هذا عنوان جهاز وليس عنوان شبكة، و`strict=False` تصححه إلى الشبكة، و`ip_interface` هي الصيغة الصحيحة لعنوان الجهاز مع طوله.
- `10.20.0.255` داخل `10.20.0.0/23` كما حسبنا بأيدينا.
- `100.64.1.1` ليس خاصاً ولا عاماً، وهذا بالضبط وضع نطاق CGNAT، و`172.32.0.9` عام رغم أنه يشبه الخاص.
- الشبكة `/64` وحدها فيها 18,446,744,073,709,551,616 عنواناً.

وبعد الانتهاء نحذف ال Container بالاسم:

```bash
docker rm -f lab-seg-calc
```

## أخطاء شائعة

- **عنوان جهاز في مكان عنوان شبكة**: كتابة `192.168.10.77/26` في قاعدة جدار ناري أو مسار أو `--subnet` في Docker، فبعض الأدوات ترفضه كما رأينا في Python، وبعضها يصححه بصمت، وبعضها يقبله كعنوان واحد، فاكتب دائماً عنوان الشبكة الصحيح.
- **قناع مختلف على جهازين في نفس الشبكة**: جهاز يظن أن الشبكة `/23` وآخر يظنها `/24`، فيكلم الأول الثاني مباشرة ويرسل الثاني رده إلى البوابة، وهذا هو [التمرين 8 في تمارين الشبكات](https://arabroot.io/articles/%D8%AA%D9%85%D8%A7%D8%B1%D9%8A%D9%86-kata-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA/#kata-network-8).
- **تداخل الشبكات Overlap**: شبكة المكتب نفس شبكة بيت الموظف أو الفرع الآخر أو شبكة Docker، فيعمل الاتصال من مكان ويفشل من آخر، والعلاج سجل واحد للكتل وفحص التداخل قبل إضافة أي شبكة.
- **اعتبار كل عنوان ينتهي بـ 0 أو 255 غير صالح**: هذا صحيح في `/24` فقط، أما في `/23` وما هو أكبر فهناك عناوين أجهزة صالحة تنتهي بهما.
- **نسيان عنواني الشبكة والبث**: `/27` فيها 32 عنواناً لكن 30 جهازاً فقط، والبوابة تأخذ واحداً منها أيضاً، وفي AWS تحجز [خمسة عناوين في كل Subnet](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html?ref=arabroot.io): عنوان الشبكة، وال Router، وال DNS، وعنوان للمستقبل، والبث.
- **شبكات على حدود خاطئة**: `10.20.0.100/26` ليست شبكة، لأن شبكات `/26` تبدأ عند 0 و64 و128 و192 فقط.
- **خطة بلا نمو**: أن تعطي كل مجموعة ما تحتاجه اليوم بالضبط، ثم تضطر بعد سنة إلى تغيير عناوين الكاميرات كلها، وتغيير العناوين Renumbering من أثقل الأعمال في الشبكات.
- **شبكة واحدة كبيرة لكل شيء**: `/16` للمكتب كله لأن «العناوين كثيرة»، فتخسر حدود البث والأمان التي ذكرناها، ويصبح الفصل لاحقاً مشروعاً كاملاً.

## تدريب عملي

1. احسب بيدك الشبكة والبث ومدى الأجهزة للعنوان `172.20.37.200/21`، ثم تحقق بـ `ipcalc`.
2. عدل `plan.py` حتى تكون شبكة الضيوف `/25` والسيرفرات `/27`، وانظر هل ما زالت الكتلة `/23` تكفي، وما الذي بقي فارغاً.
3. حل التمارين [1](https://arabroot.io/articles/%D8%AA%D9%85%D8%A7%D8%B1%D9%8A%D9%86-kata-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA/#kata-network-1) و[2](https://arabroot.io/articles/%D8%AA%D9%85%D8%A7%D8%B1%D9%8A%D9%86-kata-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA/#kata-network-2) و[7](https://arabroot.io/articles/%D8%AA%D9%85%D8%A7%D8%B1%D9%8A%D9%86-kata-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA/#kata-network-7) في تمارين Kata في الشبكات دون أدوات، ثم قارن بالحل.

## الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

- عنوان IPv4 رقم من 32 بتاً، والقناع أو طول البادئة يقسمه إلى جزء للشبكة وجزء للجهاز، وعدد العناوين 2 أس عدد بتات الجهاز.
- الشبكة الفرعية هي حد البث والتوجيه وقواعد الجدار الناري، لذلك نقسم الشبكة وليس لأجل الترقيم فقط.
- CIDR ألغى الفئات A وB وC منذ 1993، فكل شبكة تكتب بطولها، وهذا ما جعل VLSM والتجميع ممكنين.
- عنوان الشبكة هو AND بين العنوان والقناع، والبث هو نفس البتات مع جعل بتات الجهاز آحاداً، والاختصار السريع: حجم الكتلة 256 ناقص قيمة القناع في الجزء الذي فيه حده.
- في VLSM رتب من الأكبر إلى الأصغر، وابدأ كل شبكة على حدها، وخطط للنمو، واجعل الخطة كوداً يفحص التداخل.
- الشبكات المتجاورة على حد مشترك تجمع في مسار واحد، والتوجيه يختار أطول تطابق.
- في IPv6 كل شبكة محلية `/64`، والتقسيم في البتات بين ما يعطيك المزود و`/64`.

وفي المقال التالي نأخذ هذه الخطة نفسها ونبني بها مناطق معزولة فعلاً بشبكات VLAN وجدار ناري بأدوات مفتوحة المصدر:

[![](https://arabroot.io/content/images/2026/10/network-segmentation-cover-cover.webp)دليلتقسيم الشبكة Network Segmentation بال VLAN وال VPCلماذا تصل كاميرا مخترقة إلى قاعدة بياناتك، وكيف تمنع ذلك بتقسيم الشبكة إلى مناطق لا يمر بينها إلا ما تسمح به.](https://arabroot.io/articles/%D8%AA%D9%82%D8%B3%D9%8A%D9%85-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-network-segmentation-vlan-%D9%88-vpc/)[![](https://arabroot.io/content/images/2026/10/nat-explained-cover-cover.webp)دليلما هو NAT؟ شرح ترجمة العناوين وتوجيه المنافذلماذا تخرج كل أجهزة بيتك بعنوان عام واحد، وكيف يترجم ال Router العناوين، ولماذا يفشل توجيه المنافذ خلف CGNAT.](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%88-nat-%D8%B4%D8%B1%D8%AD-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/)[![](https://arabroot.io/content/images/2026/10/number-systems-cover-cover.webp)دليلالأنظمة العددية للمبرمجين: من Binary إلى Floating Pointلماذا يظهر القرص 465 بدل 500، ويصبح العداد سالباً فجأة، ولا يساوي 0.1 + 0.2 القيمة 0.3؟ الإجابة في طريقة تخزين الأرقام.](https://arabroot.io/articles/%D8%A7%D9%84%D8%A7%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%B9%D8%AF%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AB%D9%86%D8%A7%D8%A6%D9%8A-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/)[![](https://arabroot.io/content/images/2026/10/katas-network-cover-cover.webp)دليلتمارين Kata في الشبكات بثلاثة مستويات مع الحلولتمارين في الشبكات تحلها بيدك دون ذكاء اصطناعي، من حساب الشبكة الفرعية إلى الفرق بين 502 و504، وكل حل مجرب في مختبر Docker.](https://arabroot.io/articles/%D8%AA%D9%85%D8%A7%D8%B1%D9%8A%D9%86-kata-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA/)[![](https://arabroot.io/content/images/2026/10/docker-networking-cover-cover.webp)دليلشبكات Docker وأفضل الممارسات مع Docker Composeلماذا يبقى المنفذ الذي تنشره في Compose مفتوحاً للإنترنت رغم ufw، وكيف تصل التطبيقات إلى بعضها عبر شبكات Docker دون نشر منافذ.](https://arabroot.io/articles/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-docker-%D9%88%D8%A3%D9%81%D8%B6%D9%84-%D8%A7%D9%84%D9%85%D9%85%D8%A7%D8%B1%D8%B3%D8%A7%D8%AA/)

## سجل التحديثات

- أكتوبر 2026: كتابة المقال، ومراجعة RFC 791 وRFC 950 وRFC 1519 وRFC 4632 وRFC 1918 وRFC 6598 وRFC 3021 وRFC 4291 وRFC 4862 وRFC 6177، وتنفيذ الأمثلة على Debian 13 مع ipcalc 0.51 وsipcalc 1.1.6 وPython 3.13.5.