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

بدأنا هذه السلسلة بالحديث عن البرامج التطبيقية التي يريد الأشخاص تشغيلها عبر الشبكات الحاسوبية، أي كل شيء من متصفحات الويب وصولًا إلى أدوات مؤتمرات الفيديو، وتحدّثنا عن تطوير بنية الشبكات التحتية اللازمة لجعل مثل هذه التطبيقات ممكنة. جزءٌ من هذه التطبيقات هو بروتوكول شبكة؛ أي تلك التي تتبادل الرسائل مع نظرائها على أجهزةٍ أخرى، والجزء الآخر هي برامج تطبيقية تقليدية؛ أي تتفاعل مع نظام النوافذ ونظام الملفات والمستخدم النهائي. وسيتناول هذا المقال أحد تطبيقات الشبكة الشائعة المتاحة اليوم، التي تتمثل بالدرجة الأولى في البريد الإلكتروني.

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

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

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

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

التطبيقات التقليدية

نبدأ مناقشتنا حول التطبيقات، من خلال التركيز على اثنين من أكثر التطبيقات شيوعًا، وهما شبكة الويب العالمية World Wide Web والبريد الإلكتروني email. يستخدم كلا التطبيقين نموذج الطلب / الرد request/reply paradigm، حيث يرسل المستخدمون الطلبات إلى الخوادم التي تستجيب وفقًا لذلك، ونشير إلى هذه التطبيقات بأنها تقليدية Traditional لأنها تمثّل نوع التطبيقات التي كانت موجودةً منذ الأيام الأولى للشبكات الحاسوبية، حيث تعود جذور الويب إلى عمليات نقل الملفات التي سبقته، على الرغم من أن الويب أحدث من البريد الإلكتروني بكثير.

تتحدث الأقسام اللاحقة عن فئةٍ من التطبيقات التي أصبحت شائعةً مؤخرًا، وهي تطبيقات البث streaming applications مثل تطبيقات الوسائط المتعددة، مثل الفيديو والصوت والعديد من التطبيقات القائمة على التراكب overlay. لاحظ أن هناك بعض الغموض بين هذه الفئات، حيث يمكنك بالطبع الوصول إلى بيانات بث الوسائط المتعددة عبر الويب، ولكن سنركز في الوقت الحالي على الاستخدام العام للويب لطلب الصفحات والصور وغير ذلك.

هناك ثلاث نقاط عامة نحتاج إلى توضيحها قبل إلقاء نظرةٍ على كل من هذه التطبيقات، حيث تتمحور النقطة الأولى حول أهمية التمييز بين برامج programs التطبيق وبروتوكولات protocols التطبيق، فبروتوكول نقل النصوص الترابطية HyperText Transport Protocol -أو اختصارًا HTTP- مثلًا، هو بروتوكول تطبيق يُستخدم لاسترداد صفحات الويب من الخوادم البعيدة.

توفّر العديدُ من برامج التطبيقات المختلفة أي عملاء الويب، مثل برامج Internet Explorer وChrome وFirefox وSafari للمستخدمين مظهرًا وأسلوبًا مختلفًا، ولكنها تستخدم جميعًا نفس بروتوكول HTTP للاتصال بخوادم الويب عبر الإنترنت.

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

يبحث هذا القسم في بروتوكولي تطبيقين معياريين ومستخدَمَين على نطاقٍ واسع هما:

  • بروتوكول نقل البريد البسيط Simple Mail Transfer Protocol -أو اختصارًا SMTP- المُستخدَم لتبادل البريد الإلكتروني.
  • بروتوكول نقل النصوص الترابطية HyperText Transport Protocol -أو اختصارًا HTTP- المُستخدَم للتواصل بين متصفحات وخوادم الويب.

النقطة الثانية هي أن العديد من بروتوكولات طبقة التطبيق بما في ذلك بروتوكولَي HTTP وSMTP، لها بروتوكولٌ مصاحبٌ لها يحدد صيغة البيانات الممكن تبادلها، وهذا هو أحد الأسباب التي تجعل هذه البروتوكولات بسيطةً نسبيًا، حيث يُدار الكثير من التعقيد ضمن هذا المعيار المصاحِب.

