5.1 مقدمة في الشبكات كتاب لينكس الشامل >>

5.1 مقدمة في الشبكات

الفهرس

5.1.1 المصطلحات

الشبكات موضوع متشابك وخطير نحاول هنا أن نقدم ما نجد أن به الفائدة المباشرة ونقترح بشدة العودة إلى الوثائق الأخرى مثل manual pages و info pages ووثائق HOWTO المشار إليها في كل بند. لينكس نظام صمم من أجل الشبكات بكل ما يعنيه ذلك. دعم بطاقات الشبكة ودعم البروتوكولات المختلفة وحتى جدار النار جزء من نواة لينكس بل أن خادم الويب Web المسمى tux عبارة عن module للنواة! بشكل أساسي يعتمد لينكس على شبكات TCP/IP ويوفر دعم لبروتوكولات أخرى مثل IPX و AppleTalk. تمكنك معظم التوزيعات من إعداد الشبكة بطريقة رسومية ولكن معرفة ذلك من سطر الأوامر يوفر لك المزيد من الإمكانيات. كما أنه يعطيك الخبرة الكافية للتعامل مع البرامج الرسومية؛ تذكر أن لديك أداة سهلة الإستعمال وأن ما أكتبه هنا ليس إلا لمعرفة المصطلحات الأساسية انظر ملحق الأدوات الخاصة بكل توزيعة

عندما نتحدث عن شبكات فإننا في الغالب نتحدث عن علاقات خادم ومخدوم، يقدم الخادم server خدمة معينة service إلى المخدوم client. هذه الخدمة قد تكون الوصول للملفات والتشارك في الطابعة أو قاعدة بيانات أو حتى مجرد بوابة توصل المخدوم للإنترنت. ولكن في نظام لينكس ليس بالضرورة أن تكون عبر شبكة فهناك وسائل مثل file socket و FIFO pipe كما خادم إكس أو المراقبات الأخرى. يتخيل الناس أن هناك طوراً في نظام التشغيل ليكون خادماً أو أن هناك خيار في برنامج التركيب يجعل النظام خادم أو هناك برنامج تشغله يجعل النظام خادم!! هذا خطأ والصواب أن الخادم يقدم خدمة service (على شكل مراقب daemon) يستمع بانتظار طلبات المخدومين فأنت تشغل وتعد كل خدمة لوحدها. كما يتخيل الناس الخادم جهاز عملاق مكلف عليه جميع أنواع الخدمات وفي المقابل الأجهزة المخدومة أجهزة شخصية هذه الفكرة خطأ وتتسبب في ما يسمى Single Point of Failer نقطة فشل وحيدة؛ فالنظرة الحديثة تقوم على فصل أكبر قدر من الخدمات على خادمات مختلفة فكلما كان الخادم يقدم خدمات أقل كان أكثر أمناً وموثوقية.

نسمي الجهاز الواحد Host ونسمي مجموعة من الأجهزة Domain لتشكل شبكة أو شبكة فرعية. الشبكة المحلية LAN توصل بسرعة عالية 10-100 ميغا-بت بالثانية وقد تصل إلى الغيغا! لكنها لمسافات لا تزيد عن 100 متر. أما WAN مثل الإنترنت فهي ذات مسافات شاسعة وبسرعات أكثر محدودية لا تزيد عن عشرات/مئات الكيلو-بت في الثانية. عند عمل شبكة فإننا بحاجة إلى بطاقة تسمى واجهة الشبكة NIC أي Network Interface Card مثل بطاقات الإيثرنت ( الأولى هي /dev/eth0 الواجهة eth0) والمودم (الجهاز الأول COM1 هو /dev/ttyS0 والواجهة هي ppp) ولكن حتى دون وجود واحدة فإن هناك واجهة الحلقة المفرغة loopback interface ويرمز لها lo وهي تربط الجهاز مع .. حسناً، مع نفسه!

5.1.2 عناوين الشبكات

كل واجهة(بطاقة) نعطيها رقم/عنوان. هناك أكثر من عائلة للعناوين يدعمها لينكس مثل Novel IPX ولكن نظام لينكس يفضل عائلة عناوين الإنترنت ARPA inet وهي نفسها IPv4 أو IP ودعمها موجود من الإصدارات الأولى وهو من أكثر الأجزاء في لينكس صلابة. هذا العنوان عبارة عن رقم 32-بت للتسهيل نمثله على شكل أربع أرقام عشرية كل منها 0-255 يفصل بينها نقطة.

tipتلميح

