اذهب إلى المحتوى

الرفع من الأداء في شبكات Cisco بواسطة بروتوكول الشجرة الممتدة


محمد أحمد العيل

سنتعرّف خلال هذا الدرس على المشاكل المرتبطة بتكرار الاتصالات الذي يدل على وجود روابط إضافية بين المبدّلات. توجد مشكلات تتعلق بتكرار الروابط بين المبدّلات، وهو ما سنتعرّف عليه من خلال هذا الدرس والدروس الموالية، وسنتطرّق لكيفية إنشاء شبكة بدون حلقات تكرار (Loops) ممّا يساعد في التخلص من كل تلك المشكلات المرتبطة بشبكات المبدّلات التي توجد بينها روابط متعددة. سنتعلم في الأخير كيف نجعل بروتوكول الشجرة الممتدة (Spanning tree protocol) أكثر فاعلية وصلابة عبر التعريف ببروتوكول الشجرة الممتدة السريع (Rapid Spanning tree protocol) وكذلك بضبط إعدادات المبدّل الجذر (Root switch) والمبدّل الجذر الاحتياطي ( Backup root switch).

تقنيات الربط بين المبدّلات

يمكن نشر تقنيّات إيثرنت عدّة عند ربط الاتصال بين المبدّلات، وذلك بغرض توفير النطاق الترددي (Bandwidth) اللازم لربط الاتصال. لذا نستخدم عادة اتصال Fast Ethernet (سرعة تصل إلى 100 ميغابت للثانية) لربط الاتصال بين المستخدم النهائي والمبدّل. ثم نستخدم اتصالًا من نوع Gigabit Ethernet (سرعة تصل إلى 1 جيغابت للثانية) لربط المبدّل بالمبدّل المركزي الذي نسميه مبدّل التوزيعات (Distributions)، نظرًا لكون الكثير من اتصالات Fast Ethernet ستتجمّع على هذا الرابط الصاعد (Uplink). من المهم جدًّا التأكد من وجود نطاق ترددي كافٍ ليتناسب مع تأثير التجميع. يمكننا كذلك استخدام اتصال من نوع 10‎ Gigabit Ethernet ليكون العمود الفقري للشبكة الذي يربط المبدّلات المركزية في ما بينها، والذي يُجمّع الكثير من الاتصالات. يوجد خيار آخر يُعرَف بقناة إيثرنت (Etherchannel) ويقوم على مبدأ دمج روابط عدة محدودة الاتصال في رابط منطقي واحد ذي نطاق ترددي أعرض، وهو ما يسمح بالرفع من قدرة رابط الاتصال عبر توزيع الحمل (Load balancing) داخل رابط قناة إيثرنت وكذلك توفير روابط احتياطية لكون قناة إيثرنت توزّع الحمل بين الروابط المتاحة. إنْ حدث عطل في رابط عضو في قناة إيثرنت فإن آلية توزيع الحمل ستقسم البيانات الموجَّهة لذلك الرابط بين بقية الروابط في القناة. نستطيع تخمين عرض النطاق الترددي الذي نحتاجه لقناة إيثرنت بتجميع حركة البيانات المقدَّرة لكل رابط من القناة.

مخطّطات شبكة بروابط مكرّرة

نرغب عادة عندما نربط مبدّلات عدّة معًا في استخدام روابط متعدّدة لربط المبدّلات في ما بينها، وبالتالي إنشاء بنية تحتية تعتمد على التكرار، ممّا يحمي من مشكل نقطة الإخفاق الوحيدة (Single point of failure). إلا أن هذا التكرار يتسبّب في مشاكل تتعلّق بحلقات التغذية الراجعة (Feedback loops) على المبدّل، مثل عواصف البث الإذاعي (Broadcast storm) والنسخ المتعدد لإطارات إيثرنت وكذلك عدم استقرار قواعد البيانات الخاصة بعناوين MAC. في ما يلي مراجعة سريعة لكيفية تعامل المبدّل مع إطارات البث الإذاعي.

01-broadcast-frames.jpg