يُعَد بروتوكول SMTP مثلًا بروتوكولًا لتبادل رسائل البريد الإلكتروني، ولكن يحدّد معيار RFC 822 وإضافات بريد الإنترنت متعدد الأغراض Multipurpose Internet Mail Extensions -أو اختصارًا MIME- صيغة رسائل البريد الإلكتروني. وبالمثل، يُعَد بروتوكول HTTP بروتوكولًا جالبًا لصفحات الويب، ولكن لغة توصيف النصوص الترابطية HyperText Markup Language -أو اختصارًا HTML- هي توصيفٌ مصاحبٌ لتحديد الشكل الأساسي لتلك الصفحات.

تتمثل النقطة الثالثة في أن بروتوكولات التطبيق الموضَّحة في هذا القسم تتّبع نفس نمط اتصال الطلب / الرد request/reply، لذلك قد تُبنَى فوق بروتوكول نقل استدعاء الإجراء البعيد Remote Procedure Call أو اختصارًا RPC، ولكن ليس هذا هو الحال، حيث تُطبَّق عوضًا عن ذلك فوق بروتوكول TCP.

يعيد كلُ بروتوكول إنشاءَ آليةٍ بسيطة تشبه آلية RPC على بروتوكول نقلٍ موثوق مثل بروتوكول TCP. ونقول هنا آليةً بسيطة، لأنه ليس كل بروتوكولٍ مصمَّمًا لدعم استدعاءات الإجراءات البعيدة العشوائية ذات النوع الذي ناقشناه سابقًا، ولكنه مصممٌ لإرسال مجموعةٍ محددة من رسائل الطلب والرد عليها.

لقد أثبت النهج الذي اتبعه بروتوكول HTTP فعاليته، لذلك اعتمدته معمارية خدمات الويب Web Services architecture على نطاقٍ واسع مع إنشاء آليات RPC العامة فوق بروتوكول HTTP وليس العكس، وسنتحدث عن هذا الموضوع في نهاية هذا القسم.

البريد الإلكتروني باستخدام بروتوكولات SMTP وMIME وIMAP

يُعَد البريد الإلكتروني أحد أقدم التطبيقات الشبكية، فما الذي قد ترغب فيه أكثر من إرسال رسالةٍ إلى مستخدمٍٍ على الطرف الآخر من رابطٍ يعبر البلاد؟ كان ذلك بمثابة نسخة القرن العشرين من القول "سيد واتسون، تعال إلى هنا أريد أن أراك". لم يتصوَّر روّادُ شبكة أربانت ARPANET البريدَ الإلكتروني على أنه تطبيقٍ رئيسي عندما جرى إنشاء الشبكة، حيث كان الوصول إلى موارد الحوسبة عن بُعد هو الهدف الرئيسي لتصميم الشبكات، ولكن اتضح أنه التطبيق الذي أحدث ضجةً كبيرةً عند ظهوره، أو كما يُقال عنه "التطبيق القاتل killer app" الأصلي للإنترنت.

وكما هو مذكورٌ أعلاه، يجب أولًا التمييز بين واجهة المستخدم مثل قارئ بريدك وبين بروتوكولات نقل الرسائل الأساسية مثل بروتوكول SMTP أو بروتوكول IMAP، كما يجب ثانيًا التمييز بين بروتوكول النقل والمعيار المصاحب، مثل معيارَي RFC 822 وMIME الذي يحدد صيغة الرسائل المُتبادَلة. وسنبدأ بالحديث عن صيغة الرسالة في ما يلي.

صيغة الرسالة

يحدّد معيار RFC 822 الرسائل بحيث تتكون من جزأين هما الترويسة header والجسم body، ويُمثَّل كلا الجزأين مثل نص ASCII. لقد كان جسم الرسالة بسيطًا، ولا يزال هذا هو الحال على الرغم من إضافة معيار MIME على معيار RFC 822 للسماح لجسم الرسالة بحمل جميع أنواع البيانات؛ كما لا تزال هذه البيانات ممثَّلةً مثل نص ASCII، ولكن نظرًا لأنها قد تكون نسخةً مشفَّرةً من صورة JPEG على سبيل المثال، فقد لا يستطيع المستخدم البشري قراءتها بالضرورة.

