المحتوى عن 'switch'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 10 نتائج

  1. بعد التعرُّف على طريقة التواصل بين الأجهزة في الشبكة في الدرس السابق، سنكمل في هذا الدرس موضوع “أساسيات الشبكات”؛ سنناقش العناصر المستخدمة في إنشاء شبكة محليَّة ونتعرف على مخططاتها المستخدمة. يجب عليك معرفة المكونات الشبكيَّة ووظائفها كي تتمكن من إنشاء شبكة محليَّة تخدم الغرض الذي أنشأتها لأجله. المكونات الاعتيادية هي: الحواسيب الشخصيَّة التي تمثل النهايات الشبكيَّة، والخواديم، والأجهزة التي توفر قابلية الاتصال في الشبكة مثل الموزِّعات Hubs، والمبدِّلات Switches، والموجِّهات Routers؛ لدينا أيضًا البطاقات الشبكيَّة والأكبال التي تشكل جزءًا من الشبكة المحليَّة. بطاقة الشبكة لكي يتمكن الحاسوب من الاتصال بالشبكة يجب أن يمتلك “بطاقة شبكة” NIC‏ (Network Interface Card)؛ توضع هذه البطاقة ضمن شقوق التوسعة أو تكون مدمجةً مع اللوحة الأم غالبًا ويتصل كبل الشبكة بها، وتمتلك كلُّ بطاقة عنوان MAC مميزا. مهمَّة بطاقة الشبكة هي تحضير البيانات (رزم البيانات أو الإطارات) أثناء إرسالها أو استلامها، والتحكم بتدفق البيانات بين الحاسوب والشبكة. تعمل بطاقة الشبكة ضمن الطبقة الفيزيائية في نموذج OSI والتي ترسل وتستقبل البيانات على شكل بتات bits عبر الشبكة. الموزِّع يعتبر الموزِّع من أبسط الأجهزة المستخدمة في ربط الشبكات ويُستخدم في إنشاء الشبكات الصغيرة. توصل الحواسيب عبر الأكبال إلى الموزع الذي يعمل على استلام الإشارة من أحد الحواسيب ثمَّ يعيد إرسالها إلى جميع منافذه، أي يستلم الموزع البيانات من أحد الحواسيب ثمَّ يرسلها إلى جميع الحواسيب المتصلة؛ يقبل الحاسوب الوجهة تلك البيانات التي تحمل عنوانه بينما تهملها الحواسيب الأخرى. هذه الطريقة غير فعالة لأنَّ البيانات تُرسل غالبًا إلى حاسوب واحد وعملية إعادة توجيهها إلى جميع الحواسيب تسبب بطئًا في الشبكة لذا تحولت الأنظار نحو المبدِّل. المبدِّل نشرت الصورة برخصة المشاع الإبداعي BY-SA لصاحبها Geek2003. يشبه المبدِّل الموزِّع كثيرًا إلا أنَّه يحمل مزيدًا من المزايا؛ لا يرسل المبدِّل البيانات إلى جميع الحواسيب بل يستطيع قراءة العنوان الفيزيائي MAC للرسائل التي تصله ثمَّ يقارنها مع عناوين الحواسيب المتصلة بمنافذه ويرسلها إلى وجهتها مباشرةً، وبذلك تقل التصادمات في الشبكة وتصبح أسرع؛ أي أنَّ الموزع يعمل ضمن الطبقة الثانية في نموذج OSI. يُستخدم المبدِّل كثيرًا في إنشاء الشبكات وهو أغلى ثمنًا من الموزِّع ولكنَّه أفضل أداءً إذ يعمل على زيادة السرعة في الشبكة. الجسر يشبه عمل الجسر Bridge المبدِّل إلا أنَّ وظيفته هي ربط شبكتين مع بعضهما أو تجزئة شبكة كبيرة إلى جزأين لتخفيف التصادمات فيها وزيادة أدائها. عندما يريد أحد الأجهزة من الشبكة الأولى الاتصال مع حاسوب من الشبكة الثانية، يسمح الجسر بمرور تلك البيانات عبره لأنَّه يعرف عناوين MAC لكامل الحواسيب المتصلة بالشبكة؛ أمَّا غير ذلك مثل اتصال جهاز مع آخر ضمن الشبكة نفسها فلا يسمح للإشارات بالعبور. الموجِّه يعمل الموجه على وصل الشبكات المحليَّة المختلفة مع بعضها وتوجيه رزم البيانات عبرها، فإن أردنا توصيل الشبكة المحلِّية إلى الإنترنت أو أردنا مشاركة الإنترنت مع مجموعةٍ من الحواسيب أو توصيل شبكات عدَّة مع بعضها فإننا نستخدم الموجِّه. تستطيع الموجهات تمييز العنوان IP للشبكات والحواسيب والرزم المرسلة، أي أنَّها تعمل ضمن الطبقة الثالثة في نموذج OSI، وتخزِّن تلك العناوين ضمن جدول يدعى “جدول التوجيه” مع تبيان عنوان الطريق أو الجهاز التالي الذي سيفضي إلى تلك الشبكة أو الحاسوب. عندما يستلم الموجِّه رزم البيانات فإنَّه يزيل تغليفها (راجع درس مدخل إلى شبكات الحواسيب) ويقرأ عنوان الجهاز الوجهة ثمَّ يقارنه مع العناوين الموجودة في جدول التوجيه ويختار أفضل طريق لإيصال الرزم نحو وجهتها ثمَّ يعيد تغليف الرزمة مع وضع عنوان المبدِّل أو الموجِّه التالي وهكذا تتكرر الخطوات حتى تصل الرزم إلى المبدِّل الذي يرسلها بدوره إلى وجهتها. توضح الصورة عملية إرسال البيانات من أحد الحواسيب المتواجد ضمن الشبكة الأولى إلى حاسوب ضمن الشبكة الثانية وقد اختار الموجَّه الطريق الأقصر الذي يمر عبر الموجِّه الثاني مع وجود طريق آخر يمر عبر الموجِّه الثالث. تتضمن بعض الموجهات مبدِّلًا أيضًا وبذلك يمكن استخدامه لأداء وظيفتين في الوقت ذاته ويمكن الاستغناء به عن شراء مبدِّل وموجِّه منفصلين؛ نستخدمه إن كانت الشبكة التي نريد إنشاءها لشركة صغيرة أو ضمن المنزل؛ وقد يدمج أيضًا مع الموجِّه نقطة وصول لاسلكية، ويعتمد اختياره على طبيعة المكان والسرعة والكلفة. نقطة الوصول اللاسلكيَّة نشرت الصورة برخصة المشاع الإبداعي BY-SA لصاحبها Macic7. تعمل نقطة الوصول اللاسلكيَّة Wireless access point، وتدعى اختصارًا WAP، على وصل الأجهزة اللاسلكيَّة مثل الهواتف المحمولة أو الحواسيب المحمولة أو حتى الحواسيب المكتبية التي تحوي بطاقة شبكةٍ لاسلكيَّة إلى شبكة سلكيَّة؛ تشبه في عملها المبدِّل ولكن دون وجود أكبال تربط الأجهزة، وترتبط غالبًا بموجِّه عبر كبل. تُستخدم بكثرة في الفنادق والمطارات والمدارس والشركات …إلخ. وأحيانًا تُدمج ضمن الموجِّه. أكبال التوصيل إنَّ أكبال التوصيل هي إحدى مكونات الشبكة المهمَّة التي تُستخدم للربط بين مختلف عناصرها؛ تنتقل البيانات والإشارات من جهاز إلى آخر بشكل بتات (0 و 1) إذ تعمل الأكبال ضمن الطبقة الأولى في نموذج OSI. توجد ثلاثة أنواع رئيسية للأكبال وهي الكبل المحوري Coaxial cable، والكبل المجدول Twisted pair cable، وكبل الليف الضوئي Optical fiber cable. الكبل المحوري نشرت الصورة برخصة المشاع الإبداعي BY-SA لصاحبها Apolkhanov. يتألف الكبل المحوري من ناقل داخلي محاط بعازل أنبوبي ثمَّ يلي طبقة العزل ناقل آخر يحيط بها، ويُغلَّف الكبل بطبقة من البلاستيك قد تحوي طبقةً عازلة معها. ينقل هذا الكبل الإشارات الإلكترومغناطيسية منخفضة التردد؛ وهو شائع الاستخدام في التلفاز، والراديو، والصوت، والشبكات؛ واستُخدم في مجال الشبكات المحليَّة قديمًا في ثمانينات القرن الماضي وله نوعان هما: النوع الثخين والنوع الرفيع إلى أن استبدل به الكبل المجدول. الكبل المجدول هو كبل يتألف من أربعة أزواج من الأسلاك أي ثمانية أسلاك نحاسية مغطاة بمادة عازلة، وتحاط جميعها بغلاف خارجي؛ الهدف من جدل الأسلاك في ثنائيات هو التقليل من التشويش الإلكترومغناطيسي. أول ما استخدم هذا الكبل في الشبكات كان بسرعة 10 Mb/s والذي يعرف بالتصنيف 3 (cat3 أو category 3) ثمَّ تلته إصدارات محسَّنة تختلف عن بعضها بنوع العزل وغيرها من الأمور ومنها cat5 و cat5e و cat6 التي تصل سرعتها إلى 100 Mb/s وحتى cat8.2 التي تصل سرعته إلى 40 Gb/s. يوجد للكبل المجدول نوعان رئيسيان وهما: الكبل المجدول غير المعزول Unshielded twisted-pair والمعروف باسم UTP، والكبل المجدول المعزول Shielded twisted-pair والمعروف باسم STP؛ يُستخدم الكبل المجدول غير المعزول بكثرة في شبكات إيثرنت، والهواتف الأرضية لرخص ثمنه عن بقية الأنواع، ومرونته، وأدائه الجيد؛ أمَّا الكبل المجدول المعزول فيتميز بجودة نقل الإشارات ومنع التشويش الإلكترومغناطيسي، وله أنواع متعدِّدة تختلف بطريقة العزل إذ إمَّا أن يكون العزل على كامل الكبل فقط مثل F/UTP و S/UTP و SF/UTP أو لكلِّ زوج من الأسلاك مثل U/FTP أو كليهما مثل F/FTP و S/FTP و SF/FTP؛ يشير الحرف F إلى الكلمة “Foil shielding” وهي الرقاقة المعدنية العازلة، والحرف S إلى “Braided shielding” وهي الأسلاك المجدولة العازلة. كبل معزول من نوع S/FTP التصنيف 7. نشرت الصورة برخصة CC BY SA لصاحبها Ru wiki. تنتهي الأكبال المجدولة بوصلة من نوع RJ45؛ يشير RJ إلى “المقبس المسجل” اختصارًا للعبارة (Registered Jack) ذو الرقم 45 الذي يشير إلى موديل معين من الوصلة فيها ثمانية ناقلات. تركب الأسلاك ضمن الوصلة في أماكنها المحدَّدة وترقم من 1 إلى 8 بدءًا من اليسار؛ يوجد معياران لتركيب الأسلاك وترتيبها وهما: EIA/TIA T568A وEIA/TIA T568B؛ توضح الصورة الآتية هذين المعيارين. وجود المعيارين السابقين يجعلنا نحصل على نوعين من الأكبال عند تهيئتها وهي: الأكبال المباشرة straight-through cables: يكون ترتيب الأسلاك في نهايتي الكبل متماثلًا أي ترتيب الأسلاك وفق معيار واحد لكلا النهايتين؛ تُستخدم عادةً لوصل أنواع مختلفة من الأجهزة مثل ربط الحاسوب أو الخادم إلى المبدلات أو الربط بين مبدِّل ٍ وموجِّه. الأكبال المتشابكة crossover cables: ترتيب الأسلاك في نهايتي الكبل مختلفة إذ يكون ترتيب الأسلاك لإحدى نهايتي الكبل وفق المعيار T568A والنهاية الأخرى وفق المعيار T568B؛ تُستعمل لربط العناصر الشبكيَّة من النوع نفسه مثل الربط بين المبدلات، والموجهات، وحتى بين الحواسيب، والخواديم فيما بينهما. كبل الليف الضوئي هو كبل يَستخدم ليفًا ضوئيًا أو أكثر في عملية النقل؛ هذا الليف مصنوع من الزجاج أو البلاستيك ويُغلَّف بطبقة بلاستيكية عازلة لحمايته من التشويش. توجد أنواع مختلفة منه بحسب الغرض المطلوب مثل سرعة النقل أو المسافة، وأهمُّها: الكبل ذو الألياف المتعدِّدة multi-mode fiber أو الكبل أحادي الليف single-mode fiber؛ يُستخدم الأول للمسافات القصيرة والشبكات المحلية، والثاني للمسافات الكبيرة. مخططات الشبكة الفيزيائية عملية ربط عناصر الشبكة مع بعضها ليست عشوائية؛ هنالك طرائق عدَّة لإنشاء الشبكة وربط عناصرها والتي تحدِّد التوصيل الشبكي، ونوع الاتصال الفيزيائي، وخصائص تلك الاتصالات. يتعلق المخطَّط المختار بعدد الأجهزة والعناصر المتوافرة، والخصائص المطلوبة من تلك الشبكة مثل السرعة، والأداء، والوثوقية، والكلفة. المخطط التسلسلي (Bus) توصل الأجهزة في المخطط التسلسلي إلى كبل وحيد وهو كبلٌ محوري؛ ينقل الكبل الإشارات والبيانات إلى جميع الأجهزة والتي يستقبلها الجهاز الهدف بينما تهملها الأجهزة الأخرى. إنهاء الكبل أمر مهم لمنع الإشارات من العودة والتسبب في أخطاء شبكية ناتجة عن التصادمات. أيُّ خللٍ في الكبل يؤدي إلى خروج الشبكة عن الخدمة. المخطط النجمي (Star) يوجد في المخطط النجمي جهاز مركزي لوصل جميع الأجهزة إذ تمر جميع الإشارات والبيانات المنقولة عبره؛ يكون هذا الجهاز في الشبكات المحليَّة الاعتيادية موزِّعًا أو مبدِّلًا أو موجِّهًا؛ إنَّ هذا المخطط يحسِّن من وثوقية الشبكة لأنَّ حدوث خلل في إحدى الوصلات سيؤثر على الجهاز الموصول بتلك الوصلة فقط، ولا علاقة لبقية الشبكة بتلك المشكلة؛ ولكن إن حدث عطل في المبدِّل فسيؤثر ذلك على كامل الشبكة. تتمتع الشبكة المصمَّمة وفق هذا المخطط بسهولة إضافة أجهزة جديدة، وهي من أكثر الشبكات استخدامًا. المخطط الحلقي (Ring) يتصل كلُّ جهاز في المخطط الحلقي مع الجهاز الذي قبله وبعده لتشكل جميعها حلقة؛ قد يبدو أنَّه يشبه المخطط التسلسلي ولكن الأجهزة ليست متصلة إلى كبل واحد، والأكبال مختلفة هنا. تنتقل الإشارات من جهاز إلى آخر باتجاه واحد والذي يعيد إرسالها إلى الجهاز التالي حتى تصل إلى وجهتها؛ حدوث خلل في أحد تلك الأجهزة أو الأكبال سيؤثر على كامل الحلقة مما يمثِّل نقطة ضعف، ولزيادة التوفر والوثوقية يمكن استخدام المخطط الحلقي المزدوج وهكذا يمكن نقل البيانات باتجاهين. المخطط الترابطي التام (Full-Mesh) تتصل جميع الأجهزة مع بعضها بعضًا في هذا المخطط، مما يؤدي إلى مستويات عالية من تلافي الأخطاء فلا توجد نقطة ضعف تؤدي إلى تعطل الشبكة. إنشاء شبكة بهذا المخطط يكلِّف كثيرًا، ونلاحظ استخدامه في الشبكات الواسعة WAN للوصل بين المكاتب الفرعية والمركز الرئيسي. نلجأ أحيانًا بسبب التكلفة الباهظة إلى خيارات أخرى تتضمن مخططًا ترابطيًّا جزئيًّا (partial-mesh) والذي يكون حلًا وسطًا بين ضمان عدم انقطاع الاتصالات وبين التكلفة؛ في هذا المخطط، تُربط الفروع الشبكيَّة أو أهم الأجهزة ارتباطًا تامًّا بينما تُربط العقد الأقل أهمية إلى عقدة أخرى فقط. الخلاصة أصبحت في جعبتك الآن مقدمة جيدة حول الشبكات تمكنك من فهم الشبكات المحليَّة مثل طريقة التواصل بين الأجهزة، ومعرفة بعض البروتوكولات المستعملة، والعناصر المستخدمة في إنشائها.
  2. توجد طرق متعددة لصنع تطبيقات لنظام تشغيل أندرويد ويُفضل المطوَرون كتابة التطبيقات باستخدام اللغة الرسمية وهي جافا لقدرتها على استغلال كافة موارد الهاتف وكفاءتها عند العمل. وتُستخدم لغات البرمجة لإعطاء الأوامر للحاسوب لتنفيذها وتتشابه مع اللغات الحقيقية في أنها بدلًا من أن تتواصل مع البشر فهي تتواصل مع الحاسوب ووصف الطريقة التي أرغب أن يعمل بها. يعتمد نظام تشغيل أندرويد على أساسيات لغة جافا ومكتباتها القوية بالإضافة إلى مكتبات أندرويد الخاصة، ويتم وضع الشيفرة المكتوبة بلغة جافا بعد أن يتم ترجمتها إلى صيغتها التنفيذية في ملف بامتداد apk جنبًا إلى جنب مع باقي الموارد من صور وملف androidManifest. البرمجة كائنية التوجه تتميز لغة جافا بأنها لغة سهلة التعلم وتٌصنف من اللغات عالية المستوى والتي نستطيع فهم أوامرها بسهولة، وهي من لغات البرمجة التي تدعم مفهوم البرمجة كائنية التّوجّه. والبرمجة كائنية التّوجّه تتكون من مجموعة من المفاهيم. في عالمنا الحقيقي يمكن التعامل مع أي شيء على أنه كائن، ولكل كائن صفات تميزه ولديه وظائف يستطيع القيام بها، فمثلًا الكاميرا كائن لها صفات مثل اللون والأبعاد والشركة المصنعة لها، ولها وظائف يستطيع القيام بها مثل التصوير أو تخزين وعرض الصورة. ويوجد أنواع عديدة من الكاميرات لذا يتم وضع التصميم المشترك والتعريف الخاص بهذه الكائنات في البرمجة في صنفClass ومن هذا الصّنف يتم استخراج الكائنات. لذا يتم تصّنيف الأشياء إلى فئات تشترك في الصفات والوظائف ومنها يتم صنع الكائنات Objects. المتغيرات تتعامل لغة جافا مع كافة أنواع البيانات والقيام عليها بالعمليات المختلفة. لذا تستخدم المتغيرات كحاويات لتخزين هذه البيانات لحفظها بشكل مؤقت والقيام عليها بالعمليات المطلوبة ويمكن تغيير هذه القيم في أي وقت ويعتبر تعريف المتغيرات الطريقة لجعل الحاسوب يحتفظ بالمعلومات. عند تعريف متغير جديد يجب تحديد ما هو نوع البيانات التي يستطيع المتغير تخزينها بداخله، قد تكون البيانات اسمًا أو أرقامًا أو رابط لفيديو أو صورة لذا يجب تحديد نوع البيانات التي سيحتويها المتغير حتى يستطيع البرنامج التعامل معها بشكل صحيح. فإذا كان المتغير رقمًا فلا يمكن أن نخزن به نصًا. ولتعريف متغير جديد يتم على هذا النحو: DataType variableName; يتم كتابة نوع البيانات أولًا ثم اسم المتغير، واسم المتغير يمكن أن يكون أي شيء ولكن هناك بعض الأمور التي يجب مراعاتها وهي: يمكنك استخدام الحروف "A-Z" و "a-z" و "0-9". ألا يبدأ برقم. لا يسمح باستخدام أي حروف خاصة في الاسم مثل @، # وغيرهما عدا _ فقط. لا يسمح باستخدام المسافات في الاسم. ألا يكون الاسم من الكلمات المجوزة لدى اللغة وهي كلمات ذات معنى محدد لدى المترجم. أنواع البيانات هناك بعض الأنواع الأساسية لتعريف المتغيرات مثل: الأرقام الصحيحة: يتم تخزين الأرقام الصحيحة في متغير النوع int. int number=26; الأرقام الكسرية: لتخزين الأرقام الكسرية نستخدم متغير من النوع float أو double. double fraction=102.486; float fraction=842.014f; لاحظ أن عند تعريف متغير من النوع float يجب وضع الحرف f في نهاية الرقم. الحروف: لتخزين حرف واحد نستخدم متغير من النوع char. char c=’y’; char num=’8’; char s=’&’; يتم وضع الحرف بين علامتيّ اقتباس فردية. القيم المنطقية: لتخزين متغير يحمل إحدى القيمتين المنطقيين true أو false يتم تعريف متغير من النوع boolean، ويستخدم في المقارنات المنطقية. boolean flag=true; النصوص: لتخزين نص يتم استخدام متغير من النوع String. String str=”Hello,World!!”; يتم وضع النص بين علامتيّ اقتباس زوجية ولا يوجد حد لطول النص. والاختلاف بين النوعين char و String أن الأول لتخزين حرف واحد فقط والثاني لنص كامل، ولاحظ أن علامتيَ الاقتباس مختلفة فلا يمكن استخدام "R" لتخزينها في متغير من النوع char لأنها داخل علامتيّ الاقتباس الخاصة بالنص. كما يمكنك أن تقوم بتعريف المزيد من أنواع البيانات باستخدام الأصناف كما سنرى لاحقًا. في الأمثلة السابقة قمنا بتعريف المتغير وتخزين قيمة مبدئية بداخله، هناك طريقة أخرى يمكن استخدامها كما في المثال التالي. int x; x=100; في المثال السابق تم تعريف متغير اسمه x ثم قمنا لاحقًا بتخزين قيمة بداخله ويمكن تغيير القيمة بعد ذلك في أي وقت داخل البرنامج، وبالمثل يمكن تعريف باقيِ أنواع المتغيرات بهذه الطريقة. ملاحظات تنتهي الجمل في جافا بالفاصلة المنقوطة ";" للتعبير عن انتهاء الجملة، ويمكن اعتبارها مثل النقطة التي تنتهي بها الجملة عند الكتابة. العلامة "=" تسمى بـ "عامل الإسناد" (Assignment Operator) وتستخدم لتخزين القيم التي تقع يمين العامل في المتغير الذي يقع على يساره. int x; x=3; x=x+5; في هذا المثال سيتم تخزين 3 في المتغير x ثم بعد ذلك جمع عليه الرقم 5 وتخزينه مرة أخرى في x ليصبح الناتج النهائي المخزن داخل المتغير x يساوي 8. العمليات الحسابية والمنطقية العمليات الرياضية يمكننا القيام بالعمليات الرياضية المعتادة في لغة جافا فمثلًا: int x = 19; int y = 4; int result = x + y; وهنا يتم جمع قيم المتغيرين وتخزينهما في المتغير result ليصبح الناتج يساوي 23: int result = x – y; وإذا قمنا بتغيير السطر الثالث بهذا السطر فيصبح الناتج 15: int result = x * y; وناتج ضربهما يساوي 76: int result = x / y; وناتج القسمة يساوي 4 ويتم إهمال الكسر لأن في لغات البرمجة عندما نقوم بقسمة رقمين صحيحين فيكون الناتج رقمًا صحيحًا. int result = x % y; وتعني هذه العملية بباقي قسمة x على y وتساوي 5. وهناك العملية: x++; وهي تتشابه مع: x=x+1; فهي تقوم بزيادة واحد على قيمة المتغير، وبالمثل العملية --x تقوم بطرح واحد من قيمة المتغير. عمليات المقارنة وتقارن هذه العمليات بين المعاملات مثل: int a = 15; int b = 20; boolean result = a > b; وتقوم هذه العملية بالمقارنة بين قيمتيّ a و b وتخزين true أو false في المتغير result وفي المثال السابق سيتم تخزين false لأن b ذات قيمة أكبر من a. وباقي المقارنات هي > أصغر من، و =< أكبر من أو يساوي، => أصغر من أو يساوي، == يساوي، =! لا يساوي وكلهم يكون ناتجهم إما true أو false. العمليات المنطقية تستخدم العمليات المنطقية في ربط ناتج أكثر من عملية مقارنة سويًا. int a = 15; int b = 20; int c = 7; boolean result = a > b && a > c; وتستخدم && (كحرف العطف "و") للتعبير عن وجوب تحقق الشرطين معًا ليكون الناتج true ويكون false غير ذلك. boolean result = a > b || a > c; وتستخدم || (كحرف العطف "أو") للتعبير عن تحقق إحدى الشرطين أو تحققهما معًا ليكون الناتج true ويكون الناتج false عندما يكون الشرطين غير متحققين معًا. boolean result = !(a>b); وتعني ! عكس الناتج فإذا كان true يصبح false والعكس صحيح. التعليقات يحتاج المطوّر في بعض الأحيان لإضافة بعض التعليقات والملاحظات على البرنامج وذلك لتسهيل فهم ما كتبه من شيفرات عند قراءتها دون التأثير على الأوامر المكتوبة، حيث أن التعليقات لا يترجمها المترجم الخاص بجافا بل يهملها. تعليق السطر الواحد هذا النوع من التعليق يتم باستخدام علامتيّ //، ويجعل السطر المقابل لها تعليق لا يراه البرنامج. //This is a single-line comment int weekDays = 7; //Number of Days in a week كما ترى يقوم التعليق بتوضيح الأمور للمطوّر. تعليق الأسطر المتعددة يمكنك أن تكتب تعليق في عدة أسطر باستخدام /* */ لكتابة التعليق: /*This is a multi-line comment. That comment ends when it finds the closing marker. */ يتم حجز عدد من الأسطر بين */ و /* وتكون عبارة عن تعليق. ولن يتم تنفيذها في البرنامج، فوصول المترجم لـ */ تجعله يتجاهل كل ما يقابله حتى يصل لـ /* ثم يقوم بتنفيذ ما بعدها. لذا فالتعليقات في البرنامج تساهم في توضيحه وتجعل قراءته أسهل. فأي شيء يبدو واضحًا وبديهيًا عند كتابة البرنامج قد لا يبدو كذلك بعد مرور فترة طويلة. الجمل الشرطية وهي الجمل التي تنفذ عند تحقق شرط معين ولتنفيذها يتم استخدام if و if-else و switch، وإذا لم يتحقق هذا الشرط لا يتم تنفيذها. جملة if تعتبر جملة if من أبسط الجمل الشرطية فهي تحتوي على شرط عند تحققه يتم تنفيذ أوامر محددة ويتم تركيبها على الشكل التالي: if ( Condition ) { // Do Some Actions if it’s true } تُكتب كلمة if ويتم وضع الشرط بين الأقواس و عند تحقق الشرط يتم تنفيذ الأوامر المتواجدة بين القوسين { } وإذا لم يتحقق يتم تجاهل هذه الأوامر واستكمال الشفرة الخاصة بالبرنامج. مثال على ذلك: int x = 10; String result = “false”; if(x > 10){ result = “true”; } في المثال السابق يتم التحقق من قيمة المتغير x إذا كانت أكبر من الصفر أم لا، وفي هذه الحالة فالشرط سليم ويتم تخزين النص "true" داخل المتغير result، وإذا تم تغيير قيمة المتغير x إلى -5 مثلًا لن يتحقق الشرط وستظل قيمة النص "false". الجملة if-else وهي تقوم بنفس الوظيفة التي تقوم بها if عدا أنه إذا لم يتحقق الشرط الخاص بـ if تقوم بتنفيذ أوامر أخرى معرّفة لدى الجملة else، وبالتعديل على المثال السابق: int x = -6; String result ; if(x > 10){ result = “true”; }else{ result = “false”; } في المثال لا يتم تم وضع نص مبدئي في المتغير result ويتم التحقق بعد ذلك من الشرط الخاص بـ if إذا كان صحيحًا فسيتم وضع النص "true" داخل المتغير result أما إذا كان خاطئًا فسيتم وضع القيم "false" داخل المتغير result. ويمكن القيام بالتحقق بأكثر من شرط كما في المثال التالي: char grade = ‘B’; String result; if(grade==’A’){ result = “Excellent”; }else if(grade==’B’){ result = “Very good”; }else if(grade==’C’){ result = “good”; }else if(grade==’D’){ result = “passed”; }else{ result = “failed”; } في هذا المثال تم استخدام أكثر من شرط وجملة واحدة فقط التي تتحقق ويكون الشرط فيها صحيحًا وفي المثال فهي الجملة الثانية ويتم تخزين النص "very good". لاحظ أننا لا تستخدم == عند المقارنة بين النصوص من النوع String وتستخدم الدالة equals. جملة switch تستخدم هذه الجملة عندما نريد التحقق من قيمة متغير واحد فقط وتعتبر أكثر سهولة من if في هذه الحالة: switch(variable){ case 1: //Do something break; case 2: //Do something break; default: //Do something break; } وبتحويل المثال السابق الخاص بـ if باستخدام switch: char grade = ‘B’; String result; switch(grade){ case ‘A’: result = “Excellent”; break; case ‘B’: result = “Very good”; break; case ‘C’: result = “good”; break; case ‘D’: result = “passed”; break; default: result = “failed”; break; } ملاحظات يتم كتابة اسم المتغير فقط بين الأقواس الخاصة بـ switch ولا يتم تحديد شرط معين. تكتب كلمة case وتتبعها قيمة المتغير عند هذه الحالة حتى يتم تنفيذ الأوامر الخاصة بهذه الحالة إذا تساوت قيمة المتغير الخاص بـ switch مع القيمة الخاصة بـ case (في المثال السابق كان المتغير من النوع char لذا تم وضع القيم الخاصة بـ case بين علامتيّ التنصيص المفردة). في آخر كل حالة يتم وضع الأمر break وهو أمر للخروج من الجملة switch، وإذا لم يتم وضعه سيتم تنفيذ باقي الحالات المتواجدة داخل الجملة switch حتى نصل إلى الأمر break أو تنتهي الجملة switch. يتم تنفيذ الحالة default عندما يكون قيمة المتغير الخاص بـ switch لا يوجد لها حالة خاصة بها. جملة switch تتعامل مع المتغيرات من النوع int أو char أو String فقط. الجمل الشرطية التكرارية الجمل الشرطية التكرارية هي جمل تقوم بتنفيذ أوامر عدة مرات في حال كان الشرط صحيحًا، وتتشابه مع الجمل الشرطية في تركيبها وتختلف معها في عدد مرات تنفيذ الأمر. تمتلك لغة جافا عدة أنواع من الجمل التكرارية مثل while و do While و for. الجملة while وتتشابه تركيبة هذه الجملة مع الجملة if كالتالي: while (Condition){ //Do some Actions here } ويتم تنفيذ الأوامر داخل الجملة while طالما الشرط متحقق ويتم التوقف عندما يصبح الشرط خاطئًا، مثال على ذلك: int i = 0; int sum = 0; while( i < 5 ){ sum = sum + 1; i++; } في هذا المثال يكون الشرط صحيحًا فيتم تنفيذ الجمل داخل while ثم يتم التحقق من الشرط مرة أخرى ويكون صحيحًا وهكذا حتى يصبح الشرط خاطئًا ويُلاحظ أن الشرط لن يتحقق في حالة i تساوي 5 وعند الخروج من الجملة التكرارية تكون القيمة 5 مخزنة داخل المتغير sum. الجملة for وتختلف طريقة كتابة هذه الجملة عن الجملة while. for (initialization ; condition ; update){ // Do Some Actions here } داخل القوسين الخاصين بالجملة for يتم تقسيمها إلى ثلاث أقسام تفصلهم الفاصلة المنقوطة ";" وأول قسم يتم به تهيئة المتغير إعطائه قيمة ابتدائية، والقسم الثاني الشرط المعتاد، والقسم الأخير خاص بتحديث الشرط. فمثلًا لاستخدام for في المثال السابق الخاص بـ while: int sum =0; for(int i=0;i<5;i++){ sum = sum + 1; } ويقوم المثال السابق بنفس الوظيفة و ُلاحظ أنه تم دمج الجمل الثلاث التي كانت قبل جملة while والشرط الخاص بـ while والتحديث للشرط داخل جملة while في سطر واحد داخل الأقواس الخاصة بـ for. وتُستخدم الجمل التكرارية لتكرار تنفيذ أوامر محددة لحين غياب شرط معين يتم تحديده مسبقًا. سنواصل في الدرس القادم باقي أساسيات جافا التي تحتاج أن تعرفها قبل أن تشرع في برمجة تطبيقات أندرويد.
  3. تعتبر العبارات الشرطية في البرنامج من الأمور الأساسيّة في البرمجة كما هو معلوم. تمتلك لغة سي شارب نوعين من العبارات الشرطية وهما: بنية if-else وبنية switch-case. العبارة الشرطية if-else وهي بنية مألوفة في معظم لغات البرمجة، تشبه هذه البنية في تشكيلها تلك الموجودة في لغات أخرى مثل ++C و Java. تمتلك هذه البنية ثلاثة أشكال سنتحدّث عنها تباعًا. الشكل الأول لبنية if الشكل الأبسط لبنية if هي: if ([condition]) { statement1; statement2; ... } إذا كان تقييم evaluate الشرط [condition] يعطينا true (أي تحقّق الشرط) عندها ستُفّذ العبارات البرمجيّة الموجودة ضمن الحاضنة {}، وإلّا (أي لم يتحقّق الشرط) فلن يُنفّذ أيّ منها. أنشئ مشروعًا جديدًا سمّه Lesson03_1 واستبدل محتويات الملف Program.cs بالبرنامج البسيط التالي الذي يعمل على مقارنة القيمة المدخلة من المستخدم مع العدد 5 ويُظهر الخرج المناسب: 1 using System; 2 3 namespace Lesson03_1 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 double x; 10 string str_x; 11 12 Console.Write("Input a number: "); 13 str_x = Console.ReadLine(); 14 15 x = double.Parse(str_x); 16 17 if(x > 5) 18 { 19 Console.WriteLine("The value {0} is greater than 5", x); 20 } 21 22 Console.WriteLine("Goodbye!"); 23 } 24 } 25 } جرّب تنفيذ هذا البرنامج باستخدام Ctrl+F5 (أو من القائمة Debug > Start Without Debugging). سيطلب منك البرنامج إدخال قيمة عدديّة، أدخل العدد 6، سيعرض البرنامج الخرج التالي: The value 6 is greater than 5 Goodbye! أعد تنفيذ البرنامج وأدخل هذه المرّة القيمة 3 لتحصل على الخرج التالي: Goodbye! لاحظ بأنّ خرج البرنامج قد اختلف باختلاف القيم المدخلة، أي أنّ هناك اختلاف في العبارات البرمجيّة التي تمّ تنفيذها في كلّ مرّة. يعود سبب ذلك إلى البنية if الموجودة بين السطرين 17 و 20. يختبر الشرط الموجود بعد كلمة if في السطر 17 فيما إذا كانت قيمة المتغيّر x أكبر تمامًا من 5. فإذا كانت نتيجة تقييم التعبير x > 5 تساوي true فهذا يعني أنّ الشرط قد تحقّق وبالتالي تنفّذ جميع العبارات البرمجيّة الموجودة في الحاضنة (بين السطرين 18 و 20). أمّا إذا كانت نتيجة تقييم التعبير x > 5 تساوي false فعندها سيتجاوز تنفيذ البرنامج البنية if إلى العبارات التي تأتي بعد السطر 20. الشكل الثاني لبنية if هذا الشكل للعبارة الشرطية if مفيد أيضًا، ويُستخدم عندما نريد الاختيار بين مجموعتين من العبارات البرمجيّة، والشكل العام له: if ([condition]) { statement1; statement2; ... } else { Statement3; Statement4; ... } لقد أضفنا القسم else مع حاضنته. المنطق هنا بسيط يمكننا قراءته بالشكل التالي: "إذا تحقق الشرط [condition] عندها تنفّذ الحاضنة الموجودة بعد if مباشرةً، وإلّا يتم تنفيذ الحاضنة الموجودة بعد else مباشرةً" لكي نتعرّف على كيفيّة التعامل مع هذا الشكل، أنشئ مشروعًا جديدًا سمّه Lesson03_2 وانسخ الشيفرة التالية إلى الملف Program.cs: 1 using System; 2 3 namespace Lesson03_2 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 double x; 10 string str_x; 11 12 Console.Write("Input a number: "); 13 str_x = Console.ReadLine(); 14 15 x = double.Parse(str_x); 16 17 if (x > 5) 18 { 19 Console.WriteLine("The value {0} is greater than 5", x); 20 } 21 else 22 { 23 Console.WriteLine("The value {0} is smaller than or equals 5", x); 24 } 25 26 Console.WriteLine("Goodbye!"); 27 } 28 } 29 } هذا البرنامج مطابق للبرنامج الذي رأيناه قبل قليل باستثناء القسم else مع حاضنته. يسلك هذا البرنامج نفس السلوك الذي يسلكه البرنامج السابق باستثناء أنّه لو أدخل المستخدم قيمة مثل 3 سيعمل البرنامج على طباعة الخرج التالي: The value 3 is smaller than or equals 5 Goodbye! لاحظ أنّ البرنامج Lesson03_1 كان يطبع العبارة !Goodbye فقط عند إدخال القيمة 3. السبب في ظهور الخرج الجديد هو وجود القسم else في بنية if السابقة، فعندما يُقيّم الشرط x > 5 في السطر 17 وتكون نتيجة تقييمه false سينتقل البرنامج فورًا إلى تنفيذ العبارات البرمجيّة الموجودة ضمن حاضنة else وهذا هو سبب ظهور هذا الخرج. العيب الوحيد في هذا البرنامج أنّه لا يستطيع التمييز بين الحالة التي تكون فيها القيمة المدخلة تساوي 5 وبين الحالة التي تكون فيها أصغر تمامًا من 5، ففي كلّ من هاتين الحالتين يعرض البرنامج نفس الخرج عن طريق تنفيذ العبارة الموجودة في السطر 23. ملاحظة: في حال كانت أيّة حاضنة تحوي عبارة برمجيّة واحد فقط، فعندها يمكن عدم استخدام قوسي الحاضنة {} مع أنّني أفضّل استخدامهما لجعل البرنامج أكثر وضوحًا. الشكل الثالث لبنية if وهو الشكل الأكثر شمولًا وفيه نستخدم القسم else if على الصورة التالية: if ([condition]) { statement1; statement2; ... } else if ([condition1]) { Statement3; Statement4; ... } else if ([condition2]) { Statement3; Statement4; ... } ... else { Statement3; Statement4; ... } يمكننا قراءة المنطق هنا على الشكل التالي: "إذا تحقّق الشرط [condition] عندها تنفّذ الحاضنة الموجودة بعد if مباشرةً، وإلّا إذا (else if) تحقّق الشرط [condition1] يتم تنفيذ الحاضنة الموجودة بعد else if الأولى مباشرةً، وإلّا إذا تحقّق الشرط [condition2] يتم تنفيذ الحاضنة الموجودة بعد else if الثانية مباشرةً، وإلّا (else) يتم تنفيذ الحاضنة الموجودة بعد else مباشرةً" نلاحظ أنّه يمكننا استخدام أقسام else if بقدر ما نريد، ولكن يمكن استخدام قسم else وحيد. ونلاحظ أيضًا أنّه بالنتيجة ستنفّذ مجموعة واحدة فقط ضمن حاضنة ما. وواضح أيضًا أنّ أقسام else if و else هي أقسام اختياريّة ووجودها غير مرتبط ببعضها، ولكن إذا حوت بنية if قسم else if فيجب أي يكون القسم else (في حال وجوده) هو القسم الأخير. لكي نثبّت هذا المفهوم بشكل جيّد انظر البرنامج Lesson03_3 التالي: 1 using System; 2 3 namespace Lesson03_3 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 double x; 10 string str_x; 11 12 Console.Write("Input a number: "); 13 str_x = Console.ReadLine(); 14 15 x = double.Parse(str_x); 16 17 if (x > 5) 18 { 19 Console.WriteLine("The value {0} is greater than 5", x); 20 } 21 else if (x == 5) 22 { 23 Console.WriteLine("The value {0} is equals 5", x); 24 } 25 else 26 { 27 Console.WriteLine("The value {0} is smaller than 5", x); 28 } 29 30 Console.WriteLine("Goodbye!"); 31 } 32 } 33 } يشبه هذا البرنامج سابقيه إلى حدٍّ بعيد، فهو يقارن القيمة المدخلة مع العدد 5 ويعرض رسالة مناسبة نتيجة عملية المقارنة. الشيء الجديد هنا هو التمييز بين الحالة التي تكون فيها القيمة المدخلة تساوي العدد 5 والحالة التي تكون فيها أصغر من العدد 5. قمنا بذلك من خلال إضافة القسم else if جديد يختبر حالة المساواة مع العدد 5. الآن أصبح منطق البرنامج كالتالي: "إذا كانت القيمة المدخلة أكبر تمامًا من 5 (السطر 17) عندها تُنفّذ العبارة الموجودة في السطر 19، وإلّا إذا كانت القيمة المدخلة تساوي 5 (السطر 21) عندها تُنفّذ العبارة الموجودة في السطر 23، وإلّا ستكون القيمة المدخلة أصغر من 5 حتمًا، وتُنفَّذ العبارة الموجودة في السطر 27." العبارة الشرطية switch-case تفيد هذه البنية في الاختيار من بين عدّة حالات منفصلة. لهذه البنية الشكل العام التالي: switch(expression) { case [A]: [statements] break; case [B]: [statements] break; ... [default:] [statements] break; } القسم الأخير default هو قسم اختياري، كما يجب أن يكون هناك قسم case واحد على الأقل. إليك الآن البرنامج Lesson03_4 لفهم كيفيّة استخدام هذه البنية: 1 using System; 2 3 namespace Lesson03_4 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 double x, y; 10 string str_x, str_y, operation; 11 12 Console.Write("Input first number: "); 13 str_x = Console.ReadLine(); 14 15 Console.Write("Input second number: "); 16 str_y = Console.ReadLine(); 17 18 Console.Write("Choose operation (+, -, *, /): "); 19 operation = Console.ReadLine(); 20 21 x = double.Parse(str_x); 22 y = double.Parse(str_y); 23 24 switch (operation) 25 { 26 case "+": 27 Console.WriteLine("{0} + {1} = {2}", x, y, x + y); 28 break; 29 case "-": 30 Console.WriteLine("{0} - {1} = {2}", x, y, x - y); 31 break; 32 case "*": 33 Console.WriteLine("{0} * {1} = {2}", x, y, x * y); 34 break; 35 case "/": 36 Console.WriteLine("{0} / {1} = {2}", x, y, x / y); 37 break; 38 default: 39 Console.WriteLine("Unsupported operation."); 40 break; 41 } 42 } 43 } 44 } البرنامج السابق عبارة عن برنامج آلة حاسبة بسيطة تدعم العمليات الحسابية الأربع: الجمع والطرح والضرب والقسمة. يطلب البرنامج من المستخدم إدخال قيمتين عدديّتين، بعد ذلك يطلب اختيار العمليّة الحسابيّة المراد إجراؤها على هاتين القيمتين (+ ، - ، * ، /) وتخزين العمليّة المختارة ضمن المتغيّر النصّي operation وذلك في السطر 19. تعمل البنية switch في السطر 24 على مقارنة قيمة المتغيّر النصيّ operation مع القيم الموجودة في أقسام case (الأسطر 26 و 29 و 32 و 35) فإذا طابقت القيمة الموجودة في operation إحدى تلك القيم، فإنّ العبارات البرمجيّة الموجودة ضمن هذا القسم سيتمّ تنفيذها. أمّا إذا لم يحدث مثل هذا التطابق، فستنفّذ العبارات البرمجيّة الموجودة في القسم الاختياري default والتي ستخبر المستخدم (في هذا المثال) بأنّ العمليّة الحسابيّة التي يرغبها لا يدعمها البرنامج. نستفيد من القسم default في تنفيذ عبارات برمجيّة في حال لم يحدث التطابق مع أيّ قسم case سابق. كما نلاحظ أنّ العبارة break الموجودة في كلّ قسم من أقسام case بالإضافة إلى قسم default هي عبارة ضرورية وتؤدّي إلى انتقال تنفيذ البرنامج إلى خارج بنية switch أي إلى السطر 42. جرّب تنفيذ البرنامج وإدخال قيم متنوّعة بالإضافة إلى تجريب العمليات الحسابيّة الأربع. جرّب إدخال عامل باقي القسمة مثلًا (%) وانظر كيف سيجيب البرنامج بالرسالة Unsupported operation. تمارين داعمة تمرين 1 في البرنامج Lesson03_4 السابق إذا أدخل المستخدم القيمة 0 للعدد الثاني، ثم اختار عمليّة القسمة ( / ) سيؤدّي ذلك إلى القسمة على صفر، وهذا يسبّب خطًأ أثناء التنفيذ runtime error يؤدّي إلى رمي استثناء وتوقّف البرنامج عن العمل. أجرِ تعديلًا على البرنامج ليأخذ هذا الأمر بالحسبان. (تلميح: أضف شرط if ضمن قسم case الموافق للعمليّة ( / ) لاختبار قيمة المتغيّر y فيما إذا كانت تساوي الصفر أم لا). تمرين 2 اكتب برنامجًا يطلب من المستخدم إدخال درجة الحرارة الحاليّة. فإذا كانت درجة الحرارة أقل من 4 مئوية يعرض البرنامج الرسالة "Very Cold". أمّا إذا كانت درجة الحرارة بين 4 وأقل من 10 مئويّة يعرض الرسالة "Cold". وفي حال كانت درجة الحرارة بين 10 وأقل من 30 مئويّة يعرض الرسالة "Normal". أمّا إذا كانت درجة الحرارة 30 فما فوق فيعرض البرنامج الرسالة "Hot". الخلاصة تعلّمنا في هذا الدرس مبادئ التعامل مع العبارات الشرطية والحاجة الماسّة إليها في اتخاذ القرارات المناسبة في البرنامج. تعرّفنا على العبارة الشرطية if-else وأشكالها المفيدة، كما تعرّفنا أيضًا على بنية الاختيار swicth-case. في مجال البرمجة من غير الممكن في الواقع أن يخلو أيّ برنامج فعليّ من وجود عبارة شرطية if واحدة على الأقل.
  4. php 101

    يُبنى أي سكربت PHP من سلسلةٍ من التعليمات البرمجية، التي تكون عمليات إسناد، أو استدعاء لدوال، أو حلقات، أو جملًا شرطية. تنتهي التعلميات عادةً بفاصلة منقوطة، ويمكن تجميع التعليمات ضمن مجموعة عبر وضعها ضمن أقواس معقوفة (أي {}). سنفصِّل في هذا الدرس الجمل الشرطية (التي هي عبارات if-else، وعبارة switch). حيث تُستعمَل هذه العبارات لاتخاذ القرارات وتنفيذ إجراءات اعتمادًا على تحقيق شرطٍ معيّن وهي من أهم التعابير البرمجية التي علينا تعلمها؛ لننظر إلى مثالٍ أولًا. ليكن لدينا متغيرٌ اسمه ‎$a، ونريد أن نُظهِر الكلمة "hsoub" إن كانت قيمة المتغير ‎$a مساويةً للسلسلة النصية "hsoub"؛ ستبدو الشيفرة كالآتي: <?php $a = 'hsoub'; //تهيئة المتغير // التحقق من قيمة المتغير if ($a == 'hsoub') { //إذا كانت قيمة المتغير مساويةً للكلمة 'hsoub' فستُطبَع الكلمة hsoub echo 'hsoub'; } ?> يمكنك ملاحظة أننا استعملنا عبارة if للتحقق إن كانت قيمة المتغير ‎$a مساويةً للسلسلة النصية "hsoub" أم لا؛ ركِّز على البنية العامة: if( expr ) { statements } ستُنفَّذ العبارات داخل حلقة if إن كانت قيمة الشرط هي true أو قيمة غير صفرية (non-zero) أو قيمة غير فارغة (non-empty)؛ هذا شرحٌ للكلمات الثلاث السابقة: القيمة true: معنى هذا القيمة واضحٌ وجلي؛ ففي المثال السابق استعملنا معامل المقارنة "==" لنتحقق إن كانت قيمة المتغير ‎$a مساويةً للسلسلة النصية "hsoub" أم لا. إن كانت مساويةً فسيعيد المعاملُ القيمةَ true وخلا ذلك سيعيد القيمة false. قيمة غير صفرية: يمكننا تجربتها بوضع 0 أو أعداد أخرى ليست مساوية للصفر في مكان الشرط... في الحقيقة، تعتبر الصفر مساويةً للقيمة false ويعتبر أي شيء عداها قيمته true. قيمة غير فارغة: جميع المتغيرات الفارغة أو غير الموجودة (null) تعتبر false، وبقية القيم أو المتغيرات تعتبر true. لاحظ أنَّ القيم الفارغة لا تعني أن تترك مكان الشرطِ فارغًا في عبارة if، وإنما تعني السلاسل النصية أو المتغيرات الفارغة أو غير الموجودة. حاول تجربة الأنواع الثلاثة آنفة الذكر لإيضاح ما سبق تمامًا. عبارة else تستعمل هذه العبارة عندما نحتاج إلى اختيار أحد احتمالين؛ فنريد مثلًا أن نُصنِّف طلاب الصف بناءً على درجاتهم، إذ يعتبر الطلاب الذين يحصلون على درجةٍ أقل من 33 راسبين، وسيعتبرون عدا ذلك ناجحين. سيبدو السكربت كما يلي: <?php $marks = 23; // علامة الطالب // عدِّل قيمة المتغير لتحصل على نتائج مختلفة if ($marks < 33) { echo 'you have failed'; } else { echo 'you have passed!'; } // الشيفرة السابقة تكافئ الشيفرة الآتية // لاحظ كيف عطلناها بوضعها في تعليق /* if ($marks < 33) { echo 'you have failed'; } if ($marks >= 33) { echo 'you have passed!'; } */ ?> من الواضح أنَّه سينفَّذ إما ما هو موجودٌ داخل عبارة if، أو ما هو موجودٌ داخل عبارة else؛ وذلك بعد التحقق من قيمة المتغير ‎$marks، إذ ينفَّذ ما هو موجودٌ في else إن لم يتحقق شرط if. التشعب في العبارات الشرطية يمكنك إنشاء عبارة شرطية داخل عبارة شرطية أخرى، فمثلًا لو أردنا أن نتحقق إن أخذ الطالب الدرجة ‎A+‎ أم لا، فسنعدِّل السكربت ليبدو كما يلي: <?php $marks = 23; // علامة الطالب // عدِّل قيمة المتغير لتحصل على نتائج مختلفة if ($marks < 33) { echo 'you have failed'; } else { // نكتب جملة شرطية داخل عبارة else if ($marks > 90) { echo 'you have passed and got A+ grade'; } else{ echo 'you have passed but not got A+ grade'; } } ?> عبارات elseif إن كان لدينا أكثر من خيارين فعلينا وقتها استعمال عبارة elseif، وهي شبيهةٌ بالعبارات المتشعبة؛ فيمكننا مثلًا إعادة كتابة السكربت السابق ليبدو كما يلي: <?php $marks = 23; // علامة الطالب // عدِّل قيمة المتغير لتحصل على نتائج مختلفة if ($marks < 33) { echo 'you have failed'; } elseif ($marks > 90) { echo 'you have passed and got A+ grade'; } else { echo 'you have passed but not got A+ grade'; } ?> إن لم يتحقق الشرط الأول (الدرجة >= 33)، فستتحقق العبارة elseif من الشرط المتعلق بها (الدرجة > 90) فإن لم يتحقق هذا الشرط أيضًا فستنفَّذ عبارة else. يمكنك كتابة عبارات elseif لأي عدد من المرات، فمثلًا، لو كان لديك أربعة خيارات (بدلًا من ثلاثة) فعليك وقتها استعمال عبارة elseif مرتين. تمرين: حاول أن تُعدِّل السكربت السابق لكي يعطي التقديرات الآتية للطلاب: عبارة switch إن جرَّبت إعادة كتابة المثال السابق لتضمين جميع التقديرات الممكنة للدرجات، فستجد أنَّ عليك كتابة الشروط مرارًا وتكرارًا؛ وما سبق مجرد مثالٍ بسيط، فما بالك بمثالٍ ضخمٍ بلائحةٍ ضخمة؟ لنتحدث الآن عن طريقةٍ جديدةٍ للجمل الشرطية تسمى "عبارة switch"؛ التي هي شبيهةٌ بسلسلةٍ من جمل if الشرطية. لنلقِ نظرةً على هذه الشيفرة أولًا: <?php $name = 'hsoub'; switch($name) { case 'variable': echo "it is a variable"; break; case 'hsoub': echo "best academy ever!"; break; default: echo 'this is necessary default case'; break; // هذه العبارة ليست ضرورية } ?> لنحاول فهم ما جرى في السكربت السابق: نبدأ السكربت بتعريف متغير اسمه "name". ثم نمرِّر ذاك المتغير إلى عبارة switch. ستأخذ العبارة swtich المتغير وتحاول مطابقة قيمته مع الحالات (cases) المُعرَّفة داخلها، فإن طابقت تلك القيمة أيّة حالةٍ فسينفَّذ ما يليها إلى أن نصل إلى عبارة break. سينتهي تنفيذ الحلقة (أي "سنخرج" منها) بعد تنفيذ أوّل عبارة break. يجب أن يكون في كل عبارة switch حالة افتراضية (default case) التي تنفَّذ إن لم تُطابِق المدخلات أيّة حالةٍ من الحالات. ليس من الضروري وجود عبارة break بعد الحالة الافتراضية، يمكنك ألّا تضيفها. أي بكلامٍ آخر، عبارة switch هي مجموعة من عبارات if-else. وتبدأ تنفيذها عند مطابقة حالة من الحالات المُعرَّفة (أو الحالة الافتراضية)، وتنتهي عند عبارة break أو قوس الإغلاق "‎}‎". ميزة استعمال switch هي أنها ستقلل من طول الشيفرة المكتوب. لنعد الآن إلى مثالنا السابق عن تقديرات الطلاب ونحاول حلّ المشكلة عبر عبارة switch: <?php $marks = 0; // علامة الطالب // عدِّل قيمة المتغير لتحصل على نتائج مختلفة // ندور العلامات إلى عدد بخانة واحدة $m = ($marks - 1)/10; // الدالة intval تعيد الجزء الصحيح من العدد // مثلًا 3.2 تصبح 3 و 3.8 تصبح 3 switch (intval($m)) { case 0: case 1: case 2: echo "F"; break; case 3: echo "D"; break; case 4: echo "C"; break; case 5: echo "C+"; break; case 6: echo "B"; break; case 7: echo "B+"; break; case 8: echo "A"; break; case 9: echo "A+"; break; default: // الحالة الافتراضية إن لم تُطابَق أيّة حالة echo "wrong input for marks"; break; } ?> من الواضح أننا لم نكتب شيفراتٍ كثيرة كما في السابق؛ لنشرح ما حدث في السكربت السابق: بدأنا السكربت بإنقاص الدرجات بمقدار 1 لكي يكون أول رقم (العشرات) من كل تقدير متساويًا (ما عدا التقدير F)، أي مثلًا 50 ستصبح 49 و100 ستصبح 99 ثم قسمنا الدرجات على 10 لجعلها تتراوح بين ‎-0.1 و9.9؛ أي أنَّ 10 ستصبح 0.1 و67 ستصبح 6.7. الدالة intval هي دالة موجودة في لغة PHP مهمتها إعادة الجزء الصحيح من العدد؛ أي أنها -مثلًا- ستعيد الرقم 3 إن كان العدد المُمرَّر إليها هو 3.4 أو 3.5 أو 3.8. باختصار، سنمرِّر الجزء الصحيح من العدد إلى العبارة switch. ثم سنحاول مطابقة ذاك الرقم مع الحالات داخل عبارة switch؛ وكما ذكرنا سابقًا، سيستمر تنفيذ الشيفرات التي تلي سطر مطابقة الحالي إلى أن نصادف عبارة break، فلذا ستُشير الحالات 0 و 1 و 2 إلى نفس الأسطر البرمجية (تلك التي ستطبع F) لعدم وجود عبارة break بينها. المعامل الثلاثي "‎?:‎" يُمثِّل هذا المعامل صيغةً مختصرةً لجملة if-else الشرطية، شكل العام كالآتي: (expr1) ? (expr2) : (expr3) سيتم التحقق أولًا من القيمة المنطقية للتعبير expr1، فإن كانت TRUE فسيُنفَّذ expr2، أما لو كانت FALSE فسينفَّذ expr3. هذا مثالٌ عنه: <?php $marks = 23; echo $marks < 33? 'you have failed' : 'you have passed!'; // السطر السابق يكافئ ما يلي if ($marks < 33) { echo 'you have failed'; } else { echo 'you have passed!'; } ?> تمرين حاول أن تعدِّل الأمثلة السابقة. اكتب برنامجًا فيه متغيرين هما x و y، يمثلان الإحداثيات الديكارتية لنقطة، واستعمل الجمل الشرطية لمعرفة إن كانت تلك النقطة في الربع الأول أو الثاني أو الثالث أو الرابع. [مصدر الصورة: ويكيبيديا] فكِّر بمشاكل أخرى تتطلب "اتخاذًا للقرارات" وجربها باستخدام عبارة if أو switch، واسأل في التعليقات إن واجهتك أيّة صعوبات. المصادر المقال Conditional statements in php لصاحبه Harish Kumar. صفحات if و else و else-if في دليل PHP وغيرها.
  5. سنستخدم في هذا الدرس نموذج OSI وواجهة سطر الأوامر لنظام سيسكو IOS للتعرف على المشاكل الشائعة في الشبكات؛ سنصنِّف المشاكل في مجموعات، فمثلًا مجموعة مشاكل الوسائط (media) كالتصادمات والتشويش (noise)؛ ومشاكل المنافذ مثل السرعة ونمط duplex؛ ومشاكل الضبط مثل إدارة كلمة المرور وملف الضبط. النهج الطبقيأفضل مكان لنبدأ فيه عند استكشاف الأخطاء هو نموذج OSI؛ حيث يسمح لنا النهج الطبقي (layered approach) بالتركيز على وظائف معيّنة لطبقاتٍ محددة، لنعلم ماذا يمكن لكل طبقةٍ أن تفعله؛ فسيساعدنا نهج «فرِّق تسد» على تصنيف الأدوات التي سنستعملها لاستكشاف الأخطاء في كل طبقة. فالمبدِّلات التقليدية (layer 2 switch) تعمل في الطبقتين 1 و 2 وهذا يعني أنَّ عليها التعامل مع الاتصالات الفيزيائية، كواصلات RJ-45 والأكبال ووصول إيثرنت للوسائط. ستتعامل المبدِّلات متعددة الطبقات مع الطبقة الثالثة أيضًا، وفيها ميزة التوجيه، وهذا يتطلب استكشافًا للأخطاء في الطبقة الثالثة. وفي حالة المبدِّلات في الطبقة الثانية (layer 2 switches)، فربما يكون لديك مشاكل في الطبقة الثالثة، لكنها متعلقةٌ عمومًا بالوظائف الإدارية للمبدِّل؛ أي بكلامٍ آخر، ستتعامل منافذ المبدِّل مع مشاكل إيثرنت ومكونات الطبقة الثانية؛ لكن المبدِّل -كجهاز- سيملك عنوان IP وبوابة افتراضية، ولذلك تستطيع الاتصال عبر Telnet أو SSH إليه، واستخدام SNMP لمراقبته. في هذا السياق، ربما يكون لديك مشاكل في الطبقة الثالثة متعلقة بعناوين IP والبوابات الافتراضية. المشاكل المتعلقة بالوسائط الفيزيائيةيبدأ بعض الأشخاص بالطبقة الأولى وينظرون إن كانت هنالك مشاكلٌ محتملة في الوسائط الفيزيائية كوجود ضرر في الأكبال أو تتداخل مع مصادر الأمواج الكهرومغناطيسية؛ تصنيف الأكبال المجدولة هو عاملٌ مؤثِّر، فستكون أكبال Cat-3 حساسةً لمصادرٍ معيّنة من الأمواج الكهرومغناطيسية مثل أنظمة تكييف الهواء؛ أما أكبال Cat-5، فلها تغليفٌ أفضل حول الأسلاك لحمايتها من تلك التداخلات. الحماية السيئة للأكبال قد تؤدي -مثلًا- إلى شد واصلات RJ-45 مما يسبب انقطاع بعض الأكبال. يمكن أن تكون الحماية الفيزيائية سببًا لمشاكل الوسائط؛ فإذا سمحت للأشخاص بوصل الموزِّعات بمبدِّلاتك أو وصل مصادر غير مرغوبة للبيانات إلى المبدِّل؛ فقد تحدث تغييرات في أنماط البيانات التي ستُرسَل (التي قد لا تكون متعلقةً بالطبقة الفيزيائية) لكنها قد تتسبب في زيادة التصادمات إن وصلت موزِّعًا إلى مبدِّلاتك. الأمر show interfaceبعد أن تضع النهج الذي ستسير عليه لاستكشاف المشكلة، ولنقل مثلًا أنك ستبدأ بالطبقة الأولى وستحاول العثور على مشاكل فيها، فمن الضروري فهم مخرجات الأوامر وربطها بالطبقات؛ يعرض الأمر show interface معلومات قيّمة مفيدة؛ فمثلًا، أول سطر في مخرجات المثال الآتي سيُظهِر أنَّ Fast Ethernet 0/1 يعمل (الطبقة الأولى) وكذلك بروتوكول line (الطبقة الثانية)، فإذا وجدت أن البطاقة لا تعمل في الطبقة الفيزيائية، فستعرف أين تكمن المشكلة، وقد تكون مشكلة في الأكبال أو في التوصيلات، أو ببساطة أن الكابل ليس موصولًا، أو غير ذلك من الأخطاء التي ستجعل المبدِّلات تُعطِّل البطاقة. Switch#sh interfaces fa 0/1 FastEthernet0/1 is up, line protocol is up (connected) Hardware is Fast Ethernet, address is 0023.aca4.f091 (bia 0023.aca4.f091) MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full-duplex, 100Mb/s, media type is 10/100BaseTX input flow-control is off, output flow-control is unsupported ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:00:14, output 00:00:00, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 1 Queueing strategy: fifo Output queue: 0/40 (size/max) 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 5000 bits/sec, 6 packets/sec 1065544 packets input, 229455974 bytes, 0 no buffer Received 109157 broadcasts (99147 multicasts) 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0 watchdog, 99147 multicast, 0 pause input 0 input packets with dribble condition detected 8430743 packets output, 1316399122 bytes, 0 underruns 0 output errors, 0 collisions, 1 interface resets 0 babbles, 0 late collision, 0 deferred 0 lost carrier, 0 no carrier, 0 PAUSE output 0 output buffer failures, 0 output buffers swapped outويمكن أيضًا أن يكون معطلًا إداريًا، الذي يعني أنه قد أُغلِقَ يدويًا من مدير وسيتم تفعيله مرةً أخرى بأمرٍ بسيط. والإحصائيات مهمةٌ أيضًا، لأن وجود رسائل خطأ هنالك تعني وجود مشاكل فيزيائية، فلو كانت هنالك أخطاء عدِّة من نوع CRC، فهذا يعني وجود تشويش (noise) في الشبكة أو وجود عطب في معدات إيثرنت؛ وبشكلٍ مشابه، أخطاء «overruns» تعني أن معدَّل الدخل تجاوز قدرة معالجة المبدِّلات للبيانات، وتجاهل الإطارات يعني أن ذاكرة التخزين المؤقت قد أصبحت منخفضةً في المبدِّل. ستحصل أيضًا على إشارة لأخطاء الخرج، وعدد التصادمات (الذي لن يمثِّل دلالةً على حدوث مشكلة، بل تغير الرقم يدل على حدوثها)، وأيضًا عدد إعادات تشغيل المبدِّل يشير إلى عدد مرات إعادة تشغيل متحكِّم إيثرنت بسبب الأخطاء. التشويش في الخلفيةإذا كنت تشك في وجود تشويش (noise)، فعليك النظر إلى عدد أخطاء CRC أو بالأحرى التغير في عدد أخطاء CRC غير المتعلقة بالتصادمات؛ بكلامٍ آخر، قد تكون أخطاء CRC نتيجةً للتصادمات، لكن عدد التصادمات ذا وتيرةٍ ثابتة، ولا يكون فيه تغييرات كبيرة؛ وبهذا تكون أخطاء CRC نتيجةً للتشويش (excessive noise). عندما يحدث ذلك، فإن أول خطوة هي التحقق من الكابل، ويمكنك استخدام أدواتٍ خاصة بهذا الغرض؛ ربما يكون السبب هو التصميم السيئ للشبكة عبر استخدام أكبال ليست من تصنيف CAT-5 في شبكات Fast Ethernet و ‎100 Mb/s؛ فربما تستطيع حلّ هذه المشكلة عبر اختبار الأكبال وعبر قراءة توثيق تصميم الشبكة. التصادماتإذا تجاوز تواتر حدوث تصادمات حدًا معيّنًا في شبكتك، فهنالك أنواعٌ مختلفة من الحلول لهذه المشكلة؛ وهنالك عدِّة قواعد تتعلق بتلك الحدود. أغلبيتها تشير إلى أن التصادمات يجب أن تكون أقل من 0.1 بالمئة من الرزم. إن شكَّلت التصادمات مشكلةً، فربما السبب هو جهازٌ معيب، على سبيل المثال، بطاقةٌ شبكيّة تُرسِل رزمًا غير مفهومة إلى الشبكة؛ وهذا يحدث عادةً عندما يكون هنالك تماس أو أخطاء منطقية أو فيزيائية في الجهاز. يمكن استخدام جهاز «time domain reflectometer» أو TDR للعثور على أكبال إيثرنت ذات النهايات غير الموصولة؛ التي قد تعكس الإشارات إلى الشبكة وتسبب تصادمات. التصادمات المتأخرةنحن نعلم أنَّ التصادمات تحدث عندما تكتشف إحدى محطات إيثرنت إشارةً عندما تحاول إرسال إطار. التصادمات المتأخرة (late collisions) هي نوعٌ خاصٌ من التصادمات؛ إذا حصل التصادم بعد إرسال أول 512 بت من البيانات، فيقال أن «تصادمًا متأخرًا» قد حدث. وأهم ما هنالك أنَّ التصادمات المتأخرة لا يُعاد إرسالها عبر بروتوكول إيثرنت، على العكس من التصادمات التي تحدث قبل إرسال أول 64 بايت؛ إذ ستصبح مهمة الطبقات العليا من تجميعة البروتوكولات أن تُحدِّد إن كان قد حصل تفقدان للبيانات، ثم ستتخذ قرارًا بطلب إعادة الإرسال. لا يجب أن تحدث التصادمات المتأخرة في شبكات إيثرنت مصمّمة جيدًا؛ المسببات المحتملة هي استخدام أكبال غير ملائمة، أو عدد كبير من الموزِّعات في الشبكة، أو ربما بطاقة شبكيّة سيئة تسبب تصادماتٍ متأخرة. يمكن الكشف عن التصادمات المتأخرة عبر برمجيات تحليل البروتوكولات (protocol analyzers) وبالتحقق من المسافات الفيزيائية للأكبال وحدود (limits) بروتوكول إيثرنت. مشاكل في الوصول إلى المنافذيكون عادةً للمشاكل في الوصول إلى المنافذ أعراضٌ ظاهرةٌ للعيان، فلن يتمكن المستخدمون من الاتصال إلى الشبكة، وسيلاحظ فريق الدعم المشكلة بسرعة لأن المستخدمين سيشتكون منها؛ كل تلك المشاكل متعلقةٌ بالوسائط والمعدِّات والبطاقات الشبكية المعيبة ...إلخ. وجزءٌ كبيرٌ منها سيكون متعلقًا بإعدادات duplex و السرعة. يحدث أحد أكبر مسببات مشاكل الأداء في خطوط Fast Ethernet عندما يعمل منفذٌ من الوصلة باتجاهٍ وحيد (half-duplex)، بينما يعمل المنفذ الثاني من الوصلة باتجاهين (full-duplex)؛ وهذا يحدث عندما لا تثمر المفاوضة التلقائية (auto-negotiation) بحصول المنفذين على نفس الضبط؛ وهذا قد يحدث عندما يضبط المستخدم أحد المنافذ وينسى أن يضبط الآخر؛ بكلامٍ عام، يجب أن تكون المفاوضة التلقائية مفعّلةً على كلا الجانبين أو معطلةً؛ لكن ضبط duplex تابع لضبط السرعة، فلو ضُبِطَت السرعة إلى auto، فلن يمكن أن يُضبَط duplex يدويًا؛ ربما تجد رسائل أخطاء CRC عندما تُضبَط خيارات السرعة و duplex يدويًا على كلي الجهازين. مشاكل متعلقة بنمط Duplexهذا ملخصٌ عن المشاكل المتعلقة بنمط duplex؛ عندما تكون نهايةٌ مضبوطةٌ إلى full والأخرى إلى half فالنتيجة هي رسالة خطأٍ ظاهرة. نهاية مضبوطة إلى full والثانية إلى المفاوضة التلقائية ستؤدي إلى الرجوع إلى نمط الاتصالات أحادية الاتجاه إن فشلت المفاوضة التلقائية. ستؤدي التشكيلات الأخرى إلى الرجوع إلى نمط الاتصال أحادي الاتجاه؛ وحتى النهايات المضبوطة للمفاوضة التلقائية قد تستعمل ضبطًا مختلفًا، على سبيل المثال، القيمة الافتراضية لاتصالات gigabit Ethernet هي full-duplex، بينما القيمة الافتراضي لمنافذ 10/100 هي half-duplex. وبغض النظر أنَّ المفاوضة التلقائية هي ميزة مفيدة، لأنها تسمح لك بالحصول على منافذ شاملة (generic) تسمح بأي نوع من الاتصال، لكنها قد تكون مشكلةً ويتم تجنبها بتفضيل الضبط الثابت عليها. المشاكل المتعلقة بالسرعةأمرٌ مشابهٌ يحدث مع المشاكل المتعلقة بالسرعة؛ فإذا ضبطت نهايةً إلى سرعةٍ ما وضبطت الأخرى إلى سرعةٍ أخرى، فلن يحدث تطابق؛ وحتى لو كنت تستخدم ميزة المفاوضة التلقائية، فإن النتيجة هي عدم تطابق إن كان أحد الجانبين مضبوطًا على المفاوضة التلقائية ولكن لم يُضبَط الطرف الآخر عليها. نمط duplex متعلق كثيرًا بالسرعة وقد تؤدي المفاوضة التلقائية على السرعة إلى تغيير نمط الاتصال إلى أحادي الاتجاه. المشاكل المتعلقة بالضبطقد تتعلق بعض المشاكل بالضبط، فبعضها مرتبطٌ بفقدان الضبط وعدم وجود نسخ احتياطية منه، وبعضها متعلقٌ بمشاكل تغيير الإدارة؛ ففي تلك الحالة، فيستحسن أن تُصمَّم منهجية ضبط إدارة جيدة. أولى الخطوات هي إنشاء نسخ فيزيائية من الملفات النصية، وجعل الضبط مركزيًا في خوادم TFTP مثلًا، لكن خذ بعين الاعتبار المحدوديات الأمنية لاستخدام TFTP. بخصوص تغيير الإدارة، خذ نسخًا متعددة قبل وبعد التغييرات، وتأكد من أنَّك قادرٌ على الرجوع إلى الإعدادات القديمة إن سببت مشاكل في أماكن أخرى؛ احفظ دومًا الضبط في NVRAM، كي يكون متاحًا في المرة القادمة التي تعيد فيها التشغيل. أخيرًا، أمّن الضبط بحماية الطرفية و VTY وغيرها من طرق الوصول إلى الأجهزة بكلمة مرور؛ وأمِّن أيضًا النسخ الاحتياطية من ملفات الضبط على الخواديم وغيرها من الأماكن. ترجمة -وبتصرّف- للمقال Troubleshooting Switch Issues.
  6. يقدِّم لك هذا الدرس أدواتٍ لتحسين الأداء للبنية التحتية للمبدِّلات عندك لكي تواجه متطلباتٍ قاسيةً متعلقةً بالتراسل الشبكي؛ وهذا يتضمَّن التجزئة المُصغَّرة (micro segmentation) عبر مجالات التصادمات (collision domains)، واستخدام الاتصالات ثنائية الاتجاه (full-duplex)، ومعدَّلات تدفق مختلفة للوسائط مثل اتصال 1 غيغابت و10 غيغابت؛ وسنشرح أيضًا بروتوكول الشجرة الممتدة (spanning tree) كطريقة لاكتشاف الحلقات (loops) ومنعها. التجزئة المصغرةإحدى ميزات المبدِّلات هي قدرتها على التجزئة المُصغَّرة (micro segmentation)، التي ليس لها أيّة علاقة بتمرير الرزم الشبكية بذكاء بين المنافذ الوجهة والمصدر؛ إذ أنها القدرة على تقسيم الأجهزة المتصلة إلى عدِّة مجالات تصادمات؛ ففي الأيام الخالية، كان للموزِّع (hub) مجالَ تصادماتٍ وحيدًا وهذا يعني أنَّ جميع الأجهزة التي تتصل إلى الموزِّع سترى بعضها عندما تحاول الإرسال. يمكنك القول أنَّ جهازًا واحدًا سيستطيع الإرسال في وقتٍ معيّن، حيث يتحسس بقية الأجهزة القناة (channel) ويتراجعون عن الإرسال ثم سيحاولون لاحقًا استنادًا إلى بروتوكول CSMA/CD الذي يحكم آلية عمل بروتوكول إيثرنت. وفي حالة المبدِّلات، يمثِّل كل منفذٍ مجال تصادمات، ولهذا تستطيع القول أنَّه لا توجد تصادماتٌ في بيئةٍ تعتمد على المبدِّلات؛ وهنالك مكوِّن داخلي في المبدلات يسمح بأن تُجرى عدِّة «محادثات» (conversations) في نفس الوقت (تسمى هذه الميزة بالمصطلح switching fabric). ولكي يحصل هذان الأمران سويةً، فيجب أن يكون كل منفذٍ مجالَ تصادماتٍ منفصل وأنَّ يسمح switching fabric بأن تُجرى عدِّة محادثات في نفس الوقت. هذا شبيهٌ بعملية انتقال كل سيارة إلى العمل في «حارة» في الطريق السريع الذي يحتوي على عدِّة خطوط (أو حارات) للسماح لعدِّة سيارات بالمرور في نفس الوقت؛ تُحدِّد كميّة switching fabric عدد المحادثات التي تجري في وقتٍ واحدٍ في المبدِّل، لذا كلما كان الرقم أكبر كان ذلك أفضل؛ يُقاس switching fabric بوحدة البت في الثانية، وبعض المبدلات العصرية يمكنها تحتوي switching fabric بوحدة الغيغابت في الثانية، أو حتى تيرابت في الثانية. لمحة عن Duplexالاتصالات ثنائية الاتجاه (full-duplex) هي ميزةٌ أخرى من ميزات المبدِّلات؛ حيث تُستخدَم لحل مشاكل التراسل الشبكي. ففي الاتصالات ثنائية الاتجاه -مثلًا بين الخادوم والمبدِّل- يمكن زيادة التراسل الشبكي الفعال (effective bandwidth) بالسماح للأجهزة بالإرسال والاستقبال في نفس الوقت؛ أي بكلامٍ آخر، إذا كانت لديك وصلةٌ بسرعة ‎100 Mb/s ثنائية الاتجاه، فإن التراسل الشبكي الفعال سيكون ‎200 Mb/s؛ وهذا يكون للاتصالات من نقطة إلى نقطة فقط؛ أي بكلامٍ آخر، إذا أردت وصل موزِّع إلى مبدِّل (الأمر الذي يُعتَبَر وصل نقطة إلى عدِّة نقط، لأن الموزِّع يجب أن يحدد ويفهم أين حصلت التصادمات) فيجب استخدام اتصالات أحاديّة الاتجاه (half-duplex). في هذه المرحلة، سيكون لديك مرور للبيانات باتجاه وحيد مع احتمالٍ كبير بحدوث تصادمات، وستحصل على أيّة حال على تصادمات في بيئةٍ تستعمل موزِّعًا؛ فستستعمل إحدى القنوات للإرسال أو الاستقبال، وستستعمل الأخرى لتحسس التصادم؛ أما الاتصالات ثنائية الاتجاه (full-duplex) فهي تضمن اتصالاتٍ خاليةً من التصادمات بناءً على افتراض وجود بيئة تعتمد على التجزئة المُصغَّرة. مثالٌ على ذلك هو محادثةٌ عبر جهاز الراديو الذي يشبه الاتصال أحادي الاتجاه؛ فإذا كنت تتحدث، فعليك التوقف عن ذلك كي تسمح للطرف الآخر بالتحدث؛ أما الاتصالات ثنائية الاتجاه فهي تشبه المحادثات الهاتفية، حيث يمكن للطرفين التحدث في نفس الوقت. ضبط خيارات Duplex وخيارات السرعةيمكنك تغيير إعدادات Duplex والسرعة عبر استخدام هذه الأوامر: بعد الذهاب إلى نمط ضبط البطاقات (interface configuration mode) يمكنك استخدام الأمر duplex لإنشاء ضبط ثابت إما باتجاهٍ واحد (half-duplex) أو باتجاهين (full-duplex)؛ أما لو استخدمت الكلمة المحجوزة auto، فستُفعِّل استخدام المفاوضات التلقائية (auto negotiating) لاختيار أيهما أفضل. الأمر speed موجودٌ أيضًا في نمط ضبط البطاقات، ويمكنك تحديد السرعة التي تريدها إما 10 أو 100 أو 1000 ميغابت في الثانية، أو ربما تريد أن يتم اختيارها تلقائيًا باستخدام الكلمة auto؛ القيمة الافتراضية لمنافذ Fast Ethernet بسرعة 10/100/1000 هي «المفاوضة التلقائية» (auto negotiating)، أما القيمة الافتراضية لمنافذ Gb/s التي تستعمل الأكبال الضوئية هي ثنائية الاتجاه (full-duplex). يمكن عرض الضبط باستخدام الأمر show interfaces لترى إن كان قد ضُبِطَ ضبطًا ثابتًا أم كان تلقائيًا، إذ سيظهر عندك ضبط duplex وحالته وخيارات السرعة. يجدر بالذكر أنه قد تفشل المفاوضات التلقائية وبهذا سيُضبَط المنفذ إلى نمط الاتصال باتجاه وحيد، وهذا قد لا يتلاءم مع الجهاز، ولمنع حدوث هذه المشكلة فيجب عليك ضبط إعدادات duplex يدويًا. التسلسل الهرمي للاتصالات – نموذج الطبقات الثلاثعندما تفكِّر في السرعة والتراسل الشبكي وفي خطوط ‎10 Gb/s كخطوطٍ تستعمل للخوادم في الوقت الراهن، فربما تجد أنه من المثالي أن تستطيع توفير خطوط بسرعات ‎10 Gb/s لجميع اتصالات الشبكة؛ لكن هذا الأمر مكلفٌ للغاية؛ إحدى النهج في التصميم هي تقطيع الشبكة إلى أقسام وتحديد مقدار التراسل الشبكي بناءً على حاجة كل قسم. نموذج الطبقات «الأساس – التوزيع – الوصول» (core distribution access) يدعو إلى وجود طبقة وصول لتوفير الاتصالات إلى النهايات الشبكيّة ثم يُخصَّص التراسل الشبكي وغيره من الميزات والوظائف تبعًا للنهايات المتصلة؛ على سبيل المثال، يمكن أن تتصل مجموعة خواديم إلى طبقة الوصول وربما تجد وصلات 1‎ ‎Gb/s أو حتى ‎10 Gb/s هناك؛ لكن طبقة الوصول لمبنى خدمي ستحتوي على وصلات بسرعات ‎100 Mb/s أو ‎1 ‎Gb/s؛ تجمع طبقة التوزيع بين عدِّة مجموعات وصول وتصب فيها الخطوط الصاعدة (uplinks) القادمة من مبدِّلات طبقة الوصول. هذا سببٌ لزيادتك لاشتراكك في التراسل الشبكي، لأنك تعلم أنَّه من المستبعد أن تُرسِل جميع الأجهزة في مجموعات الوصول في نفس الوقت. فطبقة الأساس (core) ستصل بين عدِّة مجموعات توزيع وهنا مكان نقل غالبية بيانات الشبكة، وخصوصًا أنَّ الموارد (resources) في شبكاتنا العصرية تكون خارج مجموعات الوصول مثل شبكة الإنترنت. ليست كمية التراسل الشبكي هي الخاصية أو المورد الوحيد الذي يُخصَّص عبر هذا النموذج، يمكنك مثلًا أن تجعل حماية طبقة الوصول قويةً، وبهذا سنستطيع الإمساك بالأشخاص السيئين قبل أن يصلوا إلى الشبكة؛ وهنالك أدواتٌ مثل الجدر النارية وجودة الخدمة (quality of service) موجودةٌ في طبقة التوزيع وطبقة الأساس. الحلقاتعند بناءك للتسلسل الهرمي، فربما تضع به بعض الآليات التعويضية (redundancy) في بعض الوحدات؛ على سبيل المثال، تتطلب طبقة الأساس مستوى معيّن من القدرات التعويضية والوثوقية لأنها ستنقل أغلبية بيانات التراسل الشبكي، وخصوصًا البيانات القادمة من مجموعات طبقة التوزيع. عندما تبني آليات التعويض، فربما ستنشِئ حلقات من المبدلات كما هو مبيّن في الشكل. استخدام الحلقات فكرةٌ جيدة عندما تريد أن يكون لديك تعويض ووثوقية وتوفر دائم لشبكة؛ فإذا أنشَأت حلقاتٍ مثل الموضَّحة بالشكل، فلن يشكل لك خروج جزءٍ من الشبكة انقطاعًا للاتصال، لأن البيانات ستجد طريقًا آخر لتصل إلى وجهتها. البيانات المُرسَلة إلى وجهاتٍ غير معروفةٍ ستتبع طريقًا مشابهًا وخصوصًا بيانات الإذاعة؛ مما سيؤدي إلى تقليل جودة أداء المبدلات والتسبب في مرور بيانات غير مرغوبة في الشبكة؛ التي ستُعالَج من جميع الأجهزة على الشبكة، وستسبب تخفيضًا في أداء الحواسيب والخوادم. بروتوكول الشجرة الممتدة (Spanning Tree Protocol)الحل الرئيسي لمنع تشكيل حلقات هو بروتوكول الشجرة الممتدة المعروف باسم STP؛ الذي يدير الوصلات (links) عبر عملية معيّنة؛ حيث سيمنع تشكيل الحلقات عبر حجب المنافذ والتخلص منطقيًّا من الحلقة. وهذا لا يعني أن يُعطَّل المنفذ أو يقطع عنه الاتصال؛ بل سيُحجَب من وجهة نظر الشجرة الممتدة. وعبر حجب ذاك المنفذ، سيمنع تشكيل الحلقة وستتوقف المشاكل الناتجة عن الحلقات. آلية العمل في الشجرة الممتدة هي تعيين مدير للشبكة يسمى الجسر الجذر (root bridge)؛ الذي يُرسِل ما يسمى PBDU أو bridge protocol data units لإنشاء بنية شجريّة متناسقة على الشبكة؛ وهذا يعني أنَّ اختيار الجسر الجذر ديناميكي، وسيتم اختيار الطريق ذي الأولوية القصوى ليكون جسرًا، وهذا يعني لو أن ذاك الطريق قد توقف عن العمل، فإن مبدِّلات أخرى ستأخذ مكانه وتصبح جذورًا (roots). الجزء الثاني من العملية هو اختيار المنفذ الذي سيُحجَب لمنع تشكيل الحلقة، ويتم اختياره ليكون أبعد المنافذ عن الجذر؛ وفي النهاية، سيُحجَب منفذٌ وحيد وستعلم تلك المبدلات أن عليها ألا تنقل البيانات عبره؛ مما يشكِّل مخططًا شبكيًّا خاليًا من الحلقات، مما يخلصنا من المشاكل المتعلقة بالمعدات التعويضية في الشبكة. ترجمة -وبتصرّف- للمقال Maximizing the Benefits of Switching.
  7. ccnd1/ccent 100-101

    يمكننا رؤية أمن المبدِّلات بعدِّة أبعاد؛ أحدها هو البعد الفيزيائي والبيئي الذي يتضمّن عدِّة فئات وتصنيفات -المذكورة هنا- تتعلق تهديدات الأجهزة بالضرر الفيزيائي للمعدّات، قد يكون سوء الاستعمال سببًا في هذا وليس بالضرورة أن يكون الضرر متعمّدًا؛ فقد يكون السبب قادمًا من الإدارة السيئة للتغييرات أو السياسات غير الحريصة في تثبيت العتاد الفيزيائي؛ وعدم وجود سياسة خاصّة بالتعامل مع المعدات. أما التهديدات البيئية فهي متعلقة بدرجات الحرارة الكبيرة والرطوبة؛ لكن مركزَ بياناتٍ بتصميم جيد لحاويات الأسلاك (wiring closet) -يتّبِع أفضل الممارسات العملية المتعلقة بالمكان الفيزيائي والتبريد ...إلخ. سيساعد في تخفيف هذه الأخطار. قد تكون التهديدات الكهربائية أكثر شيوعًا وهي تتراوح بين ارتفاع مفاجئ في الجهد (voltage spikes) إلى التيار الكهربائي غير المستقر أو إلى فقدان تام للطاقة الكهربائية. يمكن تجنب هذه المخاطر باستخدام وحدات عدم انقطاع التيار (UPS). تهديدات الصيانة متعلقة بمنهجية وعملية تصميم المكان الفيزيائي للمعدات، إذ ستشكِّل تمديدات الأكبال السيئة تهديدًا أمنيًا إذا سببت في مشكلة كهربائية أو مشكلة في العتاد إذا أدّت إلى إسقاط المعدات على الأرض. وقد يُشكِّل أيضًا نقصان قطع التبديل تهديدًا أمنيًا؛ الذي يُثبِت مدى سوء التصميم والتخطيط من ناحية إمكانية تعويض المعدات. ضبط كلمة مرور للمبدلقد تكون التهديدات الأخرى متعلقةً بالاستيثاق وإدارة الهويات؛ وهذه هو السبب وراء ضبطنا لكلمات المرور وتوفير تحكم بالوصول مع استخدام كلمات المرور. قد يتعلق إعدادٌ بسيطٌ لكلمة المرور بخطوط وصولٍ (access lines) معيّنة إلى المبدِّل -على سبيل المثال- الطرفية (console)، وخطوط VTY المتعلقة بوصول الطرفية إلى المعدات؛ وهنالك قواعد للتحكم بالوصول عبر Telnet و SSH، لكن بعد أن تتصل إلى المعدات باستخدام طرفية أو Telnet، فستتمكن من الدخول إلى وضع المستخدم ذي الامتيازات بكلمة مرور، وهذا أمرٌ أخرٌ يجب علينا أخذه بعين الاعتبار. أحد الأمور الشائعة لكل كلمات المرور تلك هي أنها مضبوطة وثابتة لكل خط وصول أو لكل وظيفة مثل enable password. SwitchX(config)#no aaa new-model SwitchX(config)#line console 0 SwitchX(config-line)#login % Login disabled on line 0, until 'password' is set SwitchX(config-line)#password cisco SwitchX(config-line)#exi SwitchX(config)#line vty 0 4 SwitchX(config-line)#login % Login disabled on line 2, until 'password' is set % Login disabled on line 3, until 'password' is set % Login disabled on line 4, until 'password' is set % Login disabled on line 5, until 'password' is set % Login disabled on line 6, until 'password' is set SwitchX(config-line)#password sanjose SwitchX(config-line)#exi SwitchX(config)#enable password cisco SwitchX(config)#enable secret sanfran SwitchX(config)#service password-encryptionطريقةٌ أخرى أكثر تقدمًا هي ربطها إما مع مستخدمين محليين أو مستخدمين مركزيين، وبهذا تستطيع استخدام تحكم بالوصول مستند إلى الدور (role-based access control) لإدارة الجهاز. تُستعمَل الأوامر المذكورة في الأعلى لإعداد كلمات مرور للخطوط؛ ربما تريد أن تُفعِّل عملية الاستيثاق على أحد الخطوط؛ ثم يمكنك ببساطة إعداد كلمة مرور دون تشفير لكن هنالك طريقة مُحسّنة هي تفعيل كلمة المرور مع تشفير أو إخفاء كلمة المرور باستخدام آليات التعمية (hashing mechanisms). تكون جميع كلمات المرور بنصٍ واضح وتُعرَض كما هي في أوامر: show running-config و show startup-configإذا أردت إخفاء الأوامر وتشفيرها تشفيرًا بسيطًا، فيمكنك استخدام الأمر last، بعد أن تنفِّذ ذاك الأمر، فسيتم تشفير جميع كلمات المرور الجديدة، ويمكنك تعطيل هذه الآلية باستخدام نسخة no من ذاك الأمر. ضبط لافتة تسجيل الدخولستساعدك لافتات تسجيل الدخول على إيصال رسالة معيّنة إلى المستخدمين الذين تم الاستيثاق من دخولهم إلى المبدِّل؛ يمكن للافتات خدمة غرض إظهار معلومات، وعرض السياسة للمستخدمين الذين لم يتم الاستيثاق من دخولهم. يمكنك ضبط اللافتة بواسطة الأمر banner. الوصول عبر Telnet أو SSHتاريخيًا، كان Telnet أشهر الخيارات للوصل بين موجَّهَين لأغراض الإدارة، وكذلك للاتصال إلى المبدِّلات؛ لكنه غير آمن لأنه لا يوفر تشفيرًا للاتصال؛ أي بكلامٍ آخر، يمكن لمتلصصٍ أن يجمع رزماتٍ شبكيّة من الاتصال ويعلم الأوامر التي تستعملها وقد يستطيع سرقة كلمات مرورك، إذ أنها لا تشفَّر؛ أما SSH بإصدارَيه 1 و 2، سيشفِّر عملية نقل البيانات وسيخدم بنفس الوقت غرض الاتصال إلى جهازٍ لضبطه؛ وربما يوفِّر الإصدار الثاني من SSH خوارزمية تشفير أكثر تعقيدًا. إذا أردت استخدام SSH، فعليك إنشاء مفاتيح للتشفير، وعليك استخدام الأمر: crypto key generate rsa لإنشاء المفاتيح، وتلك المفاتيح مرتبطة أو تحتوي على اسم نطاق (domain name)، وهذا هو السبب وراء حاجتنا لذاك الأمر. يمكنك أيضًا تعريف قاعدة بيانات مستخدمين محليّين؛ يمكنك إضافة المستخدمين بالأمر username. طريقة ضبط أكثر تقدمًا هي استخدام خواديم AAA، أي خواديم الاستيثاق والتصريح والحسابات (authentication authorization and accounting servers) لجعل قاعدة بيانات المستخدمين مركزية وتوفير إمكانية التوسع لعدِّة أجهزة، التي تتشارك قاعدة البيانات نفسها من خادوم مركزي. ضبط حماية المنافذآلية تأمينٍ إضافيةٌ في المبدِّلات مثل Catalyst 2960 هي حماية المنفذ؛ وتسمح لك تلك الميزة بتحديد عدد عناوين MAC التي يمكنك تعلمها في منفذ معيّن، ويمكنك أيضًا تحديد عناوين MAC التي تسمح لها في منفذٍ معيّن. هذا نوعٌ من آليات التأمين في الطبقة الثانية التي تساعد في الحماية الفيزيائية عبر تحديد من يمكنه الاتصال عبر منفذٍ ما، وكم جهازًا يستطيع الاتصال. عملية الضبط سهلة جدًا، حيث تبدأ بالأمر switchport في نمط ضبط المنافذ. لنلقِ نظرةً على بعض الخيارات بالنظر إلى مثال ضبط قياسي، أول شيء ستفعله لضبط البطاقة fa0/5 هو تفعيل المنفذ كمنفذ وصول (access port) وليس كمنفذ trunk؛ يسمح منفذ الوصول بوصل النهايات مثل محطات العمل والحواسيب المحمولة. الخطوة الثانية هي تفعيل تأمين المنفذ؛ الخطوة الثالثة هي تعريف العدد الأقصى من عناوين MAC، الوسيط maximum 1 يعني أنك ستسمح بعنوان MAC وحيد بالاتصال إلى هذا المنفذ. Switch(config)#interface fa0/5 Switch(config-if)#switchport mode access Switch(config-if)#switchport port-security Switch(config-if)#switchport port-security maximum 1 Switch(config-if)#switchport port-security mac-address sticky Switch(config-if)#switchport port-security violation shutdownوكما نعلم، تتعلم المبدِّلات عناوين MAC، ولهذا سيكون العنوان المُسنَد إلى المنفذ ديناميكيًا، ولكن بعد أن يتعلم المبدِّل عنوان MAC، فلن يقبل أي شيءٍ أكثر من العدد الأقصى؛ فلنقل أنك ضبطت العدد الأقصى إلى 10، فإن أعيد تشغيل المبدِّل، فسيتم نسيان تلك العناوين، وإذا أردت من المبدِّل أن يتذكرها، فعليك أن تجعلها ثابتةً باستخدام الكلمة المحجوزة sticky. في النهاية، عليك تحديد ماذا سيحصل عندما يتم تجاوز الحدود التي ضبطتها؛ هنالك عدِّة خيارات، يمكنك أن تعطِّل المنفذ (shutdown) وعليك إعادة تفعيله يدويًا بعد ذلك؛ أو يمكنك أن تعطِّل المنفذ مؤقتًا، أو أن تترك المنفذ على حاله لكن سترسِل رسالة syslog لكي يعلم المدراء أن الحدود قد تم تجاوزها. تستطيع عرض الإعداد والحالة لجميع البطاقات أو بطاقات معيّنة بعد ضبط حماية المنافذ، يمكنك استخدام الكلمة address لعرض عناوين MAC المرتبطة بالبطاقة؛ وهو أمرٌ بسيط سيعرض إن كان تأمين المنفذ مُفعّلًا وحالته إن كان كذلك؛ وفي هذه الحالة، «secure up» تعني أنه لم تحدث تجاوزات للحماية. ما سيحدث عندما يحصل تجاوز ما هو تعطيل المنفذ، فعدما يتصل عنوان MAC غير معروف أو تتجاوز عناوين MAC الحد المعيّن، فسيتم تعطيل المنفذ. عندما تُحدَّد قيمة بالدقائق لعناوين MAC المُسجَّلة، فيمكن أن تُزال تلقائيًا بعد أن يفصل اتصالها دون الحاجة إلى إزالتها يدويًا. أخيرًا، عدد عناوين MAC هو العدد الكلي لعناوين MAC التي يمكن للمنفذ تعلمها، وستُعرَض الإعدادات الثابتة (sticky configuration) وعدد التجاوزات التي حصلت في منفذ المبدِّل. تأمين المنافذ غير المستخدمةأفضل الممارسات العملية هي تأمين المنافذ غير المُستخدَمة التي قد تُشكِّل ثغراتٍ أمنيةً لأنها مفعَّلة افتراضيًا؛ إن كان لديك DHCP على شبكتك ولم تكن توفِّر حمايةً فيزيائيةً لها، فيمكن الوصول إلى شبكتك دون إذنك؛ لذا يُنصَح بتعطيل بطاقات المنافذ غير المُستعمَلة. ولهذا سنستخدم الأمر shutdown بالذهاب إلى وضع ضبط البطاقات وتحديد البطاقات التي نريد تعطيلها. في الإصدارات الحديثة من نظام تشغيل IOS، ستعثر على خيار لتحديد مجال من البطاقات لتعطلها في آن واحد؛ تذكر أنك تستطيع إعادة تفعيل البطاقة باستخدام نسخة no من أمر التعطيل؛ أي بكلامٍ آخر، الأمر shutdown سيعطِّل البطاقة إداريًا، بينما no shutdown سيفعِّلها. ترجمة -وبتصرّف- للمقال Understanding Switch Security.
  8. icnd1/ccent 100-101

    لا يمكننا ضبط المبدِّلات إن لم تكن مُهيّئة بعد؛ سنشرح في هذا الدرس عملية بدء تشغيل نظام سيسكو IOS للمبدِّلات ونساعدك في التعرّف على الخطوات بالنظر إلى مخرجات الإقلاع. ثم سندخل إلى المبدِّل ونضبطه عبر واجهة سطر الأوامر، ثم سنتأكد من عمله عبر استخدام أوامر show المناسبة. الضبط الابتدائي لمبدلات Catalystتكون مبدِّلات سيسكو جاهزةً لتوفير قابلية الاتصال ووظائف الطبقة الثانية عند إقلاعها. تتضمن عملية الإقلاع سلسلةً من إجراءات الإقلاع لتهيئة النظام وجعل وظائفه متوفرةً. الضبط الافتراضي يتضمن إنشاء مِحَث للمبدِّل، وتعريف أساسي للمنافذ (أو البطاقات) الذي هو تمكينها جميعًا؛ وإذا أردت مراقبة العملية، فتأكد من أنَّك تملك اتصالًا للمبدِّل عبر طرفية (console)، أو أنَّ لديك عميل طرفية مثل HyperTerminal أو PuTTY. في المبدِّلات الأبسط، يؤدي وصل شريط الطاقة مباشرةً إلى تشغيل المبدِّل وبدء عملية التهيئة. وفي هذه المبدِّلات البسيطة، لن تجد زر «on» أو «off» كما في المبدِّلات الأكثر تعقيدًا مثل المبدِّلات في طبقة التوزيع (distribution layer) والمبدِّلات الأساسية (core layer switches)؛ يمكنك مراقبة تسلسل عملية الإقلاع فيزيائيًا بالنظر إلى المبدِّل وملاحظة أضواء LED في هيكل المبدِّل، وأيضًا عبر اتصال الطرفية بالنظر إلى مخرجات نظام IOS، التي تعرض معلوماتٍ عن التشخيص وعملية التهيئة بأكملها. لاحظ أن هذه الدورة التدريبية مبنية على المبدِّل Catalyst 2960، وقد تختلف المخرجات أو الأوامر عن غيرها من المبدِّلات. إشارات أضواء LED في مبدِّلات Catalyst 2960 تُظهِر الصورة أضواء LED في Catalyst 2960، تعرض الأضواء المختلفة معلوماتٍ قيّمة عن حالة وإمكانيات المبدِّل. فضوء النظام (system LED) سيضيء بالأخضر لو كان النظام مشغلًا ويعمل عملًا سليمًا، ولكنه سيصفر إذا كانت هنالك أخطاء عند الإقلاع أو مشكلة في النظام؛ وسيومض لونٌ أصفرٌ في ضوء مزود الطاقة (power supply LED) إن فشل مزود الطاقة الرئيسية بإمداد المبدِّل بالطاقة وأصبح مزود الطاقة التعويضي يعمل بدلًا عنه. أما أضواء المنافذ فلها معانٍ مختلفة. مهمة زر «النمط» (mode) هي التبديل بين الأنماط المختلفة التي تُعطي معانٍ مختلفة لأضواء المنافذ؛ على سبيل المثال، إذا اخترت نمط «stat» أو «الحالة» فهذا سيجعل أضواء المنافذ تومض باللون الأخضر إن كان هنالك اتصالٌ وكان ذاك الاتصال نشطًا؛ لكنها ستصفر إن أُغلِق المنفذ من المدير أو حُجِبَ بواسطة بروتوكول الشجرة الممتدة (spanning tree)؛ ومثلًا، لو بدَّلت إلى نمط «الاستعمال» (utilization)، فإن عددًا من المنافذ ستضيء بالأخضر، مُظهِرةً حجم مرور البيانات في المبدِّل؛ فمثلًا، عندما تُظهِر كل أضواء LED لونًا أخضرًا فهذا يعني أن المبدِّل يعمل بنسبة 50% من قدرته، ويشير عدد أضواءٍ آخر إلى نسبٍ أخرى. مخرجات الإقلاعسيُظهِر نظام IOS معلوماتٍ أكثر تحديدًا، فيعرض -بالإضافة لغير ذلك من الأمور- عنوان MAC للمبدِّل ومختلف مراحل عملية التهيئة؛ ويُظهِر أيضًا مسار صورة نظام التشغيل الذي تُحمِّل منه، وحالة عملية التحميل؛ وبعد إتمام عملية التهيئة، سنحصل على وصول إلى واجهة سطر الأوامر؛ لكن إن كانت ملفات ضبط المبدِّل فارغةً، فسنحوَّل مباشرةً إلى نمط الإعداد الذي سيبدأ بسؤالنا أسئلةً عن الضبط الأساسي؛ يمكنك الانتقال إلى نمط الإعداد في أيّ وقتٍ باستدعاء الأمر setup. الدخول إلى المبدل والتحويل إلى نمط EXEC بمستخدم ذي امتيازاتستكون في نمط EXEC عندما تدخل إلى واجهة سطر الأوامر، حيث يسمح لك ذاك النمط بمراقبة وعرض وصيانة المبدِّل، لكنه يعتمد على الدور المُسنَد لك؛ فالأدوار هي نمط المستخدم العادي، أو نمط المستخدم ذو الامتيازات؛ يملك نمط المستخدم العادي وصولًا محدودًا إلى أدوات المراقبة البسيطة، بينما يسمح نمط المستخدم ذو الامتيازات لك بمراقبة وصيانة المبدِّل؛ على سبيل المثال، يمكنك نسخ ملفات الضبط من الشبكة، أو بإمكانك ببساطة حذفها، وحتى حذف صورة ملف IOS. لذا، ذاك النمط أكثر خطورةً وقدرةً على إدارة وصيانة المبدِّل؛ ولكي تنتقل من نمط المستخدم العادي إلى نمط المستخدم ذو الامتيازات، فعليك استخدام الأمر enable؛ ثم سيُطلَب منك إدخال كلمة المرور إن كانت موجودةً؛ إذ لا توجد كلمة مرور افتراضيًا، ويمكنك معرفة أنك انتقلت إلى نمط المستخدم ذي الامتيازات باختلاف شكل المِحَث (prompt). User Access Verification Username: admin Password: Switch>enable Password: Switch#حيث يظهر في نمط المستخدم العادي إشارة «أكبر من» كمحث، أما نمط المستخدم ذو الامتيازات فيظهر فيه إشارة المربع؛ ولأسبابٍ أمنيّة، لن تظهر كلمة المرور التي تكتبها على الشاشة؛ لكن إن كنت تتصل عبر جلسة Telnet، فستُرسَل كلمة المرور بنصٍ صريحٍ دون تشفير؛ ولهذه يُنصَح بشّدة استخدام بروتوكولات فيها تشفير مثل SSH لتوفير خصوصية وأمان نقل البيانات. ضبط المبدليمكنك استخدام أوامر المراقبة والصيانة مثل الأمر copy في نمط المستخدم ذو الامتيازات؛ إذا أردت ضبط المبدِّل، عليك أن تدخل إلى وضع الضبط؛ وهنالك عدِّة طبقات من أنماط الضبط؛ أكثرها شموليةً هو نمط الضبط العام، الذي يمكنك الدخول إليه بكتابة الأمر configure terminal، ثم ستشاهد المحث يتغيّر لكن إشارة المربع ستبقى موجودةً فيه لتخبرك أنّك في نمط المستخدم ذي الامتيازات، وستجد اسم طبقة نمط الضبط التي أنت فيها مكتوبةً في المِحَث بين قوسين. تتعلق جميع الأوامر في الضبط العام بالمبدِّل كجهاز. Switch# Switch#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#فمثلًا، يمكنك تغيير المِحَث، ويمكنك تفعيل كلمة المرور للجهاز أو تغييرها إن كانت مُفعّلةً، وتستطيع عرض لافتات (banners) للمستخدمين الذين يسجلون الدخول إلى المبدِّل، أو يمكنك تعديل ترتيب عملية الإقلاع. وإذا أردت ضبط مكوناتٍ مخصصة، فعليك الانتقال من وضع الضبط العام إلى وضع الضبط لذاك المكوِّن؛ فمثلًا، لو أردت ضبط البطاقات، فعليك كتابة الأمر interface متبوعًا بمرجع البطاقة، وفي هذه الحالة، سندخل إلى بطاقة fast Ethernet في الفتحة (slot 0)، والمنفذ (port 1)؛ وهذا مثالٌ تقليديٌ عن الأجهزة ذات الضبط الثابت (fixed configuration) مثل 2960؛ وستعرف أنَّك في وضع ضبط البطاقة وذلك بتغيّر المِحَث ليعرض الكلمة «config-if». Switch(config)#interface FastEthernet 0/1 Switch(config-if)#هنالك عدِّة أنماط ضبط لبروتوكولات التوجيه في حالة المبدِّلات متعددة الطبقات (multilayer switch)؛ يمكنك من وضع الضبط العام الدخول إلى وضع ضبط بروتوكول التوجيه. ويمكن أيضًا ضبط وصلة الطرفية وأسطر VTY لوصول Telnet أو الدخول إليها من نمط الضبط العام. وإذا أردت العودة إلى النمط السابق؛ فأدخِل الأمر exit؛ الذي سيأخذك -على سبيل المثال- من نمط ضبط البطاقات إلى نمط الضبط العام. وإذا أردت العودة مباشرةً إلى طبقة EXEC بمستخدمٍ ذي امتيازات، فيمكنك الضغط على Ctrl-Z أو end وستذهب إلى أول طبقة، التي هي نمط EXEC. أولى المهام في نمط الضبط العام هي تسمية المبدِّل؛ يسمح لك الأمر hostname بإعطاء اسم للمبدِّل، وسيتغيّر المِحَث لأن اسم المبدِّل سيصبح جزءًا منه. ويمكن أيضًا أن يُستعمَل اسم المبدِّل لأغراضٍ إدارية للتعرف بسرعة إلى المبدِّل بالنظر إلى المِحَث، أو لغيرها من الأغراض بما في ذلك تفعيل DNS في المبدِّل. Switch(config-if)#^Z Switch# Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#hostname DSTR2 DSTR2(config)#يمكنك أيضًا توفير عناوين IP للمبدِّل بالذهاب إلى بطاقاتٍ معيّنة بالأمر interface من نمط الضبط العام ثم استخدام الأمر ip address كما هو موضّح في المثال لتعريف عنوان IP وقناع الشبكة الفرعية؛ وفي هذه الحالة، نحن نستعمل مبدِّل في الطبقة الثانية في 2960 ولذا ستكون بطاقات الطبقة الثالثة المتوفرة هي بطاقات VLAN لأغراضٍ إدارية. يمكنك أيضًا أن ترى بعض الاستعمالات للأمر shutdown؛ يمكننا استخدام الأمر مع الكلمة المحجوزة «no» وهذا شائعٌ في أغلبية أوامر سيسكو؛ بكلامٍ آخر، تنفيذ الأمر shutdown سيعطِّل البطاقة إداريًا، لكن تنفيذ الأمر no shutdown سيعيد تفعيلها. وبهذه الطريقة يمكنك إزالة عناوين IP التي أسندتها عبر استخدام الأمر no ip. DSTR2(config)#vlan 10 DSTR2(config-vlan)#name Management DSTR2(config-vlan)#exi % Applying VLAN changes may take few minutes. Please wait... DSTR2(config)#int vlan 10 DSTR2(config-if)#ip address 192.168.0.10 255.255.255.0 DSTR2(config-if)#ضبط البوابة الافتراضية في المبدلسيتكمل ضبط IP في مبدِّلات الطبقة الثانية مثل 2960 عند ضبط البوابة الافتراضية. ليس لدى المبدِّل جدول توجيهات، ولهذا سيحتاج إلى عنوان IP للبوابة الافتراضية، مَثَلُهُ كَمَثِلِ أيّة نهايةٍ شبكيّة. يمكنك تحديد عنوان IP للبوابة الافتراضية باستخدام هذا الأمر في نمط الضبط العام؛ وبهذا يكون المبدِّل قادرًا على الوصول إلى الوجهات البعيدة. وهذا يُستعمل عادةً لأغراضٍ إدارية لتمكّن من الاتصال عبر Telnet و SNMP للوجهات البعيدة. DSTR2(config)#ip default-gateway 192.168.0.1 DSTR2(config)#حفظ الضبطعلينا أن نتذكر أن تلك الأوامر مُفعّلةٌ وتعمل على المبدِّل؛ لكنه موجودةٌ في الضبط التشغيلي؛ أي أنها لم تُحفَظ إلى الضبط الإقلاعي، الذي سيقرأه المبدِّل بعد إعادة الإقلاع. حفظ الضبط هو عمليةٌ يدويةٌ والأمر المستخدم هو: copy running-config startup-config commandوستُسأل عن اسم الملف الهدف، الذي هو مضبوطٌ افتراضيًا؛ يمكنك ببساطة الحفظ إلى ملف ضبطٍ موجودٌ مسبقًا اسمه startup-config موجودٌ في NVRAM؛ مما يضمن أن الضبط جاهزٌ ومتوفرٌ لكي يقرأه المبدِّل بعد الإقلاع القادم؛ إذا لم تفعل ذلك، فستفقد الضبط التشغيلي في ذاكرة RAM عندما يفقد المبدِّل الطاقة الكهربائية أو عندما تُعيد تشغيل المبدِّل. عرض حالة التشغيل المبدئية للمبدليمكنك التأكد من ضبطك والحالة الإجمالية وإمكانيات المبدِّل بالأوامر الآتية: show running-configuration الذي -كما ذكرنا سابقًا- يعرض الضبط الفعال حاليًا في المبدِّل؛ بينما الأمر: show startup-configuration سيُظهِر الضبط المحفوظ في NVRAM، و show version يُظهِر الإعدادات الإجمالية وإمكانيات المبدِّل بما في ذلك العتاد وإصدار البرمجيات، وملفات الضبط وصور الإقلاع. تسمح الأوامر الأخرى لك برؤية حالة البطاقات مثل الأمر show interfaces، الذي لا يُظهِر الحالة فقط، بل وإحصائيات متعلقة بالبطاقات. هذا مثالٌ عن ناتج الأمر show version، الذي يُظهِر خصائص نظام IOS بما في ذلك أرقام الإصدارات ومجموعة الميزات، ويعرض النسخة المُصغَّرة من IOS ‏(mini IOS) الموجودة في ROM، ومحمِّل الإقلاع الذي قد يكون إصداره مختلفًا؛ وزمن التشغيل (uptime) المهم لتحديد إن أُعيد إقلاع المبدِّل في الآونة الأخيرة. ثم ستُعرَض صورة IOS التي تم تحميلها من ذاكرة flash (وهذا ما يتم افتراضيًا)، لكن يمكن أن يكون المبدِّل قد حمَّل الصورة من الشبكة. Cisco IOS Software, C2960S Software (C2960S-UNIVERSALK9-M), Version 15.0(1)SE1, RELEASE SOFTWARE (fc3) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2011 by Cisco Systems, Inc. Compiled Thu 01-Dec-11 14:53 by prod_rel_tea ROM: Bootstrap program is Alpha board boot loader BOOTLDR: C2960S Boot Loader (C2960S-HBOOT-M) Version 12.2(55r)SE, RELEASE SOFTWARE (fc1) Switch uptime is 28 weeks, 2 days, 6 hours, 15 minutes System returned to ROM by power-on System restarted at 18:16:59 EET Wed Dec 14 2011 System image file is "flash:/c2960s-universalk9-mz.150-1.SE1.bin" ... cisco WS-C2960S-48TS-L (PowerPC) processor (revision F0) with 131072K bytes of memory. Processor board ID XXXXXXXXXXX Last reset from power-on 2 Virtual Ethernet interfaces 1 FastEthernet interface 104 Gigabit Ethernet interfaces The password-recovery mechanism is enabled.ثم ستظهر إعدادات العتاد الإجمالية، بما في ذلك كميّة الذاكرة، التي تُعرَض على هيئة رقمين: الذاكرة المشتركة (shared memory) والذاكرة المتوفرة لبقية النظام؛ إذا جمعت هذين الرقمين، فستحصل على كميّة ذاكرة RAM الإجمالية الموجودة في المبدِّل. ويظهر أيضًا العدد الإجمالي للبطاقات الفيزيائية، وتُظهِر بقية الناتج (التي لم تُعرَض هنا) كميّة ذاكرة flash وقيمة مسجِّل الضبط (configuration register). يُستخدَم الأمر show interfaces عادةً للضبط الدقيق، لكنه يستعمل أيضًا للمراقبة واستكشاف الأخطاء وإصلاحها؛ يمكنك استعمال الأمر show interfaces لإظهار معلومات عن جميع البطاقات، أو يمكنك تحديد البطاقة التي تريد عرض معلوماتها. يَعرض الأمر حالة الطبقة الأولى، والثانية التي تتضمن عنوان MAC وحالة duplex وسرعة البطاقة متبوعةً بسلسلة من الإحصائيات تتضمن آخر إزالة للعدادات (counters)، واستراتيجية الطابور (queuing strategy)، ومعدلات الدخل والخرج في آخر 5 دقائق بوحدات «بت في الثانية» و «رزمة في الثانية»، ثم إحصائيات متعلقة بالرزم الإجمالية والأخطاء المتعلقة بعدِّة تصنيفات. Switch#sh int gi 1/0/2 GigabitEthernet1/0/2 is up, line protocol is up (connected) Hardware is Gigabit Ethernet, address is d4d7.48ef.9e82 (bia d4d7.48ef.9e82) MTU 9000 bytes, BW 1000000 Kbit/sec, DLY 10 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full-duplex, 1000Mb/s, media type is 10/100/1000BaseTX input flow-control is off, output flow-control is unsupported ARP type: ARPA, ARP Timeout 04:00:00 Last input never, output 00:00:00, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: fifo Output queue: 0/40 (size/max) 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 0 bits/sec, 0 packets/sec 59814322 packets input, 25857763788 bytes, 0 no buffer Received 7326867 broadcasts (7172259 multicasts) 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0watchdog, 7172259 multicast, 0 pause input 0 input packets with dribble condition detected 98618698 packets output, 90904769164 bytes, 0 underruns 0 output errors, 0 collisions, 1 interface resets 0 unknown protocol drops 0 babbles, 0 late collision, 0 deferred 0 lost carrier, 0 no carrier, 0 pause output 0 output buffer failures, 0 output buffers swapped outوكجهازٍ في الطبقة الثانية، ستحافظ المبدِّلات على جدول عناوين MAC، حيث ستتعلم عناوين MAC ديناميكيًا بالنظر إلى ترويسات الإطارات ثم ستتمكن من تحديد أماكن تلك العناوين وربطها مع المنافذ لتمكين تمرير الرزم أو الإطارات بشكلٍ ذكي. يمكنك عرض جدول عناوين MAC بالأمر: show mac address-tableالذي سيُظهِر عناوين MAC ونوعها والمنفذ الذي تتصل الأجهزة حاملةُ عناوين MAC السابقة منه. قد تكون بعض عناوين MAC ثابتة، فجزءٌ منها متعلقٌ بالاستخدام الداخلي لمبدِّلات Catalyst 2960؛ تذكّر أن بعض المدخلات في الجدول ستنتهي صلاحيتها، وتُحذَف، ثم ستُضاف مرةً أخرى... ترجمة -وبتصرّف- للمقال: Starting a Switch and Basic Configuration.
  9. وأخيرًا لقد أصبحنا جاهزين لضبط مبدِّلات إيثرنت، وسنستخدم في هذا الدرس نظام تشغيل IOS التابع لسيسكو؛ حيث سنشرح ميزاته ووظائفه إضافةً إلى واجهة سطر الأوامر الخاصة به. وسيتضمن هذا الدرس أيضًا بدء تشغيل جلسة EXEC واستخدام الميزات الأساسية مثل المساعدة على الإنترنت (online help) والتعديل المُحسَّن (enhanced editing) وخاصية تأريخ الأوامر (command history). برمجية سيسكو IOSIOS هو نظام تشغيل ومعمارية البرمجيات المضمَّنة (embedded software architecture) لجميع أجهزة سيسكو؛ وفي الواقع، يشير اسمه إلى «نظام تشغيل الشبكة البينية» (internetwork operating system)؛ ويمنح الجهاز واجهة سطر أوامر للضبط، ويُمثِّل البرمجيّة التي تُعرِّف الميزات والوظيفة جنبًا إلى جنب مع البروتوكولات المدعومة من ذاك الجهاز. وهذا يتضمَّن -في المبدِّلات- الذكاء لتوفير اتصالات ومعالجة إطارات إيثرنت؛ بما في ذلك الوظائف الأمنية للتحكم بالوصول ومنع الاستخدام غير المُصرَّح به للشبكة؛ بالإضافة إلى ميزات خاصة بقابليّة التوسّع، والوثوقيّة، وغيرها. إن IOS هو نظام تشغيل مبدِّلات «Cisco Catalyst». ضبط الأجهزة الشبكيةتسمح لك واجهة سطر الأوامر لنظام IOS بضبط المبدِّل؛ لكن الضبط الافتراضي كافٍ لكي يعمل المبدِّل عمله في الطبقة الثانية؛ أي بكلامٍ آخر، تكون المنافذ مُفعَّلةً افتراضيًا وتبدأ وظائف التبديل (switching) عند إقلاع الجهاز. أي أنك لو وصلت أجهزتك إلى المبدِّل، فيمكنك استخدام بروتوكول إيثرنت وتكون وظيفة التبديل جاهزةً للاستعمال. لكن ما يزال عليك ضبط وظائف الطبقة الثالثة لأتمتة عملية الضبط وإخفاء تعقيدات الأوامر عن المدراء. ستطلب أجهزة سيسكو ضبطًا ابتدائيًا إذا لم يتوفر ضبطٌ في الذاكرة؛ فعندما تُقلِع وتكون ملفات الضبط فارغةً، فستبدأ عمليةٌ اسمها «setup». يمكن أن تُستعدى عملية الضبط بعد إقلاع المبدِّل؛ حيث يظهر مربع حوار الإعداد الذي يتضمّن أسئلةً متعلقةً بمهام الضبط لإعداد الجهاز، بما في ذلك بروتوكول العناوين وبعض الخيارات المتعلقة بالطبقة 3 بما في ذلك عنوان IP وقناع الشبكة الفرعيّة (subnet mask). تتضمن الخيارات الأخرى -المتعلقة بالإدارة- إمكانية ضبط كلمة مرور وتعريف بروتوكولات الإدارة. لمحة عن عملية بدء تشغيل جهاز سيسكوإذًا، تتحقق أجهزة سيسكو من ملفات الضبط عندما تُقلِع، لكن هذا ليس الشيء الوحيد الذي تفعله، حيث تتأكد من عتاد الجهاز وتبدأ سلسلة من الاختبارات التشخصيّة المعروفة بالمصطلح «power-on self-test» أو اختصارًا POST. وبعد التأكد من سلامة العتاد، فسيبدأ الموزِّع سلسلةً من خطوات التهيئة تتضمن تحميل صورة نظام تشغيل IOS، لتشغيله والتمكن من استعمال واجهة سطر الأوامر. وأخيرًا وليس آخرًا، يستعد الجهاز لتحميل الضبط الحالي، حيث سيحاول العثور على ملف الضبط، الذي يجب أن يكون صالحًا وبصيغةٍ صحيحة، ومن ثم يحمِّله إلى الذاكرة لإعطاء الجهاز ضبطه الابتدائي؛ مكان وجود صورة نظام تشغيل IOS وملفات ضبط الجهاز مُعرَّفةٌ مسبقًا، لكن هنالك إجراءات احتياطية في حال لم تكن موجودةً مكانها، أو كانت معطوبة، أو نُقِلَت إلى مكانٍ آخر؛ تكون الإجراءات الاحتياطيّة تلقائيةً وجزءًا من عمليّة الإقلاع. مصادر خارجية للضبط أصبحنا جاهزين في هذه المرحلة لضبط الجهاز. يمكن أن يأتي الضبط من عدِّة مصادر وستُنفَّذ الأوامر مباشرةً على الجهاز؛ أي بمجرد أن أكتب أمرًا أو أحمِّل ملف ضبط، فسيحمَّل الضبط مباشرةً إلى الذاكرة ويُنشَّط. هنالك عدِّة طرق للوصول إلى الجهاز لضبطه أو إدارته. أولها هو منفذ الطرفية (console port) الموجود في أغلبية أجهزة سيسكو وهو منفذ تسلسلي يسمح بالوصول إلى واجهة سطر الأوامر لبدء الضبط. منفذ مشابهٌ له هو المنفذ البديل (auxiliary port) الذي يوفِّر وصولًا إلى سطر الأوامر، لكنه موجودٌ فقط في الموجِّهات ويسمح باتصالٍ من نمط الموديم (modem type) لإدارةٍ من خارج النطاق (out-of-band management)، عدا ذلك، تستطيع الوصول إلى الجهاز من داخل النطاق باستخدام الشبكة، ويمكنك أن تستخدم البطاقات الشبكيّة المتوفِّرة في الجهاز للاتصال إليه عبر «طرفيّة وهميّة» (virtual terminal) مثل عملاء Telnet أو تنزيل الملفات عبر TFTP، وغيرها من البروتوكولات مثل بروتوكول FTP وبروتوكول «النقل الآمن» (secure copy) لضبط ومراقبة وإدارة الجهاز عبر خادوم إدارة مركزية عبر الشبكة، أو أداة إدارة شبكيّة مثل SNMP، أو «Cisco Works» في حالة أنظمة سيسكو. يتضمّن نظام IOS صَدَفة (shell) ضبط معروفة باسم «واجهة سطر الأوامر»؛ التي يمكن استعمالها لإدخال أو لصق الأوامر لضبط الجهاز، وتوجد عدِّة أنواع (أو نكهات [flavors]) من نظام IOS اعتمادًا على نوع الجهاز، بما في ذلك الجدر الناريّة، ونقاط الوصول اللاسلكية، والمبدِّلات، والموجِّهات ...إلخ. ستصبح الأوامر متوفرةً في عدِّة أنمطٍ تتبع النهج الهرمي؛ على سبيل المثال، إذا ذهبت إلى نمط الضبط العام (global) لضبط أشياءٍ متعلقة بالموجِّه كجهاز، يمكنك بعدها الذهاب إلى وضع ضبط المنافذ الشبكيّة... لكل نمط شكل مِحَث (prompt) مختلف لتسهيل التعرّف عليه بصريًّا. يمكنك الضغط على زر Enter عندما بعد أن تكتب الأوامر لتفسيرها وتنفيذها مباشرةً؛ ستذهب تلك الأوامر إلى ذاكرة RAM إلى شيءٍ يُعرَف بالضبط التشغيلي (running configuration). ويجب حفظها إلى شيءٍ يُعرَف بالضبط الإقلاعي (startup configuration) لكي تتاح بعد إعادة إقلاع الجهاز؛ مثالٌ عن أحد أنواع الضبط هو نمط EXEC، الذي يسمح للمستخدمين بفتح صدفة (shell) في الجهاز وبدء عملية ضبطه؛ هنالك نمطان للوصول إلى أجهزة سيسكو: نمط المستخدم العادي (user mode)، ونمط المستخدم ذو الامتيازات (privilege mode)؛ يمكن للمدير في نمط المستخدم العادي أن يراقب ويتحقق من الضبط أدوات التشخيص لمرا ئقبة الشبكة والجهاز نفسه، أما في نمط المستخدم ذو الامتيازات، سيكون لديك المزيد من الامتيازات الإدارية على صيانة برمجيات ومكوِّنات الجهاز بالإضافة إلى قدرتك على ضبطه. نمط EXEC في نظام تشغيل IOS (نمط المستخدم العادي)نمط المستخدم هو أوّل ما ستصادفه عندما تتصل إلى الجهاز؛ سيكون لديك إمكانية مراقبة الجهاز لكن دون القدرة على ضبطه؛ يمكنك التعرّف على نمط المستخدم العادي بالنظر إلى مِحَث الأوامر؛ حيث سيحتوي على اسم الجهاز متبوعًا بإشارة «أكبر-من»؛ تستطيع في هذا النمط تشغيل المساعدة على الإنترنت في واجهة سطر أوامر IOS؛ وذلك بكتابة علامة استفهام مما يتيح لك وصولًا إلى معلوماتٍ عن الأوامر المتوفرة في هذا النمط. DSTR2 con0 is now available Press RETURN to get started. User Access Verification Username: admin Password: DSTR2>? Exec commands: access-enable Create a temporary Access-List entry access-profile Apply user-profile to interface clear Reset functions connect Open a terminal connection …نمط EXEC في نظام تشغيل IOS (نمط المستخدم ذو الامتيازات)النمط الثاني هو نمط المستخدم ذو الامتيازات، الذي سيمح لك بالمراقبة والتشخيص بالإضافة إلى إمكانيات الصيانة والضبط؛ وهذا النمط هو أساس بقية أنماط الضبط، ويمكنك التعرّف على نمط المستخدم ذو الامتيازات إذا رأيت اسم الجهاز متبوعًا بإشارة المربّع. ولكي تنتقل من نمط المستخدم العادي إلى نمط المستخدم ذو الامتيازات، فعليك إدخال الأمر enable وستُسأل عن كلمة اسم المستخدم وكلمة المرور. DSTR2> DSTR2>enable Password: DSTR2# DSTR2#? Exec commands: access-enable Create a temporary Access-List entry access-profile Apply user-profile to interface access-template Create a temporary Access-List entry …وسائل المساعدة في سطر أوامر المبدلاتالمساعدة في سطر أوامر أجهزة سيسكو مفصّلة بشكل كبير؛ فتتوفر لك مساعدةٌ حساسةٌ للسياق، التي تسمح لك بسرد الأوامر المتوفرة في كل نمط ضبط ومساعدتك ببناء الشكل العام للأوامر بكتابة علامة استفهام في كل خطوة أو في كل وسيط في الأمر نفسه. ولديك إمكانية التنقل إلى الأعلى والأسفل في حافظة تأريخ الأوامر (command history)، مما يمكّنك من استدعاء الأوامر الطويلة والمعقّدة دون الحاجة إلى إعادة كتابتها؛ وستساعدك رسائل الخطأ من التعرّف على المشاكل في أي أمر يمكن أن يكون قد أُدخِل بصيغة غير صحيحة، حيث سترى رسائل الأخطاء في البنية (syntax errors)، أو رسائل الأوامر غير المكتملة، أو الرسائل التي تشير إلى أنَّ الأمر غير موجود. تتضمن ميزات التعديل المُحسَّن أوامر تسمح لك بالتحرك بسلاسة في سطر الأوامر لإجراء تصحيحات أو تعديلات؛ حيث سيتحرّك المؤشر إلى بداية السطر عند الضغط على Ctrl-A، أو إلى نهاية السطر بالضغط على Crtl-E، ويمكنك التنقل إلى الإمام وإلى الخلف حروفًا وكلماتٍ، وحذف حرفٍ وحيدٍ أو مسح كل السطر بالضغط على Ctrl-U؛ وأحد أكثر المفاتيح فائدةً هو المفتاح Tab، الذي سيُكمِل الأوامر بعد أن تُدخِل أول عدِّة أحرف منها. يمكنك التحرك إلى الأمام والخلف عبر تأريخ الأوامر مستخدمًا Ctrl-P و Ctrl-N أو عبر أزرار الأسهم (إلى الأعلى، وإلى الأسفل)؛ إذا أردت رؤية جميع التأريخ المتوفر، فيمكنك تنفيذ الأمر show history، الذي تكتبه في نمط EXEC، ويمكنك زيادة حجم التأريخ عبر زيادة عدد أسطره. تُخزَّن ملفات الضبط تخزينًا حيًّا في ذاكرة RAM، وهذا ما يُسمى بالضبط التشغيلي (running configuration) الذي هو الضبط النشط الذي يحكم آلية عمل الجهاز في تلك اللحظة؛ وهناك ما يُسمى بالضبط الإقلاعي (startup configuration)، الذي يكون مخزنًا في ذاكرة تُسمى NVRAM (اختصار للعبارة nonvolatile RAM)؛ يتضمن الضبط الإقلاعي جميع الأوامر التي يجب أن تكون متوفرةً عند إقلاع الجهاز مرةً أخرى. يمكنك مشاهدة النسخة الحالية من الضبط عبر الأمر show running-config، والأمر show startup-config لعرض الضبط الإقلاعي. قد تكون النسختان مختلفتين عن بعضها لأن عملية حفظ الضبط التشغيلي إلى ضبط إقلاعي هي عمليةٌ يدويةٌ. فإذا لم تحفظه، فسيكون ملفا الضبط مختلفين وقد تخسر تغييراتك التي أجريتها عندما تعيد الإقلاع. يعرض الأمر show running-config الضبط التشغيلي الموجود في ذاكرة RAM، مما يسمح لك بمراقبة وإدارة هذا النوع من الضبط. DSTR2#show running-config Building configuration... Current configuration : 1481 bytes ! version 15.0سيُظهِر الأمر show startup-config محتويات ملف الضبط في NVRAM، لاحظ أن الأمر show running-config يبني الضبط من ذاكرة RAM ولهذا ستحصل على تلك الرسالة التي تشير إلى ذلك، بينما الأمر show startup-config يعرض محتويات ملفٍ موجودٍ في NVRAM؛ بالإضافة إلى عرضه لعدد البايتات التي يستهلكها ملف الضبط، والكميّة الإجمالية المتاحة من ذاكرة NVRAM. أُخِذ ناتج الأوامر الموجودة في هذه المقالة من مبدِّل DSTR2 في «مخبر التبديل» (switching lab). ترجمة -وبتصرّف- للمقال Supporting a Layer 2-to-Layer 3 Boundary Design.
  10. شاهدنا عبر مسيرة تطور الشبكات المحلية كيف أنَّ كفاءة الشبكة واستغلال التراسل الشبكي أصبحا ميزتين محوريتين ومهمتين في كلٍّ شبكةٍ محليةٍ؛ وأصبحت الحواسيب والخواديم في أيامنا هذه قادرةً على معالجة آلاف ملايين العمليات في الثانية الواحدة، وهذا يعني أنها تملك المزيد من القدرة على توليد البيانات بدرجةٍ أكبر وإرسال المزيد من المعلومات عبر الشبكة. ازدحام الشبكة – الموزعات في مواجهة الجسوربصفةٍ عامة، ازدادت كميات البيانات التي تُنقَل عبر الشبكة المحلية (LAN) وذات النطاق الواسع (WAN) أضعافًا كثيرة، وتفرض البرمجيات الشرهة للتراسل الشبكي -مثل الفيديو، والوسائط المتعددة، والتعلم الإلكتروني ...إلخ.- متطلباتٍ صارمةً لشبكاتنا. نحن نعلم أنَّ الموزَّعات (hubs) لا يمكن أن تُستخدَم بفعاليّة في شبكاتنا الحالية لأنها تمثِّل مجالًا وحيدًا للتصادمات ومجالًا وحيدًا للإذاعة في كل موزِّعٍ، ولا يمكنها التعامل مع كمّياتٍ ضخمةٍ من البيانات الشبكيّة التي تمر في شبكاتنا العصرية؛ تمثِّل الجسور (bridges) تحسينًا كبيرًا، بينما ما تزال تعمل في الطبقة الثانية من نموذج OSI، لكنها تملك ذكاءً لتمرير الإطارات (frames) بناءً على معرفتها للمصدر والوجهة على شكل عنوان MAC؛ وعلى الرغم من أنَّها تملك منافذ أقل وهي أبطء، لكنها أفضل من الموزَّعات؛ وفي الواقع، يمكنها إنشاء مجالات تصادمات متعددة مثلها مثل المبدِّلات. المبدلاتعلى الرغم من أنَّ آلية العمل الأساسية للمبدِّلات مشابهةٌ للجسور، لكن المبدِّلات تعمل بسرعات أعلى بكثير وفيها وظائف أكثر مقارنةً مع الجسور؛ وفيها عدد منافذ أكثر، فتتضمن مبدِّلات طبقةِ الوصولِ (access layer LAN switches) الاعتيادية من 28 إلى 48 منفذًا (port)، ويمكن أن تدعم مبدِّلات طبقة التوزيع (distribution layer switches) مئات المنافذ؛ وهذا يجعلها داعمةً للتوسع بشكلٍ كبير، ولها قدرة على تخزين الإطارات الكبيرة والمزيد من المعلومات مؤقتًا، مما يقلل من احتمال تجاهل بعض الإطارات الشبكيّة عندما تتم معالجتها؛ ومن المُرجَّح أن تدعم مزيجًا من سرعات المنافذ تتراوح بين 10 إلى ‎100 Mb/s إلى ‎1 Gb و ‎10 Gb/s وخصوصًا في «الخطوط الصاعدة» (uplinks) إلى الشبكات الأكبر. تتضمن المبدِّلات عدِّة مجالات للتصادمات أو مجالًا واحدًا لكل منفذ للسماح بإجراء اتصالاتٍ متعددة في نفس الوقت وزيادة سلاسة مرور البيانات العابرة في المبدِّل بآنٍ واحد. ويمكن أيضًا ضبطها لدعم عدِّة أنماط من «التبديل» (switching)؛ فنمط «التخزين-والتمرير» (store-and-forward) هو النمط التقليدي الذي تُخزَّن فيه الرزم كاملةً مؤقتًا قبل إرسالها لكي تتم معالجتها وتحديد المنفذ الصادر. وهنالك آليةٌ أخرى أكثر كفاءة هي نمط «المرور» (cut-through)، الذي يتم فيه تمرير الرزم في أسرع وقت ممكن بعد أن يتمكن المبدِّل من تحديد عنوان الوجهة؛ وهذا يحدث حتى لو لم يستلم المبدِّل الرزمة كاملةً؛ خيارٌ آخر هو نمط التبديل «الخالي من القطع» (fragment-free) الذي يتغلب على مشاكلٍ متعلقةً بالأخطاء المحتملة في نمط «المرور» (cut-through). تتشابه الجسور والمبدِّلات في أنها تصل بين مختلف قطع (segments) الشبكة المحليّة، وتتعلم عناوين MAC لترشيح البيانات وإرسالها إلى المنفذ الملائم حيث تتواجد الوجهة؛ لكن توجد ميزات في المبدِّلات تجعلها أكثر كفاءةً في تخفيف الازدحام والاستفادة بصورة أفضل من التراسل الشبكي. هذه قائمةٌ بتلك الميزات: أولها هو التواصل المخصص بين الأجهزة المعروف باسم «التجزئة الصغيرة» (micro segmentation)، وهذه الميزة تجعل الأجهزة لا تتنافس مع بعضها لإرسال البيانات، إذ يمثِّل كل منفذٍ في المبدِّل مجال تصادماتٍ مختلف؛ أي أنَّه لا توجد تنافسية بين الأجهزة ولا يحصل -نظريًّا- أيّة تصادمات. قد تظن أنَّه ما يزال هنالك تنافسيةٌ في الشبكة بسبب احتمال محاولة طرفَيّ الوصلة إرسال البيانات في نفس الوقت، لكن ذلك غير موجود والفضل يعود إلى الاتصالات ثنائية الاتجاه (full-duplex)، مما يسمح لجهازَين بالإرسال معًا في آنٍ واحد، مما يزيد من مقدار نقل البيانات، فمثلًا يمكن لوصلة بسرعة ‎100 Mb/s أن تنقل البيانات بسرعة 200‎ Mb/s. ميزةٌ أخرى مهمة هي أنَّ المبدِّلات تسمح باتصالاتٍ متعددة في آن واحد؛ وهذا بسبب ما يسمى «switching fabric» في المبدِّل، الذي هو مجرد حافظات داخلية تسمح لأزواجٍ متعددة من المنافذ بإرسال الإطارات في آنٍ واحد. هنالك بعض أنواع المبدِّلات التي تسمح لجميع المنافذ بإرسال جميع الإطارات في جميع المحادثات معًا، التي تسمى «wire-speed nonblocking servers»، ويكون بالطبع ثمنها أغلى. هنالك ميزةٌ أخرى تسمح للمبدِّلات بالتعامل مع سرعاتٍ متفاوتة على منافذ مختلفة مما يجعل المبدِّل يعمل كوسيط لنقل الرزم بين تلك المنافذ؛ وهذا يسمح باستخدام المبدِّل لوصل عدِّة أجهزة بسرعاتٍ قليلة أو بتراسل شبكي صغير، ويمكن لها في نفس الوقت التعامل مع الاتصالات ذوات السرعات العالية مع بقية الشبكة. ولهذه الأسباب، تتفوق المبدِّلات على الجسور؛ مما يجعلها الاختيار الأنسب للشبكات المحلية في هذه الأيام، فلم يعد من المعقول استخدام الموزَّعات والجسور في الشبكات العصرية؛ وبغض النظر أنَّ المبدِّلات تعمل في الطبقة الثانية مثلها مثل الجسور، لكنها تملك منافذ أكثر بسرعاتٍ أكبر، وكما ذكرنا سابقًا، لديها ذكاءٌ لتمرير، أو ترشيح، أو «إغراق» الشبكة بالإطارات الشبكيّة؛ فعندما تستلم المبدِّلات إطارًا، فإنها تبحث عن عنوان MAC للوجهة في جدول عناوين MAC الخاص بها، فإذا وجدت مطابقةً فإنها ستُمرِّر الإطار إلى المنفذ حيث تتواجد الوجهة، وإلا فسترسِل الإطار إلى جميع المنافذ عدا المنفذ الذي أتى منه الإطار. تبديل الإطارات (Switching Frames) هذا شرحٌ مرئيٌ للعملية؛ ففي الخطوة 1، يُرسِل الحاسوب A إطارًا إلى المبدِّل، ثم سيقارن المبدِّل عنوان MAC للوجهة مع جدول عناوين MAC الخاص به، فلا يجده؛ وقبل إرسال الإطار إلى جميع المنافذ، فسيربط المبدِّل عنوان MAC للحاسوب A إلى المنفذ بتضمين العنوان في جدول عناوين MAC؛ تتم إذاعة الإطار في الخطوة 3 على كل المنافذ، ثم -في الخطوة 4- ستستقبل الوجهة الإطار وترسِل إشعارًا مع عنوان MAC الخاص بها؛ ثم سيستمع المبدِّل إلى الرد في الخطوة 5 ويضيف عنوان MAC للحاسوب B إلى جدوله؛ ويكون المبدِّل جاهزًا لتمرير الإطارات في الخطوة 6. بكلامٍ آخر، سيمرر المبدِّل الإطار إلى المنفذ 1 فقط، وهو المنفذ الذي يقبع فيه الحاسوب A استنادًا إلى جدول MAC. نحن نعلم أنَّه يمكن لجميع الأجهزة المتصلة إلى مبدِّل أن ترى بعضها بعضًا في قطعة شبكيّة (network segment)؛ ومن احتياجات الاتصال في شبكاتنا المحلية الحالية هي التوسع إلى عدِّة مجموعات عمل، والتوجه الحالي في الشبكات ينزع إلى المركزية وأن تكون مجموعات العمل متصلةً فيما بينها وتملك وصولًا إلى الموارد المركزية (مجموعة خواديم) وإلى الإنترنت. ولهذا نُنشِئ شبكاتٍ كبيرةً مصنوعةً من سلسلةٍ من المبدِّلات الموصولة فيما بينها بخطوط ربطٍ سريعة؛ مما يُمكِّن آلاف المستخدمين من الاتصال إلى شبكةٍ فيها مجال إذاعة وحيد. لا تنسَ أن المبدِّلات تمثَّل مجال إذاعةٍ وحيدًا؛ فإذا وصلت عدِّة مبدِّلات فيما بينها، فسيكون لديك مجال إذاعةٍ وحيد؛ وهذا يعني أنَّ رسالة الإذاعة المُرسَلة من أحد المستخدمين على مجموعة عمل ما ستُشاهَد من كل الشبكة، وهذا سيُنقِص من الأداء وله تأثير على استهلاك التراسل الشبكي. لمحة عن VLANتستعمل VLANs كطريقة لإنشاء عدِّة مجالات للإذاعة في نفس المبدِّل أو في سلسلة هيكليّة من المبدِّلات. VLAN هي شبكة LAN وهمية (Virtual LAN) تُحسِّن من الأداء عبر إنشاء مجالات إذاعة، وتسمى هذه العملية بالتقطيع (segmentation)؛ فرسائل الإذاعة المولَّدة من جهازٍ على شبكة VLAN معيّنة ستُرى من بقيّة الأجهزة على شبكة VLAN نفسها؛ ولن تنتقل إلى شبكات VLAN الأخرى؛ يُعتَبر كل مجال إذاعة أو شبكة VLAN هو شبكة IP فرعية (IP subnet)، وهذا يعني أنَّه للتواصل بين مختلف شبكات VLAN فستحتاج إلى استخدام وظائف في الطبقة الثالثة من نموذج OSI، أي بكلامٍ آخر، ستحتاج إلى موجِّه؛ مما يجعل شبكات VLAN أداةً أمنيةً لأن بيانات التراسل الشبكي المُرسَلة عبر شبكات VLAN يجب أن تمر على الموجِّه، وبهذا تستطيع ضبط التحكم بالوصول في الموجِّه الخاص بك. إحدى طرق استخدام شبكات VLAN هي إسناد منافذ المبدِّل إلى شبكات VLAN معيّنة، مما يفصل بين الموقع الفيزيائي للجهاز وشبكة LAN الوهمية التي ينتمي إليها؛ أي بكلامٍ آخر، يمكن أن يكون لديك جهازٌ في الطابق الثالث ينتمي إلى شبكة VLAN معيّنة، ويمكن أن يكون جهازٌ في الطابق الأول جزءًا من تلك الشبكة الوهمية أيضًا، وهما في الواقع متصلان بمبدِّلَين مختلفَين، لكن جميع المبدِّلات في الشبكة المحلية تَعرِف تعريف الشبكات الوهمية الذي ضَبَطَتَهُ؛ مما يُنشِئ بيئاتٍ مرنة، فلم يعد المكان الفيزيائي مهمًا، وستكون الإضافات والتغيرات في الشبكة أسهل في التنفيذ؛ فلو أردت أن يصبح جهازٌ ما جزءًا من مجموعة عمل معيّنة، فكل ما عليك فعله هو تغيير الشبكة الوهمية (VLAN) لمنفذ المبدِّل الذي يتصل فيه ذاك الجهاز. ترجمة -وبتصرّف- للمقال Developing an Optimum Design for Layer 2.