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



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

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

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

نوع المُحتوى


التصنيفات

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

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML
    • HTML5
  • CSS
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • Sass
    • إطار عمل Bootstrap
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • ASP.NET
    • ASP.NET Core
  • سير العمل
    • 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

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

  1. ثبّتنا في الدرس السابق من هذه السلسلة إطار Laravel وأعددناه. سنستخدم تلك الإعدادات كقاعدة لبناء تطبيق صغير عليها؛ ونرى العناصر الأساسية لتطبيق يعمل على إطار العمل Laravel. هذا الدرس جزء من سلسلة تعلم Laravel والتي تنتهج مبدأ "أفضل وسيلة للتعلم هي الممارسة"، حيث ستكون ممارستنا عبارة عن إنشاء تطبيق ويب للتسوق مع ميزة سلة المشتريات. يتكون فهرس السلسلة من التالي: مدخل إلى Laravel 5.تثبيت Laravel وإعداده على كلّ من Windows وUbuntu.أساسيات بناء تطبيق باستخدام Laravel. (هذا الدرس)إنشاء روابط محسنة لمحركات البحث (SEO) في إطار عمل Laravel. نظام Blade للقوالب.تهجير قواعد البيانات في Laravel.استخدام Eloquent ORM لإدخال البيانات في قاعدة البيانات، تحديثها أو حذفها.إنشاء سلة مشتريات في Laravel.الاستيثاق في Laravel.إنشاء واجهة لبرمجة التطبيقات API في Laravel.إنشاء مدوّنة باستخدام Laravel.استخدام AngularJS واجهةً أمامية Front end لتطبيق Laravel.الدوّال المساعدة المخصّصة في Laravel.استخدام مكتبة Faker في تطبيق Laravel لتوليد بيانات وهمية قصدَ الاختبار. يشمل الدرس المواضيع التالية: مفهوم التوجيه Routing وآلية عمله.أداة Artisan التي تعمل على سطر الأوامر.استخدام أداة Artisan لتوليد شفرة مصدرية نمطية للمتحكّمات Controllers (وهي المسؤولة عن الإجابة على الطّلبات التي تردها Requests).إنشاء نداء لمتحكّم في مسار Route.تمرير المتغيّرات من متحكّم إلى عرض View.أساسيات التوجيه في Laravelعند وصول طلب إلى تطبيق Laravel تتلقى آلية التوجيه الطلب ثم تختار طريقة التعامل معه. سنرى في هذه الفقرة كيفية عمل هذه الآلية. أول ما سنفعله هو إنشاء مسار جديد؛ لذا افتح ملف routes.php الموجود على المسار app\Http بمحرّر النصوص المفضّل لديك. ملحوظة1: جميع المسارات المذكورة في الدرس هي بالنسبة لمجلد تطبيق Laravel. يعني هذا أن المقصود بالمسار (على افتراض أنك اتبعت خطوات الإعداد في الدرس السابق) app/Http هو المسار C:\laragon\www\larashop\app\Http على وندوز و /var/www/html/larashop/ على لينكس. ملحوظة2: انتبه لحالة الأحرف، كبيرة أو صغيرة. أضف المحتوى التالي إلى الملف routes.php : Route::get('/hello',function(){ return 'Hello World!'; });تعرّف الشفرة السابقة مسارًا لتلقي الطلبات من نوع GET (الدّالة get الموجودة في الصنف Route). المعطى الأول للدّالة هو الرابط المعني بالمسار (أي /hello) أما الثاني فهو دالة مجهولة الاسم Anonymous function تعرّف طريقة التعامل مع الطلب. يعني هذا أنه عند تلقي طلب على العنوان http://larashop.dev/hello فإن التطبيق ينفذ الدالة مجهولة الاسم والتي تُرجِع العبارة: Hello World!. احفظ الملف ثم اذهب إلى المتصفح وأدخل العنوان: http://larashop.dev/helloيجب أن تظهر صفحة بيضاء مطبوعة عليها عبارة: Hello World!. ربما تكون لاحظت وجود الشفرة التالية في الملف routes.php: Route::get('/', function () { return view('welcome'); });تتبع هذه الشفرة نفس المبدأ حيث تعرّف مسارا للطلبات الآتية على الرابط / أي رابط الصفحة الرئيسية (http://larashop.dev) وتحيلها إلى عرض باسمwelcome بدلا من طباعة عبارة مباشرةً (سنرى في ما بعد كيفية ذلك). أداة ArtisanArtisan عبارة عن أداة تُستدعى من سطر الأوامر لأتممة تنفيذ أنشطة اعتيادية على Laravel. يمكن استخدام أداة Artisan لتنفيذ الأنشطة التالية من بين أخرى: توليد شفرة نمطية: إنشاء المتحكّمات، النماذج Models، وغيرها بيُسر.تهجير قواعد البيانات Database migrations: وهو نظام لإدارة الإصدارات الخاصة بقواعد البيانات يجعل من التعامل مع الكائنات في قواعد البيانات (إنشاء جداول أو حذفها مثلا) أسهل عبر وصفها دون الحاجة للتعديل عليها مباشرةً.بذر قواعد البيانات Database seeding: وهو مصطلح يشير إلى إضافة بيانات وهمية للتسجيلات Records في جداول قاعدة البيانات لأغراض الاختبار.التوجيه: وهي الآليّة المسؤولة عن تلقي الطلبات ثم اختيار طريقة التعامل معها (عادةً بإرسالها إلى متحكّم).ضبط التطبيق.تشغيل الاختبارات الأحاديّة Unit tests.كيف تستخدم أداة Artisanافتح سطر الأوامر ثم انتقل إلى مجلد التطبيق. على افتراض أنك موجود في أصل المستند (C:\laragon\www على وندوز أو /var/www/html/ على لينكس): cd larashopثم نفّذ الأمر التالي: php artisan listملحوظة: تأكّد من وجودك في مجلّد التطبيق (أي المجلّد larashp) قبل تنفيذ الأمر artisan. تظهر أوامر artisan المتاحة للتنفيذ. مثال على النتيجة: Laravel Framework version 5.1.26 (LTS) Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Available commands: clear-compiled Remove the compiled class file down Put the application into maintenance mode env Display the current framework environment help Displays help for a command inspire Display an inspiring quote list Lists commands migrate Run the database migrations optimize Optimize the framework for better performance serve Serve the application on the PHP development server tinker Interact with your application up Bring the application out of maintenance mode أمر Artisan لتوليد شفرة متحكمسنستخدم Artisan لتوليد متحكم بسيط يجيب على طلب Http ويحمّل عرضا باسم hello. افتح سطر الأوامر ونفذ الأمر التالي (تأكد من وجودك في مجلّد التطبيق قبل تنفيذ الأمر): php artisan make:controller Helloاستخدمنا أمر make:controller الذي توفره أداة Artisan لتوليد شفرةِ متحكّم ومررنا له اسم المتحكم الذي نريد توليده Hello. يُنشئ الأمر أعلاه ملفا باسم Hello.php على المسار app/Http/Controllers. يجب أن تظهر رسالة في سطر الأوامر تفيد بنجاح توليد المتحكم. نفتح ملف Hello.php لرؤية محتواه: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class Hello2 extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }يعرف الملف فضاء اسم Namespace خاصًّا بالمتحكم: namespace App\Http\Controllers.تستورد التعليمات التالية (use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller;) الأصناف Classes المطلوبة لتشغيل المتحكم.الصنف Hello هو تمديد للصنف Controller الذي يعرّفه إطار العمل.بالنسبة للدوال التي يعرفها المتحكم فاستخدامها يكون كالآتي: الدالة index هي الدالة الافتراضية للمتحكم: تتعامل مع الطلبات الموجهة للرابط الجذر الذي يجيب عنه المتحكم.الدالة create: إنشاء موارد جديدة مثل تسجيلة في جدول قاعدة البيانات.الدالة store: تخزين مورد جديد مُنشَأ بالدالة السابقة.الدالة show: العثور على مورد اعتمادا على المعرِّف ID الممرَّر للدالة.الدالة edit: تتيح إمكانية التعديل على المورد الممرّر للدالة.الدالة update: تحديث مورد مخزّن.الدالة destroy: حذف مورد مخزَّن.سنأتي تباعا لتفصيل استخدام هذه الدوال في الوقت المناسب. توجيه طلب إلى متحكمفي المسار الذي عرفناه سابقا تُطبع العبارة مباشرة من داخل دالة التوجيه، وهذا خلط بين عناصر نموذج MVC، لذا سنضع المسار بين علامات تعليق لتجاهله: /* Route::get('/hello',function(){ return 'Hello World!'; }); */ثم نضيف شفرة مصدرية جديدة تنشئ مسارا لنفس الرابط hello/ ولكنها بدلا من طبع سلسلة محارف ترسل نداءً إلى المتحكم Hello وبالتحديد دالة index: Route::get('hello', 'Hello@index');نفتح ملف المتحكم لتحرير الدالة index لتأخذ المحتوى التالي: public function index() { return 'hello world from controller : )'; }احفظ الملف. افتح الآن الرابط http://larashop.dev/hello، وستجد أن الرسالة التالية تظهر في الصفحة: hello world from controller :)ما حدث هنا هو أن المسار الخاص بالرابط hello تلقى الطلب من المتصفح ثم أحاله إلى المتحكم Hello الذي طبع سلسلة محارف على الشاشة. تحميل عرض View انطلاقا من متحكماحترام مبادئ MVC يقضي بألا يتداخل عمل المتحكمات والعروض؛ فتنسيق ما يراه الزائر من مسؤولية العروض، ولذا فعلى المتحكم توكيل عرض بهذه المهمة مع إمداده بما يحتاجه من متغيرات. وهو ما سنفعله في الفقرات التالية. سيتلخص عملنا في ثلاث نقاط: إنشاء مسار لتلقي الطلب على الرابط hello/ وإرساله إلى المتحكم المناسب (تم هذا الأمر).إنشاء متحكم للإجابة عن الطلب (تم).إنشاء عرض لتنسيق ما سيظهر على شاشة الزائر.تغيير المتحكم لإرسال نداء إلى العرض وتمرير المتغيرات المناسبة إليه.أنشئ ملفا باسم hello.blade.php في المسار resources/views/ وأضف إليه المحتوى التالي: <!DOCTYPE html> <html> <head> <title>Laravel</title> <link href="//fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css"> <style> html, body { height: 100%; } body { margin: 0; padding: 0; width: 100%; display: table; font-weight: 100; font-family: 'Lato'; } .container { text-align: center; display: table-cell; vertical-align: middle; } .content { text-align: center; display: inline-block; } .title { font-size: 96px; } </style> </head> <body> <div class="container"> <div class="content"> <div class="title">Hello {{$name}}, welcome to Laraland! : )</div> </div> </div> </body> </html>يحوي الملف كما يظهر شيفرة HTML عادية مع تغييرين أساسيين، هما لاحقة اسم الملف (blade.php) واستخدام المتغير name في الملف. تشير اللاحقة إلى أن العرض يستخدم نظام Blade للقوالب الذي يأتي مضمّنا في Laravel (سنخصص درسا للعروض والقوالب). نكتفي الآن بالقول إن {{$name}} تطبع قيمة المتغير name. افتح الملف app/Http/routes.php وأضف الشفرة التالية: Route::get('/hello/{name}', 'Hello@show');يعمل هذا السطر على إنشاء مسار للروابط ذات الصيغة /hello/value حيث value قيمة ما، تخزن هذه القيمة في المتغير name ثم تمرّر إلى الدالة show الموجودة في المتحكم Hello. نفتح ملف المتحكم Hello ونعدّل الدالة show($id) لتصبح على النحو التالي: public function show($name) { return view('hello',array('name' => $name)); }نعرف الدالة show التي تقبل المعطى name.تحمِّل الدالة عرضا باسم hello.blade.php (يُكتفى بذكر اسم العرض دون اللاحقة blade.php) ثم تمرر له مصفوفة تحوي متغيراتٍ وقيمَها. في حالتنا يوجد متغير واحد باسم name وقيمته هي المعطى الممرَّر للدالة show.احفظ التعديلات التي أجريناها في الفقرات السابقة ثم افتح الرابط http://larashop.dev/hello/HsoubAcademy في المتصفح. يمكن أن نلاحظ هنا أن HsoubAcademy هي قيمة المتغير name الموجود في تعريف المسار التالي: Route::get('/hello/{name}', 'Hello@show');إذن: طلب الزائر العنوان http://larashop.dev/hello/HsoubAcademy في المتصفح.وجد التطبيق أن المسار الموافق لهذا الرابط هو المسار /hello/{name{ وأعطى القيمة HsoubAcademy للمتغير name ثم وجّه الطلب إلى الدالة show في المتحكم Hello.تلقت الدالة show الطلب ثم أرسلته إلى العرض hello مع إنشاء متغير جديد بنفس الاسم المستخدم في العرض وحددت قيمته بالمعطى الذي تلقته من المسار. كان بإمكان الدالة show إجراء عمليات على المعطى قبل تمريره.بدأ نظام القوالب العمل ووجد أن العرض hello يحوي متغيرا باسم name وأن قيمة هذا المتغير كما مررها له المتحكم هي HsoubAcademy، فوضعها مكان المتغير وأرسل النتيجة إلى المتصفح.خاتمةتعرفنا في هذا الدرس على الآلية الأساسية التي تعمل بها تطبيقات Laravel. من المهم جدّا فهم محتويات هذا الدرس قبل الانتقال إلى الدروس الموالية. ترجمة -وبتصرّف- لمقال Laravel 5 Hello World لصاحبه Rodrick Kazembe.
  2. سنستكشف في هذا الدرس عملية توصيل الرزم الشبكيّة من منظور الموجِّهات، وسنرى كيف أنَّ إحدى أهم وظائف الموجِّهات هي تحديد المسار الأمثل لرزم IP بين الشبكات؛ وسنتعمَّق في بعض المكوِّنات مثل جداول التوجيه، وسنشرح الطرق المختلفة لملئها (أي جداول التوجيه الثابتة [static] والديناميكية [dynamic])؛ وسنُعدِّد خصائص بروتوكولات التوجيه ونصنِّفها إلى «distance vector» و «link-state». الموجهاتنحن نعلم أنَّ الموجِّهات تطبِّق وظائف الطبقة الثالثة أو طبقة الشبكة؛ وأنَّ مهمتها الأساسية هي تمرير الرزم الشبكيّة بناءً على جدول التوجيه. وبهذا نحصل على تقسيم للبيانات التراسلية (traffic segmentation)، وعدِّة مجالات إذاعيّة (broadcast domains)، ونُعرِّف الشبكات الفرعية لعناوين طبقة الشبكة؛ تُعرَّف هذه الشبكات بالمنافذ التي تُسنَد إليها عناوين IP، والتي هي عادةً عناوين IP للبوابة الافتراضية (default gateway) للحواسيب والخواديم وغيرهما من المعدّات الشبكيّة. تتصل الموجهات أيضًا إلى مزودي الخدمة إذ يعملون كبوابات إلى الشبكات الأخرى، وغالبًا ما يتواجدون في طرف (edge) الشبكة؛ قد لا تكون بعض تلك المحولات (adapters) الشبكية من نوع إيثرنت؛ فلديها قدرة على الاتصال إلى المنافذ التسلسلية، واتصالات DSL، وأشكالٍ أخرى من VAN؛ المكونات الرئيسية المذكورة هنا ستتشابه مع مكونات أي جهاز حاسوبي أو شبكي: معالج، ولوحة أم، وذاكرتَي RAM و ROM. وهنالك نوعٌ أخر من الذواكر في موجِّهات سيسكو هو ذاكرة flash، التي تُخزَّن فيها صورة نظام التشغيل؛ لكن النقطة الأساسية خلف خصائص تلك المكونات هي أنَّ العناصر المكونة للحاسوب أصبحت قويةٌ للغاية مما يُمكِّن الموجهات من أداء أدوار بقية الأجهزة الشبكيّة؛ إذ يمكن دمج وظائف الجدر النارية، وحتى إمكانية توجيه المكالمات الصوتية للبيئات التي تعتمد على الاتصالات الصوتية عبر بروتوكول IP؛ ولهذا تكون موجهاتنا العصرية أكثر من مجرد أجهزة تعمل في الطبقة الثالثة، إذ أصبحت متعددة الوظائف، مما يسمح لك بدمج عدِّة وظائف ضمن مكونات شبكتك: بعضها عبر تحديثات النظام، وبعضها عبر إضافات عتادية للموجهات التي تقبل تلك الإضافات. وظائف الموجهاتيمكن تقسيم وظيفة التوجيه إلى قسمين؛ أولهما هو بناء خريطة للشبكة وتَستعمل الموجهات -لهذه المهمة- بروتوكولات التوجيه الثابتة أو الديناميكية؛ وبمساعدة بروتوكولات التوجيه الديناميكية، تسمح الموجهات لبقية أجهزة الشبكة بمعرفة مخطط الشبكة والتغيرات التي قد تحصل عليها؛ أما التوجيه الثابت فلن يتأقلم مع التغيرات التي قد تطرأ على الشبكة؛ لكن كلا الطريقتين تنجزان مهمة بناء خريطة للشبكة على شكل «جدول توجيه» (routing table). تحديد المسارأثناء عملية تحديد المسار، ستدرس الموجهات عدِّة مسارات بديلة للوصول إلى نفس المكان؛ وتأتي هذه البدائل نتيجةً للبنية التعويضية (redundancy) المبنيّة في أغلبية تصاميم الشبكة. وإنَّك ترغب بوجود عدِّة مسارات، فلو أصبح أحدها خارج الخدمة، فسيكون عندك بدائلٌ له. عند تحديد أيُّ المسارات أفضل، فستأخذ الموجهات عدِّة عوامل بعين الاعتبار أحدها هو مصدر معلومات المسارات، وبهذا يمكن أن يكون لديك عدِّة بروتوكولات توجيه ديناميكية وحتى بروتوكولات توجيه ثابتة تملأ جدول التوجيهات وتخبر الموجه ما هي الخيارات المتاحة أمامه. القطعة الثانية من المعلومات هي «كلفة» (cost) الاتصال عبر كل مسار؛ وبمراعاة أنَّ كل مسار مكوَّن من عدِّة وصلات أو عقد مُعرَّفة من موجهات أخرى، فيمكننا إضافة مفهوم «الكلفة» إلى المسارات، الذي هو مجموع كل الكلفات للوصول إلى العقدة التالية في المسار. هنالك قراران محكومان بأجزاءٍ مختلفة من المعلومات؛ فلكي نُعرِّف مصدر المعلومات الراجح، فستستخدم الموجهات «المسافة الإدارية» (administrative distance)؛ فلو كان أحد بروتوكولات التوجيه مثل OSPF يخبر الموجه معلوماتٍ عن الوجهة، وكذلك يفعل بروتوكول RIP؛ فستُحدِّد المسافة الإدارية من الذي سنعتمد معلوماته؛ وعند اختيار المصدر، فستصبح الكلفة مهمةً؛ أي بكلامٍ آخر، إن أعطانا OSPF معلوماتٍ عن مسارين، فستكون كلفة المسار هي ما الذي سيحدد أيهما سأختار؛ وهذا شبيهٌ بامتلاك خريطتين للقيادة من مدينةٍ إلى أخرى؛ إذ ستختار الخريطة التي ستتبعها، ثم إن كانت تعطيك الخريطة أكثر من خيار، فستختار أفضلها اعتمادًا على الوقت اللازم للمرور فيها، أو المسافة التي عليك قيادتها. جداول التوجيهإذًا، تحتوي جداول التوجيه على «ذكاء» طبقة الشبكة لإخبار الموجه كيف يمرر الرزم إلى الوجهات البعيدة؛ وفي بادئ الأمر، يتكون جدول التوجيه من الشبكات التي تتصل مباشرةً بالموجه المعيّن؛ ومن ثم يُملأ الجدول إما عبر التوجيه الثابت الذي سيخبر المدير فيه الموجه كيف سيصل إلى الوجهة، أو عبر ملء الجدول عبر إشعارات جداول التوجيه القادمة من الموجهات الأخرى. أي أنَّ الموجهات «كثيرة الكلام» وتخبر بعضها بعضًا المعلومات التي تسمح لها بمعرفة مكونات الشبكات؛ وفي كلا الحالتين، ستُستخدَم عناوين الشبكة الفرعية معكوسةً أو عناوين الشبكة التي تحتوي على أصفارٍ في قسم المضيف من عنوان IP. ونحن نتحدث -في هذه الحالة- عن عنوان مقسَّم إلى شبكةٍ فرعية ليس لها فئة معيّنة أصلها شبكةٌ فئتها A؛ الشبكة 10.0.0.0 مقسّمة إلى شبكاتٍ فرعية تشبه الفئة C؛ لكن -في جميع الحالات هنا- قسم المضيف من العنوان (البايت الرابع) كله أصفار، الذي يمثِّل تلك الشبكة الفرعية. أي بكلامٍ آخر، هذه هي الشبكات الوجهة، وستحتوي جداول التوجيه في حالة الوجهات البعيدة مدخلاتٍ تُظهِر العقدة الشبكيّة التي يجب الاتصال بها للوصول إلى الوجهة؛ وفي هذه الحالة، للوصول إلى 10.1.3.0، فإن العقدة الشبكية هي الموجِّه 2 ذو العنوان 10.1.2.2. هنالك تصنيفات لمدخلات (entries) جدول التوجيهات التي يمكن أن تُملأ إما ديناميكيًا أو يدويًا؛ بعضها يأتي مع الموجِّه. ويتعرف على جميع الشبكات المتصلة به مباشرةً عندما يُقلِع ويُعرِّفها كوجهات يمكن الوصول إليها؛ أما الجزء الذكي هو تواصل الموجهات مع بعضها وتبادلها معلومات التوجيه عبر بروتوكولات التوجيه الديناميكي مثل OSPF أو EIGRP، ثم سيعلمون عن تلك الوجهات، ويتأقلمون أيضًا مع التعديلات التي تجري عليها. ستتمكن بروتوكولات التوجيه من التعرف على التغيرات في مخططات الشبكة ثم ستخبر الموجهات بعضها بعضًا بذلك؛ وستظهر المُدخلات وستختفي من جدول التوجيهات اعتمادًا على توفر تلك الشبكات؛ لكن تذكر أنَّه قد يأتي المدير ويُضيف المدخلات الثابتة يدويًا، وهذا غير مستحسن في بعض الأحيان، لأن تلك المدخلات ثابتة ولا تتأقلم مع التغييرات التي قد تحدث على الشبكة. أي بكلامٍ آخر، إذا كانت المُدخلة (أي الموجه) غير متوفرة، فستبقى المدخلة موجودةً في جدول التوجيهات وسيستمر الموجه بتمرير الرزم إلى وجهة غير موجودة. حالة خاصة من التوجيه الثابت هي «المسار الافتراضي» (default route) الذي يمكن أن يتعلمه الموجه ديناميكيًا؛ يُستخدم المسار الافتراضي عندما لا توجد مسارات معروفة للوصول إلى الوجهة، إذ أنَّ هذه المدخلة تستعمل لجميع الوجهات غير المعروفة. سيقول الموجِّه: «إن لم أعرف المسار إلى وجهةٍ معيّنة، فسأمرر الرزم إلى من يعرف المسار، الذي يكون عادةً موجِّهًا آخر». المقاييس المستعملة للتوجيهيعتمد اختيار أمثل مسار على ما يُعرَف بكلفة الوصول إلى الوجهة عبر مسارٍ معيّن؛ وتُعرَف الكلفة بالمصطلح «المقياس» (metric)، وتضع مختلف بروتوكولات التوجيه معايير مختلفة لتعريف المقياس؛ فالتقنيات والبروتوكولات القديمة تأخذ عدد الموجهات في المسار للوصول إلى الوجهة بعين الاعتبار، وهذا ما يُسمى «hop count»، الذي قد لا يكون أحيانًا أفضل طريقة لحساب التكلفة، لأن هنالك مقدار تراسل شبكي مختلف لكل عقدة أو وصلة بين العقد. يكون الطريق ذو العقدتين -في المثال التوضيحي السابق- أفضل، لامتلاكه تراسلًا شبكيًا أكبر. بدأت بروتوكولات التوجيه الأخرى باعتبار التراسل الشبكي مقياسًا للكلفة، وغيره من المعايير؛ فمثلًا يأخذ بروتوكول EIGRP التراسل الشبكي، وزمن التأخير، والوثوقية، والحِمل، ووحدة النقل القصوى (maximum transmission unit) بعين الاعتبار. وبهذا لن يتم اختيار مسار فيه تراسل شبكي كبير لكنه تحت حِملٍ ثقيل، وإنما سيتم اختيار مسار بتراسل شبكي أصغر لكن أقل حِملًا وأكثر وثوقيةً. ربما أحد النقاط التي يركِّز عليها هذا الدرس هي أنَّ اختيار بروتوكول التوجيه -إن كنت تستعمل توجيهًا ديناميكيًا- هو المفتاح لتحديد الكلفة أو المقياس؛ وبالتالي تحديد آلية اختيار أمثل وأكثر المسارات كفاءة؛ ولكن الأمر منوطٌ أيضًا بزمن الاستجابة الذي سيستغرقه بروتوكول التوجيه لكي يستشعر تغييرًا في هيكلة الشبكة ويُعدِّل عمله باختيار مسارٍ بديل إذا لم يكن المسار الرئيسي متاحًا. فهنالك عدِّة تصنيفات لبروتوكولات التوجيه إذا كنت تستعمل التوجيه الديناميكي التي تُحدِّد -أي تلك التصنيفات- الكلفة والمقاييس، وأيضًا سلوك البروتوكولات في مثل الحالة السابقة. بروتوكولات «Distance Vector» للتوجيهأحد التصنيفات هو Distance Vector، الذي لن تحتاج الموجِّهات فيه إلى معرفة المسار بأكمله إلى الوجهة، بل كل ما يبغي معرفته هو الاتجاه (vector) الذي ستُرسَل إليه الرزمة، أي أنَّ الموجهات ستحتفظ بمعلوماتٍ في جداول التوجيه تتعلق بالعقدة الشبكيّة التالية التي يجب إرسال البيانات إليها للوصول إلى وجهة معيّنة. تعاني بروتوكولات Distance Vector من عدِّة سلبيات؛ أحدها هي أنها توزِّع جدول التوجيهات بشكلٍ دوري. فبعضها يستخدم الإذاعة لتوزيع كامل جدول التوجيهات، وهذا يَتسبَّب بحِملٍ ثقيلٍ غير ضروريٍ على الشبكة إن لم تتغير بنيتها؛ وهذا شبيهٌ بالاتصال بجميع معارفك وإخبارهم إشاعاتٍ مرارًا وتكرارًا، حتى وإن لم تتغير الشائعة أو تغير جزءٌ صغيرٌ منها. مثالٌ عن بروتوكول Distance Vector هو بروتوكول RIP، الذي يستعمل عدد العقد الشبكيّة مقياسًا للكلفة. بروتوكولات «Link-State» للتوجيهتتسم بروتوكولات Link-State بالكفاءة والفعالية في إنشاء مخططات للشبكة، ومشاركتها، واختبار أفضل مسار مقارنةً مع بروتوكولات Distance Vector؛ هناك عدِّة اختلافات بين هذين التصنيفَين، فمثلًا لن تُذيع (broadcast) بروتوكولات Link-State المعلومات لكل موجه، إذ ستستخدم multicast حيث يعلن كل موجِّه عبر multicast الوصلة التي يعرفها لجيرانه. وثانيًا، لن تُذيع بروتوكولات Link-State جدول التوجيهات بشكلٍ دوري؛ فبعد إذاعة كامل الجدول لأول مرة، فسترسل بعد ذلك التغييرات في بنية الشبكة فقط؛ أي بكلامٍ آخر، إذا لم يعد مسارٌ من المسارات متوفرًا فسيذاع هذا التغيير الصغير عبر multicast؛ وثالثًا، لن يعلم الموجه ما هي العقدة التالية التي سيصل عبرها إلى الوجهة فحسب، وإنما سيعلم عن خريطة الشبكة بأكملها. سيبني كل موجه خريطة الشبكة بعد حصوله على كامل معلومات الشبكة؛ التي تتضمن جميع الموجهات والوصلات؛ وبهذه المعلومات سيتمكن كل موجِّه من استعراض تلك الجداول عبر خوارزمية «أقصر مسار أولًا» (shortest path first algorithm)، ثم اختيار أفضل مسار إلى الوجهة. وبهذا، إذا حصل تغيير في الشبكة، لم يعد مسارٌ ما متوفرًا على سبيل المثال، الذي يؤثر على فرعٍ صغيرٍ في شجرة الشبكة؛ فسيُعلَن هذا التغيير فقط على الشبكة؛ وهذا سبب تسمية هذه التحديثات بالتحديثات التراكمية (incremental updates). كل هذه الاختلافات والفروقات تجعل من بروتوكولات Link-State أكثر كفاءة وفعاليةً في التعامل مع تغييرات الشبكة. ترجمة -وبتصرّف- للمقال Exploring the Functions of Routing.