أما ترويسة الرسالة فهي سلسلةٌ من الأسطر المنتهية بالرمز <CRLF> الذي يرمز إلى carriage-return plus line-feed، وهما زوجان من أحرف تحكم نظام ASCII يُستخدمان غالبًا للإشارة إلى نهاية سطرٍ من النص؛ حيث يعني الجزء carriage-return العودة إلى بداية السطر الحالي دون النزول إلى السطر التالي، ويعني الجزء line-feed النزول إلى السطر التالي. تُفصَل الترويسة عن جسم الرسالة بسطرٍ فارغ، ويحتوي كل سطر ترويسة على نوعٍ وقيمةٍ مفصولين بنقطتين. العديد من سطور الترويسة هذه مألوفةٌ للمستخدمين، حيث يُطلب منهم تعبئتها عند إنشاء رسالة بريد إلكتروني، وتحدد الترويسة مستلم الرسالة وتوضّح شيئًا عن الغرض من هذه الرسالة.

تُملَأ الترويسات الأخرى بواسطة نظام تسليم البريد الأساسي، مثل وقت إرسال الرسالة والمستخدم الذي أرسل الرسالة وخوادم البريد التي تعاملت مع هذه الرسالة، وهناك العديد من سطور الترويسة الأخرى مثل القارئ المهتم الذي يُحال إلى معيار RFC 822. لقد توسَّع معيار RFC 822 في عام 1993 وجرى تحديثه عدة مراتٍ منذ ذلك الحين للسماح لرسائل البريد الإلكتروني بحمل العديد من أنواع البيانات المختلفة، مثل الصوت والفيديو والصور ومستندات PDF وما إلى ذلك.

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

يتضمّن الجزء الثاني تعريفات لمجموعةٍ من أنواع المحتويات والأنواع الفرعية، حيث يحدّد معيار MIME على سبيل المثال العديد من أنواع الصور المختلفة، بما في ذلك image/gif وimage/jpeg، ولكلٍ منها معنىً واضح. يشير النوع text/plane مثلًا إلى نصٍ بسيط قد تجده في رسالة بنمط vanilla 822-style، بينما يشير النوع text/richtext إلى رسالةٍ تحتوي على نصٍ "مرمَّز marked up"، أي نصٍ يستخدم خطوطًا خاصة وخطوطًا مائلة وغير ذلك.

يحدد المعيار MIME أيضًا نوع التطبيق application على سبيل المثال، حيث تتوافق الأنواع الفرعية مع خرج برامج التطبيق المختلفة مثل النوع application/postscript والنوع application/msword. ويعرّف المعيار MIME أيضًا نوعًا متعدد الأجزاء multipart، يوضّح كيفية هيكلة الرسالة التي تحمل أكثر من نوع بياناتٍ واحد، وهذا يشبه لغة البرمجة التي تحدد كلًا من الأنواع الأساسية مثل الأعداد الصحيحة والعشرية، والأنواع المركبة مثل البُنى والمصفوفات. هناك نوعٌ فرعي متعدد الأجزاء multipart محتمل هو النوع mixed، والذي يشير إلى احتواء الرسالة على مجموعةٍ من أجزاء البيانات المستقلة بترتيبٍ محدّد، وكل جزءٍ له سطر ترويسة خاصٍ به يصِف نوع ذلك الجزء.

يحوي الجزء الثالث طريقةَ تشفير أنواع البيانات المختلفة، بحيث يمكن حملها ضمن رسالة البريد الإلكتروني التي تستخدم نظام ASCII. تكمن المشكلة في أنه قد يحتوي أي بايتٍ مؤلفٍ من 8 بتات في الصورة على قيمةٍ من بين 256 قيمةٍ مختلفة ضمن بعض أنواع البيانات مثل صورة JPEG، وتحتوي مجموعة ٌفرعيةٌ واحدة فقط من هذه القيم على أحرف ASCII صالحة. يجب أن تحتوي رسائل البريد الإلكتروني على أحرف ASCII فقط، لأنها قد تمر عبر عددٍ من الأنظمة الوسيطة مثل البوابات التي تفترض أن جميع رسائل البريد الإلكتروني هي رسائل ASCII وقد تُفسِد الرسالة إذا كانت تحتوي على أحرف ليست أحرف ASCII.

