الخلاصة

  • أرسل العميل RRQ أو WRQ إلى المعرّف المعروف 69، لكن الخادم المقبِل ردّ من TID اختاره لنفسه، فأصبح المعرّفان منفذي UDP لبقية النقل.
  • يُرفض مصدر ذو TID مختلف بالخطأ 5 مع استمرار المحادثة المقبولة؛ كما حافظ إصلاح التكرار والتفاوض اللاحق على هذا الحد المؤقت من دون تحويله إلى مصادقة.

الرد الثاني لم يكن المرحلة التالية

يفصل RFC 1350 بين الاستماع إلى طلب جديد وتنفيذ النقل. يختار العميل TID ويرسل طلب القراءة أو الكتابة إلى TID الخادم المعروف، 69. إن وافق الخادم، اختار TID آخر. في القراءة يكشف DATA 1 هذا الطرف، وفي الكتابة يكشفه ACK 0. بعد ذلك تُستخدم القيمتان كمنفذي المصدر والوجهة.

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

لهذا عدّ البروتوكول المنفذ المصدر الخاطئ حالة الخطأ الوحيدة التي لا تنهي الاتصال. أغلب رسائل ERROR تعني النهاية، ولا تُقر ولا تُعاد. الخطأ 5 يحمي الداخل من الخارج: رفض الحزمة الغريبة لا يعني أن الحالة الصحيحة فشلت.

كان 69 عنوان الموعد لا عنوان الملف

صُمم TFTP ليكون صغيراً. يستطيع قراءة ملف أو كتابته ولا يقدم قائمة أدلة أو مصادقة مستخدم كاملة. بدلاً من قناة تحكم طويلة، وضع الحد الأدنى من الحالة في نوع الحزمة، رقم الكتلة، المؤقت ومعرّفي النقل.

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

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

كتلة واحدة حملت حالة التقدم

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

هذا التوقف والانتظار خفّض الذاكرة ومنع الحاجة إلى إعادة ترتيب نافذة. ظل على المرسل أن يحتفظ بالكتلة الحالية فقط. وبعد ACK الأخير، أمكن للمستقبِل أن ينتظر قليلاً: عودة DATA النهائية تعني أن الإقرار ربما ضاع، فيرسله مرة أخرى.

تكوّن دليل التقدم من ثلاثة أشياء صغيرة. TID المتوقع يحدد المحادثة، رقم الكتلة يحدد الجبهة، والمؤقت يقرر متى يُحتمل أن الاستجابة ضاعت. لا ينبغي لإشارة قديمة أن تستولي على وظيفة الثلاثة.

حين استدعى كل تكرار تكراراً آخر

سمحت صياغة RFC 783 المبكرة لأي طرف، عند وصول رزمة قديمة مكررة، بإعادة رزمته الحالية. بعد تأخير وانتهاء مؤقت، كان وصول النسخة القديمة يولد استجابة جديدة؛ ونسخة الاستجابة تولد نسخة أخرى. تستمر DATA وACK مزدوجتين.

سمّى RFC 1123 ذلك متلازمة تلميذ الساحر. لا يلزم أن تتلف بايتات الملف. يكفي أن يضاعف الاسترداد الازدحام الذي سبّب التأخير، فينشئ تأخيرات ومؤقتات إضافية حتى ينتهي النقل بالفشل.

أخذ الإصلاح سلطة الإعادة من ACK المكرر: لا يجوز لمنشئ DATA أن يعيد الكتلة الحالية لمجرد وصول إقرار قديم. المؤقت المناسب أو انتقال الحالة هو الذي يجيز الاسترداد. حل RFC 1350 محل RFC 783 مع السلوك المصحح.

التفاوض بدأ من العميل

حدّ التوقف عند كل كتلة من الأداء. أضاف RFC 2347 خيارات إلى RRQ وWRQ، لكنه حافظ على جهة المبادرة: العميل وحده يطلب. يضع الخادم في OACK الخيارات المطلوبة التي يقبلها فقط. ما لم يُقر يهمل، والخيار الذي لم يطلبه العميل لا يجوز فرضه.

في القراءة يقبل ACK 0 قيم OACK؛ وفي الكتابة تقبلها DATA 1. أتاح RFC 2348 تغيير حجم الكتلة، وأتاح RFC 2349 الفاصل الزمني والحجم الكلي. سمح RFC 7440 بإرسال نافذة من الكتل المتتابعة قبل انتظار ACK لآخرها.

تزيد النافذة مقدار الحالة غير المؤكدة، لكنها لا تبدل زوج TID. ولا تضيف مصادقة أو سرية أو إذن ملف. الأداء موافقة على كمية العمل بين إقرارين، وليس تنازلاً عن حدود المحادثة.

خارج السلك توجد صلاحية الملف

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

تقع هذه المهام على تقييد الشبكة، صلاحيات القراءة والكتابة، مصدر الأثر، حالة الجدار الناري أو NAT، والسجلات التي تصل الطلب في 69 بالزوج الديناميكي. فتح نطاق UDP واسع بحجة دعم TFTP يمحو الحد الذي أنشأه البروتوكول.

تكشف القصة أن البساطة ليست غياب الحكم. للمنفذ العام سلطة استقبال البداية، وللطرفين سلطة اختيار محادثة، ولرقم الكتلة سلطة إعلان التقدم، وللمؤقت سلطة الاسترداد. لا يجوز جمع تلك السلطات في ادعاء واحد بأن الملف موثوق.

المصادر والحدود

يصف RFC 783 التصميم المبكر، ويفرض RFC 1123 إصلاح التكرار، ويقدم RFC 1350 المراجعة. تحدد RFC 2347 وRFC 2348 وRFC 2349 وRFC 7440 الخيارات. يسجل دليل IANA المنفذ 69. لا تقيس المصادر انتشار 2026 ولا تجعل TID دليلاً على الهوية أو الإذن أو التشفير أو سلامة الملف.