الخلاصة

  • وصف Jon Postel وJoyce Reynolds في RFC 860 الصادرة في مايو 1983 خيار TELNET المسمى TIMING-MARK ورقمه 6. يرسل أحد الطرفين DO TIMING-MARK، ويضع الطرف الموافق WILL TIMING-MARK في موضع مناسب من تيار العودة بعد مرور العلامة عبر مخازنه المؤقتة.
  • المثال الحاسم هو أمر مكتوب على نحو خاطئ يتبعه إدخال مبكر. يرمي الخادم الأحرف الواردة حتى تعود العلامة، ثم يستأنف تفسير ما كتبه المستخدم بعدما رأى إشارة الخطأ. الطرف الذي طلب العلامة هو المسؤول عن حذف البيانات غير المرغوبة لديه.

يكتب شخص أمراً، ثم يبدأ الأمر الذي يليه قبل وصول الجواب. يكتشف الخادم خطأ في الأول ويرسل علامة استفهام إلى الشاشة. لكن الأحرف التالية ربما ما زالت في حاسوب المستخدم، أو تعبر الشبكة، أو تنتظر في صف الخادم. قراءتها كأوامر جديدة قد تجعل زلة إملائية واحدة تدير بقية الجلسة. سألت RFC 860 سؤالاً عملياً: أين ينتهي الإدخال الذي سبق رؤية التحذير؟

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

يرسل الخادم IAC DO TIMING-MARK. فإذا وافق الطرف الآخر، أعاد IAC WILL TIMING-MARK في موضع محدد من تياره. يشرح النص مرور العلامة في مخزن الإخراج لدى ذلك الطرف نحو الشاشة، ثم رجوعها عبر مخزن الإدخال. عند وصول WILL إلى الخادم، يصبح هناك حدٌّ مشترك بين ما سبق مرور العلامة وما تلاه. يستطيع الخادم عندئذ فرز الأحرف التي كُتبت قبل رؤية علامة الاستفهام عن الأحرف التي كُتبت بعدها.

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

للسلة المهملة صاحب محدد. تضع RFC 860 مسؤولية رمي الأحرف غير المرغوبة على من أرسل DO. الطرف الآخر يضع علامة يمكن الوثوق بموضعها، أما طالبها فيطبّقها على بياناته. وتعمل الفكرة في الاتجاه المعاكس أيضاً: إذا كانت الشاشة تتلقى مخرجات قديمة من الخادم، يمكن لطرف المستخدم طلب علامة، وإخفاء تلك المخرجات حتى عودة WILL، ثم عرض ما أنتجه الخادم بعد أمر جديد.

تحمل الردود درجات مختلفة من المعرفة. تعني WILL أن العلامة وُضعت في الموضع المطلوب. وترفض WON'T ذلك الالتزام لكنها تؤكد وصول البيانات السابقة إلى الطرف الآخر. أما DON'T فيبلغ بأن WILL سابقة قد أُهملت. الوضع الابتدائي لا يطلب تزامناً صريحاً. وتذكر RFC استعمال العلامة لقياس زمن الذهاب والعودة؛ نقطة الرجوع المعروفة تساعد في القياس، بينما العلامة نفسها تحدد ترتيب البيانات.

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

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