لمعالجة هذه المشكلة، يستخدم معيار MIME ترميزًا مباشرًا للبيانات الثنائية في مجموعة أحرف ASCII، ويُطلق على هذا الترميز اسم base64، الذي تتمحور فكرته على ربط كل ثلاثة بايتات من البيانات الثنائية الأصلية مع أربعة أحرف ASCII عن طريق تجميع البيانات الثنائية في وحداتٍ مؤلفة من 24 بتًا، وتقسيم كل وحدةٍ إلى أربعة أجزاء، بحيث يتألف كل جزءٍ من 6 بتات، ثم يُربَط كل جزءٍ مؤلفٍ من 6 بتات مع حرفٍ من بين 64 حرف ASCII صالح؛ فمثلًا يُربَط العدد 0 مع الحرف A، والعدد 1 مع الحرف B، وهلم جرًا. إذا نظرت إلى رسالة مشفَّرةٍ باستخدام نظام التشفير base64، فستلاحظ فقط الأحرف الكبيرة والصغيرة التي عددها 52، والأرقام العشرة من 0 إلى 9، والأحرف الخاصة + و/، وتلك هي أول 64 قيمةً في مجموعة أحرف ASCII.

يمكن تشفير رسالة MIME المكونة من نصٍ عادي فقط باستخدام نظام ASCII ذو 7 بتات من أجل تسهيل قراءة البريد قدر الإمكان لأولئك الذين ما زالوا يصرّون على استخدام قارئات البريد النصية فقط.

تظهر الرسالة التي تحتوي على نصٍ أصلي وصورة JPEG وملف PostScript بجمع كل ما سبق معًا على النحو التالي:

MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="-------417CA6E2DE4ABCAFBC5"
From: Reem Haddad <Reem@cisco.com>
To: Anas@cs.Princeton.edu
Subject: promised material
Date: Mon, 07 Sep 1998 19:45:19 -0400

---------417CA6E2DE4ABCAFBC5
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Anas,,

Here are the jpeg image and draft report I promised.

--Reem

---------417CA6E2DE4ABCAFBC5
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
... unreadable encoding of a jpeg figure
---------417CA6E2DE4ABCAFBC5
Content-Type: application/postscript; name="draft.ps"
Content-Transfer-Encoding: 7bit
... readable encoding of a PostScript document

يشير السطر الموجود في ترويسة الرسالة في هذا المثال إلى احتواء الرسالة على أجزاءٍ مختلفة، يُشار إلى كلٍ منها بسلسلة أحرف لا تظهر في البيانات نفسها، وكل جزءٍ له أسطر Content-Type وContent-Transfer-Encoding الخاصة به.

نقل الرسالة

نُقِلت غالبية البريد الإلكتروني من مضيفٍ إلى مضيف باستخدام بروتوكول SMTP فقط لسنواتٍ عديدة، حيث يلعب هذا البروتوكول دورًا مركزيًا، ولكنه الآن مجرد بروتوكول بريد إلكتروني واحدٍ من بين عدة بروتوكولات؛ فبروتوكول الوصول إلى الرسائل عبر الإنترنت Internet Message Access Protocol -أو اختصارًا IMAP-، وبروتوكول مكتب البريد Post Office Protocol -أو اختصارًا POP-؛ هما بروتوكولان مُهمان آخران لاسترداد رسائل البريد. سنبدأ مناقشتنا ببروتوكول SMTP، ثم ننتقل إلى بروتوكول IMAP.

يتفاعل المستخدمون مع قارئ البريد mail reader عند كتابة رسائل البريد الإلكتروني وحفظها والبحث عنها وقراءتها، حيث تتوفر قارئات بريدٍ لا حصر لها للاختيار من بينها، تمامًا مثل العديد من متصفحات الويب. لقد سجّل المستخدمون في الأيام الأولى للإنترنت الدخولَ إلى الجهاز الذي توجد عليه علبة بريدهم mailbox، وكان قارئ البريد الذي استدعوه برنامجًا تطبيقيًا محليًا يستخرج الرسائل من نظام الملفات؛ بينما يصل المستخدمون اليوم عن بُعد إلى صندوق بريدهم من الحواسيب المحمولة أو الهواتف الذكية ولا يسجلون الدخول أولًا إلى المضيف الذي يخزّن بريدهم (خادم بريد mail server)، ويُستخدَم بروتوكول نقل البريد الثاني، مثل بروتوكولَي POP أو IMAP، لتنزيل البريد الإلكتروني عن بُعد من خادم بريدٍ إلى جهاز المستخدم.