عندما يتلقّى المبدّل إطار بث إذاعي بعنوان الوجهة FFFF.FFFF.FFFF فلن يجده لديه في قاعدة بيانات عناوين MAC. نتيجة لعدم وجود العنوان الوجهة في قاعدة البيانات يُتعامل مع إطار البث الإذاعي كما يُتعامل مع عنوان MAC غير معروف وبالتالي يرسل المبدّل الإطار إلى المنافذ جميعًا ما عدا المنفذ مصدر الإطار. تُعرَف تلك العملية بإغراق المنافذ (Ports flooding).

عواصف البث الإذاعي

02-broadcast-storms.jpg

عندما يرسل المضيف X بثًّا إذاعيًّا إلى المبدّل A، فإن المبدّل A يعيد إرسال إطار البث الإذاعي إلى المنافذ كلها ما عدا المصدر، وينتقل الإطار إلى المبدّل B. يعيد المبدّل B الكرّة ويرسل إطار البث الإذاعي إلى المبدّل A الذي يعيدها بدوره إلى الموجّه B، ممّا يتسبّب في حلقة بث إذاعي لا نهاية لها. تحدث حلقات البث الإذاعي تلك كثيرًا وتسمّى بعواصف البث الإذاعي (Broadcast storms).

نسخ متعدّدة من إطار البيانات

يرسل المضيف X في المثال أدناه إطار بيانات إلى الموجّه Y الذي يتلقّى الإطار مباشرةً.

03-multiple-frame-copies.jpg

إلا أن إطار البيانات يُرسَل أيضًا إلى المبدّل A الذي لا يتعرَّف على عنوان MAC الخاص بالموجّه Y فيغرق المنافذ جميعًا – ما عدا المنفذ المصدر – بإطار البيانات. يعيد المبدّل B إرسال الإطار إلى جميع المنافذ المتصلة، فيحصل الموجّه Y على نسخة أخرى من إطار البيانات نفسه. يجب على المستقبل، أي الموجِّه A في المثال، التحقق جيّدًا من الرزم للتأكد من أنه لا يعالج إطار البيانات نفسه.

عدم الاستقرار في قاعدة بيانات عناوين MAC

يرسل المضيف X في المثال أدناه إطار بيانات ضمن بث أحادي إلى الموجِّه Y في الوقت الذي لم يتعرَّف فيه بعد أي من المبدِّلين على عنوان MAC الخاص بالموجِّه.

04-mac-database-instability.jpg

سيعدّ كل من المبدّلين أن المضيف X يرتبط بالمنفذ 1، وبما أن عنوان MAC الخاص بالموجّه لا يوجد حتى اللحظة في قاعدة بيانات العناوين لدى المبدّلين فسيغرق كل واحد منهما المنافذ المتصلة، ما عدا المنفذ المصدر، أي في هذه الحالة المنفذ رقم 2 على كل مبدّل. سيتلقى بعدها كل من المبدّلين الإطار على المنفذ 2، ويظن أن المضيف X أصبح مرتبطًا بالمنفذ 2. بالمختصر، يعود السبب في انعدام الاستقرار في قاعدة بيانات عناوين MAC إلى أنّ المبدّل لا يعرف كيف يفرّق بين إطار بيانات وصله مباشرة وإطار بيانات وصله بطريقة غير مباشرة عن طريق مبدّل ثان. من هنا يأتي الخلط.

التخلص من حلقات الإرسال عن طريق بروتوكول الشجرة الممتدة

يحب مديرو الأنظمة فكرة مخطّطات الشبكة التي تحوي التكرار في روابط الاتصال، إلا أنّ المبدّلات لا تتعامل جيّدًا مع هذا الأمر لأنها تتسبب في الكثير من حلقات التغذية الراجعة في المبدّل. يكمن الحل في الإتيان بمخطط شبكة بروابط مكرّرة لا تحوي حلقات لا متناهية من التغذية الراجعة، وذلك عن طريق التأكد من تنشيط رابط واحد فقط بين المبدّلات. يُعطَّل الرابط الإضافي بحظر منفذ ظرفيًّا ممّا يكسر الحلقة بين المبدّلات. طُوِّر المعيار IEEE 802.1d ليوحّد طريقة عمل بروتوكول الشجرة الممتدة (STP اختصارًا) ليتأكّد من عدم وجود حلقات لا متناهية ضمن شبكة المبدّلات.

كيف يعمل بروتوكول STP

