يتضمن بروتوكولا النقل المستخدمان لنقل الملفات: TCP وUDP. UDP هو بروتوكول غير موثوق به بينما يوفر TCP الموثوقية والتحكم في التدفق والتحكم في الازدحام، ولكنه يحتوي على مرحلة إنشاء اتصال واضحة، والتي قد لا تجدها بعض التطبيقات مرغوبة. الهدف من هذا المشروع هو تصميم وتنفيذ تطبيق نقل الملفات الذي يحتوي على جميع الميزات الجيدة لـ TCP دون مرحلة إنشاء الاتصال.
يستخدم خادم UDP والعميل تنسيق الرأس التالي:
يتلقى الخادم طلب الملف من العميل. فهو يستخرج اسم الملف من الطلب ويحصل على محتوى الملف في المخزن المؤقت. ثم يقوم بتقسيم الملف إلى أجزاء بحجم 1450 بايت كما يدعمها الرأس.
هناك نوعان من أحجام النوافذ التي يجب أخذها في الاعتبار:
يبدأ الخادم في إرسال مقاطع الملف حتى الحد الأدنى لحجم نافذة الازدحام وحجم النافذة المعلن عنها. بعد إرسال جميع المقاطع في نافذة، ينتظر تلقي إقرار. عند تلقي إقرار لرقم تسلسل أقل من رقم التسلسل التالي الذي سيتم إرساله، فهذا يعني أنه لم يتم استلام بعض المقاطع السابقة بشكل صحيح ويقبل الخادم الإقرارات الثلاثة المكررة من العميل. ثم يقوم بعد ذلك بتعيين رقم التسلسل التالي بناءً على الإقرار المستلم. بعد تلقي الإقرار التراكمي، يستمر في إرسال المقاطع في النافذة التالية. عند تلقي إقرارات مكررة، سيبدأ الخادم في إرسال المقاطع من الحزمة التي لم يتم استلامها بشكل صحيح.
تم تنفيذ خوارزمية جاكوبسون/كاريل لتقدير وقت الرحلة ذهابًا وإيابًا (RTT) للحزم التي سيتم استلامها من قبل العميل والإشعار الذي يتلقاه الخادم. إذا لم يحصل الخادم على إقرار خلال RTT، فسوف يعيد إرسال تلك الحزم مرة أخرى.
الكود الزائف:
Estimated_RTT = (1-α) Estimated RTT + (α) Sample_RTT
In the original TCP Specification, α=.0125
Jacobson/Karels included a variation component to the calculation for the Estimated_RTT
Estimated_RTT = Estimated_RTT + δ (Sample_RTT-Estimated_RTT)
Deviation = Deviation + δ (|Sample_RTT- Estimated_RTT|- Deviation)
Timeout = μ * Estimated_RTT + φ * Deviation
Typically φ=4, μ = 1, δ is between 0 and 1
يبدأ الخادم بإرسال مقطع واحد. ثم تتبع مرحلتين للتحكم في الازدحام:
البداية البطيئة: يتم زيادة حجم المقطع بشكل كبير حتى يتم التعرف عليه بشكل صحيح من قبل جهاز الاستقبال خلال المهلة الزمنية ويكون حجم نافذة الازدحام أقل من ssthresh الذي تم ضبطه على 64000 بايت.
تجنب الازدحام: عندما يصبح حجم نافذة الازدحام أكبر من أو يساوي ssthresh، يتم زيادة حجم نافذة الازدحام خطيًا بمقدار مقطع واحد.
المهلة: يتم حسابها باستخدام خوارزمية جاكوبسون/كاريل المذكورة أعلاه. عند انتهاء المهلة، يتم تعيين ssthresh على نصف قيمة نافذة الازدحام ويتم إعادة تعيين نافذة الازدحام إلى حجم مقطع واحد.
vagrant up
سيؤدي هذا إلى تشغيل كل من أجهزة الخادم والعميل
vagrant ssh reliableUDPServer
vagrant ssh reliableUDPClient
make
./Server port advertised_window
يقبل الخادم وسيطات سطر الأوامر التالية:
المنفذ: رقم المنفذ الذي سيتم استخدامه للاتصال
المعلن عنها: عدد وحدات البايت المسموح للخادم بإرسالها قبل انتظار الإقرار
./Client server_host_name port file_name advertised_window
يقبل العميل وسيطات سطر الأوامر التالية:
المنفذ والنافذة المُعلن عنها: نفس المنفذ الخاص بالخادم
server_host_name: اسم المضيف للخادم
file_name: اسم الملف الذي طلبه العميل
بمجرد تشغيل الكود بنجاح، ستجد الملف الذي طلبه العميل في مجلد ReliableUDPClient.
شبكات الكمبيوتر-من الأعلى إلى الأسفل-النهج