يوجد برنامج بريد خفي mail daemon، يُسمى عمليةً process أيضًا، والذي يعمل على كل مضيفٍ يحتوي صندوق بريد. يمكنك التفكير في هذه العملية المُسماة أيضًا وكيل نقل الرسائل message transfer agent أو اختصارًا MTA بأنها تلعب دور مكتب البريد؛ حيث يَمنح المستخدمون أو قرّاء البريد الخاص بهم الرسائل التي يريدون إرسالها للمستخدمين آخرين إلى البرنامج الخفي daemon، والذي يُشغّل بدوره بروتوكول SMTP عبر بروتوكول TCP لنقل الرسالة إلى برنامجٍ خفي يعمل على جهاز آخر، كما يضع الرسائل الواردة في صندوق بريد المستخدم ليتمكن قارئ البريد الخاص بالمستخدم من العثور عليها لاحقًا.

يُعَد بروتوكول SMTP بروتوكولًا لتمكين أي شخصٍ من تنفيذه، لذلك يمكن نظريًا أن يكون هناك العديد من التطبيقات المختلفة لبرنامج البريد الخفي، ولكن اتضح أنه لا يوجد سوى عدد قليل من التطبيقات الشائعة مثل برنامج sendmail القديم من نظام Berkeley Unix وبرنامج postfix.

SequenceOfMailGatewaysStoreAndForwardEmailMessages.png

يمكن بالتأكيد أن ينشئ وكيل MTA على جهاز المرسل اتصال SMTP / TCP بوكيل MTA على خادم بريد المستلم، ولكن سيمر البريد في كثيرٍ من الحالات ببوابةٍ أو أكثر من بوابات بريد gateways mail في مساره من مضيف المرسل إلى مضيف المستلم، كما ستشغِّل هذه البوابات مثل المضيفين النهائيين أيضًا عملية وكيل نقل الرسائل.

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

قد تتساءل، لماذا تُعَد بوابات البريد ضرورية؟ ولماذا لا يستطيع مضيف المرسل إرسال الرسالة إلى مضيف المستقبل؟ إن أحد الأسباب هو أن المستقبل لا يريد تضمين المضيف الذي يقرأ البريد الإلكتروني عليه ضمن عنوانه، والسبب الآخر هو التوسّع، حيث يوجد في المؤسسات الكبيرة عددٌ من الأجهزة المختلفة التي تحتوي على صناديق بريد للمؤسسة. يُرسَل البريد المُسلّم إلى المستخدم Anas@cs.princeton.edu على سبيل المثال أولًا إلى بوابة بريدٍ في قسم علوم الحاسوب CS في جامعة برينستون، أي إلى المضيف المسمّى cs.princeton.edu، ثم يُمرر مُتضمنًا اتصالًا ثانيًا إلى الجهاز الذي يمتلك أنس صندوق بريد عليه.

تحتفظ بوابة التمرير بقاعدة بياناتٍ تربط المستخدمين بالجهاز الذي توجد عليه علبة بريدهم؛ فلا يلزم أن يكون المرسل على علمٍ بهذا الاسم المحدد. ستساعدك قائمة سطور الترويسة في الرسالة على تتبّع بوابات البريد التي اجتازتها رسالةٌ معينة، وهناك سببٌ آخر وراء الحاجة إلى بوابات البريد، خاصةً في الأيام الأولى للبريد الإلكتروني، وهو أنه قد لا نستطيع الوصول دائمًا إلى الجهاز الذي يستضيف صندوق بريدِ أيّ مستخدم، وفي هذه الحالة تحتفظ بوابة البريد بالرسالة حتى تسليمها.