الفكرة الأساسية التي يعمل بروتوكول الشجرة الممتدة على تنفيذها هي تحويل الشبكة إلى شكل نجمي لا توجد فيه حلقات تكرار بين المبدّلات. يتبع البروتوكول الخطوات التالية للوصول إلى الهدف المنشود :

  • يحدّد البروتوكول مبدّلًا محوريًّا (مركزيًّا) من بين المبدّلات،
  • تبحث بقية المبدّلات (غير المركزية) عن الطريق الأفضل للوصول إلى المبدّل المركزي،
  • تُعطَّل ظرفيًّا جميع الطرق غير الفضلى للوصول إلى المبدّل المركزي، ليتحول مخطَّط الشبكة إلى الشكل النجمي (مركز ينطلق منه شعاع إلى كل طرف).

05-spanning-tree-operation.jpg

لا يمكن وجود أكثر من جسر جذري (مبدّل) (Root bridge) ضمن نطاق بث إذاعي في بيئة تعتمد على بروتوكول الشجرة الممتدة. يشبه الأمر أن يكون لديك مبدّل مركزي واحد في شبكة نجمية. يوجد على كل مبدّل غير جذري (Non-root bridge) منفذ جذري واحد فقط. يعثر الجسر غير الجذري على الطريق الأفضل نحو الجذر، ويكون المنفذ الذي يؤدّي لهذا الطريق هو المنفذ الجذري. تُعطَّل كل المنافذ الأخرى المؤدية للجذر ولا تُستخدَم.

اختيار المبدّل الذي يؤدي دور الجسر الجذر

يعلن كل مبدّل لبقية المبدّلات في الشبكة دوريًّا (كل ثانيتين) عن وحدة بيانات بروتوكول الجسر ( Bridge Protocol Data Unit أو BPDU اختصارا). توجد في وحدة البيانات المعلن عنها الكثير من الوسائط إلا أن أهمها بالنسبة لاختيار الجسر الجذري هما معرّف الجسر (Bridge ID) والجسر الجذري. الجسر الجذري هو عنوان MAC الخاص بالمبدّل، ومعرّف الجسر هو الأولوية الحالية للمبدّل. تأخذ الأولوية على جميع المبدّلات القيمة المبدئية 32768، ويعود السبب في ذلك إلى أن طول حقل الأولوية يبلغ 16 بتًّا وهو ما يجعل القيمة القصوى للحقل هي 65536. العدد الوسط لمجال القيم الذي يمكن أن تأخذها الأولوية هو إذن 32768.

عند البدء في إرسال إعلانات BPDU المذكورة أعلاه، يعلن كل مبدّل عن نفسه بوصفه الجسر الجذري. يبدأ بعدها كل مبدّل بالتعرف على الشبكة وعلى المبدّلات الأخرى ويُختار المبدّل الذي سيكون الجسر الجذري. يعتمد بروتوكول الشجرة الممتدة المبدّل الذي لديه أدنى قيمة في حقل الأولوية أو الذي لديه عنوان MAC الأصغر. إن كان لمبدّل أولوية أصغر فسيُعتمَد بغض النظر عن صغر عنوان MAC الخاص به أو كبره.

المنفذ الجذر

الخطوة الموالية لاختيار المبدّل الذي سيؤدي دور الجسر الجذري هي أن يختار كل جسر غير جذري المسار الأفضل نحو الجذر. فلنأخذ المثال البسيط التالي.

06-root-port.jpg

فلنفترض وجود رابطين بين المبدّل غير الجذر والمبدّل الجذر (كما في يسار الصورة) : رابط بسرعة 100 ميغابت للثانية والثاني بسرعة 10 ميغابت للثانية، وهو ما يعني أن أسرع مسار للوصول إلى الجسر الجذر هو الرابط ذو 100 ميغابت للثانية. وبالتالي سيختار المبدّل غير الجذر ذلك الرابط ليكون المنفذ الجذر (Root port)، أي المسار الأفضل إلى الجذر. في المثال على يمين الصورة يوجد رابط مباشر بسرعة 100 ميغابت للثانية بين المبدّلين، ورابط متعدّد المسارات والنطاقات الترددية نحو الجذر. لا يمكننا في هذه الحالة الجمع بين النطاقات الترددية للحصول على نطاق ترددي أعرض (110 في المثال)، لأن أحد الرابطين يوجد بعد الآخر.

 