البعض لا يرتاح لكون عناوين IPv4 ذات 32-بت أي أنها لن تكفي للمستقبل لهذا هناك طريقة جديدة تتخطى محدوديات القديمة تسمى IPv6 والتطور فيها ليس في الحجم فقط بل أنها تحتوي على مزايا أكثر لتزيد السرعة والموثوقية. ولكن ليس كل الإصدارات تدعمها. النواة 2.6 توفر دعم غير مسبوق لها

العنوان 127.0.0.1 مخصص ليشير إلى لجهاز نفسه lo. إذا كانت بطاقة NIC تربطك بالإنترنت مباشرة فإنها تأخذ أي عنوان غير محجوز أما إذا كانت تربطك مع الشبكة الداخلية LAN فإنها تأخذ أي عنوان من العناوين المحجوزة للشبكات الداخلية، وهي عناوين غير مرئية عبر الإنترنت. تبدأ من اليسار ب10 ثم أي 4 أرقام أو تبدأ ب 172 ثم رقم 16-31 ثم أي رقمين أو تبدأ ب 192 ثم 168 ثم أي رقمين وتسمى على الترتيب الصنف A و B و C. كما في الجدول :
الصنفالمدىالمدى المحجوز للشبكات الداخليةDefault netmasknetmask as number
Class A0.0.0.0-127.255.255.25510.0.0.0-10.255.255.255255.0.0.08
Class B128.0.0.0-191.255.255.255172.16.0.0-172.31.255.255255.255.0.016
Class C192.0.0.0-223.255.255.255192.168.0.0-192.168.255.255255.255.255.024
كل جهاز Host يأخذ عنوان تكون الأرقام الأخيرة فيه 1-254 حيث حيث أن 0 مخصص كعنوان للشبكة وأن 255 مخصص للبث العام broadcast. قلنا الأخيرة يعني آخر كم رقم ؟ أي كيف نفصل عنوان الشبكة عن عنوان الأجهزة؟ هنا يأتي دور Netmask فهو عنوان نضع أصفاراً مكان عنوان الجهاز host بحيث أن تطبيق علاقة AND مع العنوان تعطي عنوان الشبكة مثلاً في شبكة صنف B كان عنوان أحد الأجهزة 172.18.1.2 و Netmask كان 255.255.0.0 هذا يعني أن هذا الجهاز عضو في شبكة عنوانها 172.18.0.0 ويمكن تمثيل Netmask برقم واحد للتبسيط هو عدد بتات عنوان الشبكة (البتات غير الصفرية في Netmask address) في المثال السابق 16 أي 2 بايت من 4 للشبكة، وعند كتابة عنوان الشبكة اصطلح أن نكتبه على صورة 172.18.0.0/255.255.0.0 أو 172.18.0.0/16 وبصورة غير رسمية 172.18.X.Y. نلاحظ أن الصنف A به شبكة وحيدة وكل العناوين هي لأجهزة Hosts أما B فهو يحتوي 15 شبكة أما C فهي تحتوي 256 شبكة. مثل آخر العنوان 192.168.0.0/24 يعني 192.168.0.X.

يتم تخصيص العنوان عند تركيب لينكس أو فيما بعد من خلال برنامج إعداد الشبكات الخاص بتوزيعتك ليكون رقم ثابت ويسمى هذا static IP. أو قد يتم ترك إعطاء العنوان لخادم DHCP حيث تقوم أحد نصوص الإقلاع بتشغيل DHCP client الذي يبث broadcast طلب عنوان فيرد عليه بالعنوان الذي يجب أن يستعمله يتم البث إلى العنوانين 0.0.0.0 و 255.255.255.255 عبر منفذ 67 على الخادم و 68 على المخدوم. وفي الحالتين من يعطي العنوان هو أحد ملفات ال /etc/init.d/ ويتم إعداده بطريقة تعتمد على التوزيعة.

5.1.3 أسماء الأجهزة في الشبكات

وبدلاً من كتابة العناوين بالأرقام يفضل البعض إعطاء أسماء للأجهزة مثل localhost الاسم الذي يشير به الجهاز لنفسه الذي يعادل العنوان 127.0.0.1 كما يمكن أن نحدد في أي شبكة بوضع (.) نقطة لتفصل الحدود ونبدأ بالأصغر مثل localhost.localdomain أو لنتحدث عن شبكة حقيقية www.linuxbox.net قد تشير إلى الجهاز خادم ويب www داخل شبكة linuxbox داخل شبكة net كما نتحدث عن ملف /net/linuxbox/www ولكن بصورة مقلوبة. كما يوجد اسم مطلق(كامل) للملفات فإن الاسم الكامل للجهاز أي عنوان الجهاز (.) عنوان الشبكة ... إلخ يسمى FQDN أي Fully Qualified Domain Name. يمكن لكل جهاز أن يحتفظ بقائمة في هذه العناوين وما يقابلها من أسماء في ملف /etc/hosts كما يلي:

# This is a simple '/etc/hosts'
# Address	Names
127.0.0.1	localhost localhost.localdomain
192.168.10.1	linuxbox
192.168.0.1	proxy gateway
192.168.0.3	ns
كما يمكن أن نضع أكثر من اسم alias لنفس العنوان كما في العنوان الثالث. ولأنه ليس عملياً أن نقوم بوضع كل عناوين الإنترنت في هذا الملف ولا حتى الشبكة الداخلية إذ أن إضافة جهاز أو تعديل اسم بحاجة لكتابته في هذا الملف على كل جهاز! هنا يأتي دور خادمات DNS أي Domain Name Server فإن مخدوماته تسأله عن العنوان الذي يقابل اسم معين فيرد وفقط عليك أن تبقيه محدثاً وستضمن أن يصل ذلك لكل المخدومين. الملف /etc/resolv.conf يحتوي عنوان هذا الخادم
#/etc/resolv.conf
domain foo.mynet.com
search foo.mynet.com mynet.com
name server 192.168.0.3
والملف /etc/hosts.conf يحتوي على السطر
order hosts,bind
أي أن ملف hosts له الأولوية على خادم DNS المسمى BIND. ملف آخر أكثر عمومية يتحكم في الأولويات هو /etc/nsswitch.conf
#/etc/nsswitch.conf:
#...
hosts:      files dns
#...

5.1.4 البرتوكولات والمنافذ

عند إرسال بيانات عبر الشبكة فإنها ترسل في هيئة محدد تسمى طرد/رزمة/كيس pocket يحدد هيئتها البرتوكول المستخدم حيث يحدد البرتوكول طريقة تخزين عنواني المصدر والهدف ومعلومات أخرى مثل فحص parity check أو حتى CRC لكشف التشويش الطبيعي.

البرتوكولات الرئيسية المستخدمة هي ICMP و TCP و UDP. البروتوكول الأول يستخدم في عمليات التشخيص والإعداد ولا يستعمل لإنشاء إتصال أما الآخران فيأخذان إضافة لعنوان المرسل إليه رقم منفذ كل خدمة أو بروتوكول فرعي يعمل على منفذ مستقل مثلاً منفذ ويب هو 80 الذي يعمل ببروتوكول http الذي هو فرع عن TCP. في بروتوكولات TCP و UDP يتم الربط عبر 3 مراحل هي new أي طلب اتصال جديد، ثم related وهي كل الحوارات التي تحدث قبل قبول/رفض الإتصال وأخيراً إنشاء إتصال established . جرت العادة تمثيل العنوان على شكل URL يأخذ الصيغة protocol://[user[:password]@]host.somenet.edu[:port]/ حيث user و password و port اختيارية مثل smb://ahmad:dontlook@172.22.0.5/ و http://proxy.mynet.com:8080/ وهذا في بروتوكولات http و ftp و smb وغيرها الكثير. الملف /etc/protocols يحتوي قائمة بالبروتوكولات أما الملف /etc/services فيحتوي قائمة بالمنافذ وما يقابلها من خدمة ولكن لم يعد مستخدماً (لأنه تابع ل inetd الذي أبدل ب xinetd الذي له صيغة أخرى) إلا أنه موجود كما يمكنك العودة إلى ملحق المنافذ

5.1.5 توبولوجيا الشبكات

التبولوجيا topology فرع من الرياضيات يتحدث عن مجموعة عناصرها مجموعات والعمليات عليها، ربما هذا أصل الاسم. كل توبولوجيا تعتمد بروتوكول وتعتمد عائلة عناوين وواجهات(بطاقات) شبكات NIC معينة. فالشبكات في لينكس تعتمد على TCP/IP وتوفر دعم للأنواع الأخرى.