يُستخدَم اتصال SMTP مستقلًا بين كل مضيفَين لنقل الرسالة إلى مكانٍ أقرب من المستقبل، وذلك بغض النظر عن عدد بوابات البريد الموجودة في المسار. تتضمن كل جلسة SMTP حوارًا بين برنامجي البريد الخفيين mail daemons، حيث يعمل أحدهما مثل عميل والآخر يعمل خادمًا، وقد تُنقل رسائلٌ متعددة بين المضيفين خلال جلسةٍ واحدة.

بما أن معيار RFC 822 يعرّف الرسائل باستخدام نظام ASCII بتمثيلٍ أساسي، فلا ينبغي أن يكون مفاجئًا معرفة أن بروتوكول SMTP يعتمد أيضًا على نظام ASCII، وهذا يعني أنه من الممكن أن يتظاهر إنسانٌ على لوحة مفاتيح بأنه برنامج عميل SMTP.

يمكن فهم بروتوكول SMTP بصورةٍ أفضل من خلال مثالٍ بسيط. نوضح فيما يلي تبادلًا بين المضيف المرسِل cs.princeton.edu والمضيف المستلِم cisco.com، حيث يحاول المستخدم أنس في جامعة برينستون في هذه الحالة إرسال بريدٍ إلى المستخدمَين ريم وجاد في سيسكو. أُضفيت أسطرٌ فارغة إضافية ليصبح الحوار أكثر قابليةٍ للقراءة.

HELO cs.princeton.edu
250 Hello daemon@mail.cs.princeton.edu [128.12.169.24]

MAIL FROM:<Anas@cs.princeton.edu>
250 OK

RCPT TO:<Reem@cisco.com>
250 OK

RCPT TO:<Jad@cisco.com>
550 No such user here

DATA
354 Start mail input; end with <CRLF>.<CRLF>
Blah blah blah...
...etc. etc. etc.
<CRLF>.<CRLF>
250 OK

QUIT
221 Closing connection

كما ترى، يتضمن بروتوكول SMTP سلسلةً من التبادلات بين العميل والخادم، حيث ينشر العميل أمرًا مثل الأمر QUIT في كل تبادلٍ ويستجيب الخادم برمزٍ مثل 250 و550 و354 و221، كما يعرض الخادم أيضًا شرحًا لهذا الرمز الذي يمكن أن يقرأه الإنسان مثل No such user here.

يعرّف العميل أولًا في هذا المثال نفسَه للخادم باستخدام الأمر HELO، الذي يعطي اسم النطاق مثل وسيط، ثم يتحقق الخادم من أن هذا الاسم متوافق مع عنوان IP الذي يستخدمه اتصال TCP؛ حيث ستلاحظ أن الخادم يبيّن عنوان IP هذا مرةً أخرى إلى العميل، ثم يسأل العميلُ الخادمَ عما إذا كان على استعدادٍ لقُبول البريد لمستخدمَين مختلفَين؛ فيستجيب الخادم بالقول "نعم" لأحدهما و"لا" للآخر، ثم يرسل العميل الرسالة التي تنتهي بسطر ونقطةٍ واحدة (".")، وينهي العميل الاتصال أخيرًا.

هناك بالطبع العديد من الأوامر ورموز الإرجاع الأخرى، حيث يمكن للخادم الاستجابة لأمر العميل RCPT بالرمز 251، والذي يشير إلى أن المستخدم ليس لديه صندوق بريد على هذا المضيف، ولكن الخادم يَعِد بتمرير الرسالة إلى برنامج بريدٍ خفيٍ آخر، أي يعمل المضيف مثل بوابة بريد، حيث يمكن للعميل مثلًا إصدار عملية VRFY للتحقق من عنوان بريد المستخدم الإلكتروني، ولكن دون إرسال رسالةٍ إلى المستخدم.

وسطاء عمليات MAIL وRCPT مثل الوسيطين FROM:<Anas@cs.princeton.edu> وTO:<Reem@cisco.com> على التوالي اللذين يبدوان مثل حقول ترويسة 822. يحلّل برنامج البريد الخفي الرسالةَ لاستخراج المعلومات التي يحتاجها لتشغيل بروتوكول SMTP، حيث يقال بأن المعلومات المُستخرَجة تشكّل مغلّفًا envelope للرسالة، كما يستخدم عميل SMTP هذا المُغلّف لتحديد معامِلات التبادل مع خادم SMTP.