لتسهيل عملية قياس سرعة المسارات يلجأ بروتوكول الشجرة الممتدة إلى فكرة أسهل من النطاقات الترددية التي يصعب تطبيق عمليات بسيطة مثل الجمع عليها، نظرًا لارتباطها بموقع المبدّل. تقوم الفكرة على تحويل النطاق الترددي إلى تكلفة يمكن جمعها ببساطة. لذا نستخدم جدول التحويل التالي.

07-stp-path-cost.jpg

لم يأخذ الجدول الأصلي الذي اقترحه معهد IEEE نطاقات ترددية تتجاوز 1 جيغا، لذا كانت تكلفة الروابط التي تتجاوز 1 جيغا ثابتة عند 1، إلا أن المعهد أعاد مراجعة الجدول ليأخذ السرعات العالية في الحسبان (العمود الموجود في وسط الجدول).

اختيار المنفذ الجذر في بروتوكول الشجرة الممتدة

قلنا إذن إن البروتوكول يستخدم جدول تكاليف يحوّل النطاق الترددي للرابط إلى تكلفة يمكن للمبدّلات غير الجذر استخدامها للعثور على المسار الأقل تكلفة نحو الجذر.

08-root-port-selection.jpg

إن نظرنا في المثال المُوضَّح في الصورة أعلاه نجد أن المبدّل X لديه مساران صالحان للاستخدام نحو الجذر Z. يمكن استخدام المنفذ 1 أو المنفذ 2 عبر المبدّل Y. بتحويل النطاقات الترددية إلى تكاليف نجد أن المبدّل X لو استخدم المسار ذا المنفذ رقم 1 فستكون تكلفة الوصول إلى الجذر تساوي 19. أما إذا استخدم المبدّل X المسار الذي يمر عبر المبدّل Y فسيتطلّب ذلك المرور على رابط ذي تكلفة 100 متبوعًا برابط آخر تكلفته 19، أي أن المجموع يساوي 119. بالتالي سيختار المبدّل X المسار ذا التكلفة الأقل للمرور إلى الجذر. أي أن المنفذ 1 سيكون هو المنفذ الجذر.

اختار بروتوكول الشجرة الممتدة، عبر استخدام BPDU، المبدّل Z ليكون الجسر الجذر. واعتمد على فكرة تحويل النطاقات الترددية إلى تكاليف لتحديد المسارات الأقل تكلفة بين كل واحد من المبدّلين X وY، ووقع الاختيار بالتالي على المنفذ رقم 1 بالنسبة لكل من المبدّلين ليكون المنفذ الجذر. ممّا يعني أن الرابط بين المبدّلين X وY عبر المنفذ 2 على كل من المبدّليْن ليس ضمن المسار الأفضل ويجب بالتالي تعطيله. يمكن ملاحظة أنه يكفي تعطيل أحد المنفذيْن على طرفيْ الرابط لتعطيله، وبالتالي يُطرَح السؤال أيهما نعطّل، المنفذ 2 على المبدّل X أو المنفذ 2 على المبدّل Y؟ توازن المبدّلات، عند تحديد أي منفذ على رابط ليس ضمن المسار الأفضل، بين تكلفة الوصول للجذر وتعطّل منفذ المسار ذا التكلفة الأكبر. يتساوى المبدّلان في المثال أعلاه في تكلفة الوصول للجذر، وفي هذه الحالة يختار البروتوكول المنفذ الذي لديه معرّف جسر (عنوان MAC) أكبر. أي أن المبدّل Y هو ما سيقع عليه الخيار، وبالتالي يُعدَّل المنفذ رقم 2 على المبدّل Y.

لو وُجد رابط يصل بين منفذين من المبدّل نفسه فإن البروتوكول سيختار المنفذ ذا الرقم الأكبر.

آلية PortFast للتفريق بين المنافذ