أسهل طريقة للتفكير في ربط جهازين Point to Point وتسمى أيضاً pear to pear أي ند للند ، واختصاراً ppp بأن يكون الجهاز موصول عبر سلك بجهاز آخر يشكلان معاً شبكة! كلا الطرفين جهاز host أي أن عبر هذه الواجهة لا يوجد سوى طرفان دون فروع أو أي وصلات تفريع. لهذا لا نستعمل عناوين. قد يكون أحد (أو كلا) الجهازين مرتبط بشبكة أخرى عبر بطاقة أخرى هذا أمر لا يدخل في الحسبان. كما يحدث عندما ترتبط مع مزود خدمة الإنترنت فمن جهة جهازك ومن جهة أخرى المزود يتم تحويل اتصالات tcp/ip إلى سيل stream وفي الطرف الآخر تجميعها. يمكن ربط جهازين بهذه الطريقة عبر الواجهة التسلسلية بوجود مودم أو دون وجوده أو حتى عبر الوصلة المتوازية (وصلة الطابعة) ولكن هذا أمر غير شائع بسبب قلة سرعة هذه الواجهة مقارنة ببطاقة الإيثرنت. ربط جهازين عبر بطاقتي إيثرنت مباشرة لا يعد منطقياً من هذا النواع لأننا نعطي لكل جهاز عنوان IP ونستعمل برتوتوكول TCP وإن كان شكله الفيزيائي يشبه هذا النوع.

point to point network

الشبكة الحلقية token ring هي شبكة تمرر فيها المعلومات من جهاز إلى الجهاز الذي يليه فكل جهاز موصول بالذي قبله وبعده عبر بطاقة خاصة تشبه حرف T يدخل السلك عبر البطاقة ليدخل الجهاز من جهة وليخرج إلى البطاقة في الجهاز التالي انظر www.linuxtr.net فإذا لم تكن البيانات موجهة له مررها للذي يليه حتى تصل هدفها فيقوم الجهاز الذي وصلته بإرسال إشعار (وصل استلام) للجهاز المرسل ليتوقف عن الإرسال بنفس الطريقة وهكذا. تسمى عملية إرسال pockets من جهاز لتمر في كل الأجهزة بالبث العام broadcasting. لم تعد هذه البطاقات شائعة لأن تعطل جهاز في الحلقة يفصل الحلقة بالكامل. ولكن من ناحية افتراضية يمكننا أن نسمي الشبكة التي ترسل بطريقة البث العام broadcasting حلقة وذلك بأن تكون كل الأجهزة موصولة ببطاقات إيثرنت عادية مع مفرّع بث broadcasting hup حيث يشكل المفرّع الحلقة. أو حتى بوصل أسلاك 10base2 إلى وصلات T مع وضع مقاومة على كل من الطرفين (لإمتصاص الإشارة كي لا تنعكس) ،. هذه الأمثلة تشبه الحلقة من حيث الشكل وتعاني من مشاكلها وهي يجب أن ننبه إلى أن البث يقلل من عرض الحزمة bandwidth أي سرعة النقل، كما أنها تسمح لأحد الأطراف بالتجسس بواسطة برامج sniffer.

token ring network

أما الشبكة النجمية يكون هناك نقطة مركزية تتصل بها كل النقاط كما النجمة ، يمكن أن يكون المركز جهاز مقسم توزيع switched hup (أو switch للإختصار) أو جهاز حاسوب به عدة بطاقات ايثرنت. جهاز المقسم switch يقرأ العنوان ويرسلها إليه. هنا الإتصال بين أ و ب يتم ترسل من الجهاز أ إلى الجهاز المركزي/المقسم ثم إلى الجهاز ب أما الجهاز جـ فلا يصله شيء لأنها ليست موجهة له.

star shaped network

يجب أن أشير إلى أن شكل الشبكة وطريقة توزيع الأسلاك لا يعكس بالضرورة ما يجري فعلاً. فمجموعة الأجهزة الموصولة إلى broadcasting hup قد تبدو شبكة نجمية(فيزيائياً) ولكنها شبكة أقرب إلى الحلقية(منطقياً) لأن البيانات تبث للجميع! ولكن تعطل أحد أعضاء الحلقة لن يعطل الحلقة على عكس الحلقة التي تحدثنا عنها سابقاً فإذا تعطل أحد الأجهزة فيها لم تصل البيانات لباقي الأجهزة. كما أن هذه المعلومات المذكورة هنا معلومات مبسطة جداً. إذ يمكن تصميم شبكة تتكون فيها العناصر الثلاث المذكورة.

mixed network