إن السبب الذي جعل إرسال البريد sendmail شائعًا للغاية، هو عدم الرغبة في إعادة تطبيق وظيفة تحليل الرسائل. تبدو عناوين البريد الإلكتروني اليوم رديئة جدًا مثل العنوان Anas@cs.princeton.edu، لكنها لم تكن على هذه الحال منذ ظهورها، حيث كانت رؤية عناوين البريد الإلكتروني بالنموذج user%host@site!neighbor أمرًا مألوفًا في الأيام التي سبقت اتصال الجميع بالإنترنت.

قارئ البريد

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

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

يشبه بروتوكولُ IMAP بروتوكولَ SMTP من نواحٍ عديدة، فهو بروتوكول عميل / خادم client/server يعمل عبر بروتوكول TCP، حيث يصدر العميل الذي يعمل على جهاز سطح المكتب أوامرًا للمستخدم على شكل أسطر نصوص ASCII منتهيةً بالرمز <CRLF>، كما يستجيب خادم البريد العامل على الجهاز المُحتفِظ بصندوق بريد المستخدم بالمثل. يبدأ التبادل باستيثاق العميل لنفسه وتحديد صندوق البريد الذي يريد الوصول إليه، ويمكن تمثيل ذلك من خلال مخطط انتقال الحالة البسيط الموضَّح في الشكل الآتي، حيث يُعَد الأمران LOGIN وLOGOUT مثالَين عن الأوامر الممكن للعميل إصدارها، بينما تُعَد الاستجابة OK استجابة خادمٍ محتملة.

تتضمن الأوامر الشائعة الأخرى الأمر EXPUNGE؛ الذي يعني إزالة جميع الرسائل المحذوفة، كما تتضمن استجابات الخادم الإضافية الاستجابة NO؛ أي ليس لدى العميل إذنٌ لتنفيذ هذه العملية والاستجابة BAD؛ أي أن الأمر غير صحيح.

IMAPStateTransitionDiagram.png

يعيد الخادم رسالةً بتنسيق MIME ويفك قارئ البريد تشفيرها عندما يطلب المستخدم جلب FETCH هذه الرسالة، كما يحدّد بروتوكول IMAP أيضًا مجموعةً من سمات الرسالة التي يجري تبادلها كأنها جزءٌ من أوامر أخرى، وذلك بغض النظر عن نقل الرسالة نفسها.

تتضمن سِمات attributes الرسالة معلوماتٍ مثل حجم الرسالة، وعدة رايات flags مرتبطة بالرسالة مثل الرايات Seen وAnswered وDeleted وRecent، حيث تُستخدَم هذه الرايات للحفاظ على تزامن العميل والخادم؛ أي إذا حذف المستخدم رسالةً في قارئ البريد، فسيحتاج العميل إلى إبلاغ خادم البريد بهذه الحقيقة، وإذا قرّر المستخدم في وقتٍ لاحق إزالة expunge جميع الرسائل المحذوفة، فسيصدر العميل الأمر EXPUNGE إلى الخادم، والذي يفهم أنه يجب إزالة جميع الرسائل المحذوفة مسبقًا من صندوق البريد.

أخيرًا، لاحظ أنه عندما يرد المستخدم على رسالةٍ، أو يرسل رسالةً جديدة، فلا يمرر قارئ البريد الرسالة من العميل إلى خادم البريد باستخدام بروتوكول IMAP، ولكنه يستخدم بروتوكول SMTP بدلًا من ذلك؛ وهذا يعني أن خادم بريد المستخدم هو فعليًا أول بوابة بريد يجري اجتيازها على طول المسار من سطح المكتب إلى صندوق بريد المستلم.

ترجمة -وبتصرّف- للقسم Traditional Applications من فصل Applications من كتاب Computer Networks: A Systems Approach.

اقرأ أيضًا


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

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

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



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

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

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

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

  Only 75 emoji are allowed.

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

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

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


×
×
  • أضف...