يبدأ بروتوكول الشجرة الممتدة في كل مرة يوصَل فيها منفذ مبدّل بجهاز على الشبكة ويُفعَّل، يبدأ عمليات تعرّف واستماع يتأكّد من خلالها من عدم وجود حلقة لا متناهية في الشبكة، ويتعرَّف على عنوان MAC الخاص بالمبدّل لإعادة توجيه البيانات. بروتوكول الشجرة الممتدة ساذج ويتحقّق من أي منفذ متصل ومفعَّل. يستغرق البروتوكول 30 ثانية بعد توصيل جهاز مستخدم نهائي بالمبدّل في انتظار بيانات BPDU على المنفذ ولمعرفة عنوان MAC المتصل بالمنفذ قبل أن يُعلّمه على أساس أنه يمكن إعادة توجيه البيانات إليه. يتسبّب هذا الأمر بمشاكل لبعض تطبيقات المستخدمين التي تحتاج للاتصال بالشبكة في أقل من 30 ثانية. كان تطبيق Novell مثالًا شائعًا على تلك التطبيقات، إذ يحتاج للاتصال بالشبكة في أقل من 15 ثانية، وهو ما جعل بروتوكول الشبكة الممتدة يتسبّب في الكثير من المشاكل لمستخدمي تطبيقات Novell في شبكات المبدّلات. أتت Cisco بفكرة PortFast للتغلب على مشكل التأخر في الاتصال بسبب بروتوكول الشجرة الممتدة، وأصبح بالإمكان ضبط إعدادات المنافذ يدويًّا للذهاب مباشرة إلى وضع إعادة التوجيه، وتجاوز مرحلتي الاستماع والتعرف على العنوان.

09-spanning-tree-portfast.jpg

يمكن تفعيل خاصية PortFast بالذهاب مباشرة إلى بطاقة الشبكة المخصوصة واستخدام الأمر spanning-tree portfast، كما يمكن تنفيذ الأمر spanning-tree portfast default في وضع الضبط العام لتفعيل الخاصية على جميع المنافذ غير الجذعية. نستخدم الأمر show run interface الذي يمكّن من عرض تفاصيل إعدادات بطاقة الشبكة.

إيجابيات قناة إيثرنت

يعتمد بروتوكول الشبكة الممتدة للتأكد من خلو الشبكة من حلقات لا متناهية على التأكد من وجود رابط نشط واحد فقط بين المبدّلات، ومن مرور المبدّلات جميعًا على الجذر. لذا، إنْ أضفت روابط فيزيائية جديدة بين المبدّلات فسيعطّل البروتوكول تلك الروابط بكل بساطة ولن تُستخدَم. لكن باستخدام قناة إيثرنت يمكن تجميع أو تحزيم كل تلك الروابط الفيزيائية ضمن اتصال منطقي واحد، وهو ما يمكّن من مخادعة بروتوكول الشجرة الممتدة وجعله يتعامل مع كل تلك الروابط كما يتعامل مع اتصال واحد، وبالتالي لا يعطّل تلك الروابط الإضافية. بتفعيل الروابط الإضافية يمكننا عن طريق قناة إيثرنت إنشاء اتصال فائق السرعة بين المبدّلات، وتوزيع حمل حركة البيانات بين الروابط المتعدّدة. تتيح قناة إيثرنت كذلك مزايا التكرار لأن آلية عمل قناة إيثرنت ستوزّع البيانات بين الروابط المتوفرة في حال تعطل أحدها لأي سبب كان.

شجرة ممتدة لكل شبكة محلية افتراضية

نحتاج لاستيعاب مفهوم "الشجرة الممتدة لكل شبكة محلية افتراضية" (Per VLAN spanning tree،‏ PVST اختصارًا) قبل أن نشرح مفهوم PVST‎‎‎+‎. طُوّر بروتوكول الشجرة الممتدة لإنشاء شبكات مبدّلات فيزيائية خالية من حلقات التكرار غير المتناهية، في حين أن شبكات VLAN مفهوم منطقي وليس فيزيائيّا. لذا يمكن التساؤل كيف يعمل بروتوكول الشبكة الممتدة ضمن بيئة محلية ذات شبكات افتراضية؟ تختلف الإجابة حسب طريقة وسم وحدات البيانات BPDU في بروتوكول التوصيل بالجذع. في بيئة تقوم على بروتوكول ISL يكون لكل وحدة بيانات وسم VLAN خاص بها، ولا ترى شبكة VLAN سوى وحدات البيانات الخاصة بها. بما أن كل شبكة VLAN ترى بيئة الشبكة من منظور مختلف فإن كل شبكة VLAN ستُطبّق بروتوكول الشجرة الممتدة على شبكتها الخاصة. تُسمَّى تلك الآلية التي تجعل كل شبكة VLAN تتوفر على شجرتها الممتدة الخاصة في بيئة تعتمد على بروتوكول ISL للتوصيل بالجذع بالشجرة الممتدة لكل شبكة محلية افتراضية PVST. على الجانب الآخر، يعتمد معيار 802.1Q على شبكة VLAN الأصلية لإرسال وحدات البيانات BPDU. بالتالي يمكن لكل شبكة VLAN رؤية وحدات البيانات بغض النظر عما إذا كانت موجَّهة لها أم لا، وهو ما ينتج عنه شجرة ممتدة واحدة لكل الشبكة المحلية بما فيها من شبكات افتراضية. تُسمَّى تلك الآلية ببروتوكول الشجرة الممتدة المشتركة Common spanning tree protocol ‏(CST).