لاحظ أن الأجهزة في الغرفة B1 تتصل معاً عبر مفرع broadcasting hup في المقابل تتصل أجهزة A1 معاً عبر switched hup تتصل الغرف معاً في مبنى A عبر مقسم switch، أحد تلك الأجهزة متصل بالإنترنت عبر مودم بطريقة ppp مع مزود خدمة الإنترنت ISP وليس وصلة ethernet التي تربطه مع الشبكة الداخلية، وهو معد ليكون بوابة gateway يؤمن إتصال جميع أجهزة A بالإنترنت، كما يمكن أن يعمل كجدار ناري. في المقابل يعمل router العتادي (كالذي تنتجه cisco) للقيام بوصل الغرف معاً واتخاذ القرار "هل تذهب هذه للشبكة في الغرفة كذا عبر السلك كذا أم إلى الإنترنت ؟" يمكن الاستعاضة عنه بجهاز حاسوب ونظام لينكس موصول عبر أكثر من وصلة eth0 و eth1 ... و ppp0 ... إلخ كما في A. في الرسم التوضيحي تم إهمال بعض التفاصيل للتبسيط مثل المودمات و مزود الخدمة. الأجهزة في غرفة A1 تأخذ العناوين 192.168.10.X وفي غرفة A2 تكون العناوين 192.168.20.X ويمكن للأجهزة في B أن تأخذ نفس العناوين دون حدوث إرباك لأن هذه العناوين لا تكون مرئية عبر الإنترنت (إلا إذا كنا نستعمل VPN) . لنفترض أن الجهاز رقم واحد في B1 يحمل العنوان 172.17.0.1 يريد الإتصال بجهاز في غرفة B2 بعنوان 172.18.0.1 فإن الإرسال سيصل إلى جميع الأجهزة المتصلة مع المفرع Hub ومنها جهاز router الذي يرسلها في السلك الذي يوصل إلى مفرع Hub الغرفة B2، أما إذا اتصل مع عنوان الإنترنت الخاص ب ppp0 في A فإن البث يمر أولاً عبر Hub إلى router الذي يميّز أن العنوان عنوان الذي يمييز أن العنوان خارجي فيرسله عبر وصلة الإنترنت ثم إلى مزود الخدمة ISP ثم إلى الجهاز 192.168.0.1 في A.

هناك شبكات يتم ربطها دون أسلاك وذلك عبر بطاقات إيثرنت خاصة تسمى WaveLan انظر www.wavelan.com من ناحية البرامج لا تختلف هذه البطاقات عن بطاقة الإيثرنت العادية. ولكن لنفرض أن هناك غرفتن متجاورتان واحدة تأخذ العناوين 192.168.1.X والأخرى 192.168.2.X وكان جهاز به بطاقة من هذا النوع يتنقل بينهما فإن عنوانه سيتغيّر وما يترتب على ذلك من قطع الإتصال. حل هذه المشكلة يتم عبر تكنولوجيا تسمى Mobile IP. حيث يعطى عنوان وهمي لا يتغيّر بتغيّر مكانه.

5.1.6 جداول التوجيه

عندما يخرج طرد pocket من جهاز مربوط عبر سلك وحيد بشبكة داخلية متجهاً إلى أي عنوان فإنه يعرف طريقه عبره، ولكن لو كان هناك أكثر من واجهة للشبكة (وهذا ما هو عليه الحال دائماً بوجود lo) فإن على الجهاز تحديد الواجهة التي يسلكها pocket تبعاً للعنوان مثلاً نقول العنوان المحلي 127.0.0.1 يتجه عبر lo والعناوين المحجوزة الداخلية مثل 10.0.0.0/8 تتجه عبر بطاقة الإيثرنت إلى أسلاك الشبكة الداخلية وأما باقي العناوين فتتجه عبر المودم إلى الإنترنت عبر أسلاك الهاتف؛ هذا ما يسمى بالتوجيه route وهي عملية إتخاذ القرار بتمرير pocket عبر واجهة شبكة تبعاً للعنوان الذي تتجه إليه.

router جهاز مرتفع الثمن يشبه switch فله عدة مقابس نربط من خلاله عدة أجهزة أو شبكات ولكن يمكن برمجته عن بعد من خلال بروتوكول خاص مثل RIP لتحديد جداول التوجيه بطريقة ديناميكية. يدعم لينكس تركيب عدد كبير من بطاقات الشبكة دفعة واحدة ويوفر لينكس جداول توجيه ثابتة ضمن النواة يمكن تعديلها عبر الجهاز نفسه، كما ويوجد عدة خادمات تدعم الجداول الديناميكية مثل routed و gated عبر عدة بروتوكولات.


<< السابق كتاب لينكس الشامل التالي >>