آلية PVST المزيدة (‎PVST‎‎‎+‎)

يظهر من النقاش في الفقرة الماضية أن فكرة PVST (الشجرة الممتدة لكل شبكة محلية افتراضية) حل أفضل، لكنّه مُطبَّق فقط في بروتوكول ISL الاحتكاري للتوصيل بالجذع الخاص بشركة Cisco، في حين يُطبّق المعيار IEEE 802.1Q بروتوكول الشجرة الممتدة المشتركة. آلية PVST المزيدة هي إضافة لآلية PVST المعيارية تسمح بعمل كل من بروتوكول الشجرة الممتدة المشتركة (CST) وبروتوكول الشجرة الممتدة لكل شبكة محلية افتراضية (PVST‎) معًا على مبدّلات Cisco، مع دعم المعيار IEEE 802.1Q.

10-per-vlan-spanning-tree-plus.jpg

تُستخدَم وحدات BPDU موسومة بشبكات VLAN (كما هي الحال في بروتوكول PVST) عند التخاطب بين مبدّلات Cisco وبالتالي الرفع من الأداء، أما عند التخاطب مع مبدّلات من شركة أخرى فيُستخدَم بروتوكول CST للحفاظ على التوافقية.

بروتوكول الشجرة الممتدة السريع (المعيار IEEE 802.1w)

يستغرق بروتكول الشجرة الممتدة في إصداره المستخدَم في المعيار IEEE 802.1d الذي هو التعريف الموحَّد الأصلي للبروتوكول حوالي 50 ثانية لاختيار منفذ جذر جديد وبدء استخدامه في حال عطب في المنفذ الجذر الأصلي. طُوٍّر المعيار IEEE 802.1w لتحسين أداء بروتوكول الشبكة الممتدة. من التحسينات المُدخَلة في البروتوكول تقليل مدة تجاوز العطب (Failover) والانتقال إلى منفذ جذر جديد، لأن عملية اختيار المنفذ الجذر أصبحت تتضمَّن اختيار منفذ جذر بديل، إلى جانب المنفذ الجذر الأساسي. لذا يتحول المبدّل تلقائيًّا إلى المنفذ البديل المعروف مسبقًا في حالة حدوث عطب على المنفذ الجذر الأصلي، وبالتالي التقليل بقدر كبير في مدة تجاوز العطب الأصلية (50 ثانية). توجد تحسينات أخرى في المعيار IEEE 802.1w مثل تبني فكرة PortFast من Cisco وبالتالي التعرف على المستخدم النهائي مباشرة ومنح المنفذ القدرة على إعادة توجيه الحزم بسرعة دون الحاجة لاستغراق 30 ثانية في مرحلة التحقق ضمن بروتوكول الشبكة الممتدة.

أوامر تفعيل PVRST‎

يمكن تفعيل بروتوكول PVRST ‏(Per-VLAN rapid spanning tree، شجرة ممتدة السريعة لكل شبكة VLAN) على مبدّلات Cisco بالذهاب إلى وضع الضبط العام وتنفيذ الأمر spanning-tree mode rapid–pvst. نستخدم أحد الأمرين show spanning-tree vlan أو debug spanning-tree pvst+ للتحقق من عمل البروتوكول.

ترجمة – وبتصرّف – للمقال Improving Performance with Spanning-Tree


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...