إعادة الإرسال

إعادة الإرسال تقسم عمليات إعادة الإرسال إلى ثلاث أنواع رئيسية هي:
1-التوقف والانتظار (بالإنجليزية: Stop-and-wait)‏:
وهي أبسط طرق إعادة الإرسال حيث نحتاج فقط إلى مؤقت عند المرسل يبدأ العمل مجرد أن يرسل المرسل الطرد، وعند مرور فترة معينة لدى المرسل ولم يكن قد استقبل إشارة التأكيد الإيجابي خلالها يقوم بإعادة الإرسال لنفس الطرد، ولكن هنا يوجد حالتان من المشاكل التي تواجه هذه الطريقة: 
1)فقدان الطرد على الطريق وهذه قد حلت من خلال استخدام المؤقت عند المرسل وعند نفاذ مدة معينة من الوقت يقوم بإعادة إرسال الطرد.
2)فقدان إشارة التأكيد نفسها على الطريق: وهذه المشكلة واردة الحدوث أيضاً ويتم حلها بنفس الطريقة السابقة باستخدام المؤقت عند المرسل حيث أن المرسل لا يميز بين الحالتين السابقتين إن كان الطرد قد فقد أم أن إشارة التأكيد هي التي فقدت لأنه لم يستلم إشارة التأكيد على وصول الطرد بشكل صحيح خلال الفترة المعينة لذلك، ولكن سنواجه مشكلة هنا عند المستقبل ذلك أنه سيستقبل الطرد مرتين وسيحوي نسختين منه:
لحل عملية تكرار الطرد عند المستقبل يتم إضافة بت إلى الطرد يحوي إما 0 أو 1 ، بالمقابل يضيف المستقبل أيضاً بتاً إلى إشارة التأكيد الإيجابية هو أيضاً إما 0 أو 1، وذلك بالتناوب، أي مثلاً إذا أرسل المرسل طرداً يحوي 0 فيرد المستقبل (بحالة وصوله بشكل صحيح) بإشارة تأكيد 1 ، وبعدها يرسل المرسل طرداً يحوي 1 (بدلاً من صفر) ويرد عليه المستقبل بإشارة تأكيد 0 وهكذا..
2-إعادة الإرسال التراكمي (بالإنجليزية: Go-back-N)‏ :
في هذه الطريقة يقوم المرسل بإرسال الطرود بشكل متسلسل، ويقوم المستقبل بإرسال إشارات التأكيد من النوعين سواء إيجابية أو سلبية وذلك من أجل إخبار المرسل بوصول الطرود بشكل صحيح أم لا، ولكن تكمن الفكرة بأنه إذا ما تم استقبال طرد تالف عند المستقبل أو عدم وصول أحد الطرود يرسل المستقبل إشارة سلبية لتدل على فقدان الطرد رقم (س) مما يدعو المرسل إلى إعادة إرساله مع كل الطرود التالية له التي أرسلت بعده، وعند انتهاء عملية إعادة إرسال هذه الطرود يستمر المرسل بالإرسال بشكل عادي للطرود التالية لتلك التي أعيد إرسالها. 
وكما سبق وذكرنا أن المستقبل يرسل إشارات التأكيد الإيجابية بعد وصول عدد معين من الطرود المتفق عليه بشكل صحيح وإلا يرسل إشارة سلبية للطرد المفقود أو التالف رقم س ، ولكن المشكلة التي تواجهنا إن تلفت إشارة التأكيد نفسها، وهناك حالتان لها:
1)تلف الإشارة الإيجابية:
وهذه في الحقيقة تحل بوضع مؤقت عند المرسل يبدأ العمل عند إرسال الطرد ويتوقف عند وصول إشارة التأكيد الإيجابية الخاصة به، وعند نفاذ الوقت على وصول إشارة التأكيد الخاصة به يقوم المرسل بإرسال طرد حاوي على بت زائد قيمته 1 وهذا الطرد يسمى أمر تأكيد ليقوم المستقبل بإرسال إشارة تأكيد خاصة بالطرد المنتظر وصوله عنده، فإذا فشل المستقبل بإرسال إشارة التأكيد يقوم المرسل بإرسال أمر تأكيد آخر (بعد أن ينتهي الوقت المخصص للرد على أمر التأكيد) هكذا حتى الوصول إلى الحد الأعظمي لعدد أوامر التأكيد وعندها يتم استدعاء إجرائية إعادة البدء التي تعيد إرسال جميع الطرود من البداية. 
2)تلف إشارة التأكيد السلبي :
وهذه الحالة تقريباً مشابهة للسابقة حيث أن الطرد الذي أرسله المرسل لم يصل إلى المستقبل لذلك لم يرد بأي إشارة (لا سلبية ولا إيجابية) وبالتالي عند نفاذ المؤقت الذي عند المرسل يرسل أمر تأكيد حتى يرد المستقبل عليه بإشارة إما سلبية أو إيجابية بحسب حالة الطرد الذي أرسله المرسل.
3-إعادة الإرسال الاختياري (بالإنجليزية: Selective-retransmission)‏:
في هذه الطريقة يستخدم المستقبل التأكيد السلبي وذلك من أجل الطرود التي لم تصل إليه أو تلك التي وصلت بشكل خاطئ، والمرسل يقوم بإعادة إرسال هذه الطرود فقط من بين الطرود التي يقوم أرسلها، هذه الطريقة لإعادة الإرسال ليست أفضل بكثير من سابقتها، ولكن في الحقيقة العكس هو الصحيح، لكن لماذا؟ 
ذلك لأننا بحاجة إلى ذاكرة كبيرة الحجم في المستقبل من أجل تخزين الطرود التي تصل إليه بعد ذلك المفقود، كما أننا نقوم بترك فراغ ذو حجم كافي من أجل إضافة ذلك الطرد الذي سَيُعَاد إرساله فيه، وذلك يكلفنا دارات منطقية إضافية للوصول إلى هذا الموقع الفارغ في ذاكرة المستقبل الخاصة، وكذلك نحن بحاجة إلى دارات إضافية عند المرسل كوننا سنقوم بانتقاء أحد الطرود (أو بعضها) التي سنقوم بإعادة إرسالها أي أيضاً نحتاج لانتخاب ذلك الذي سيتم إعادة إرساله! 
ولكن كفعالية تعتبر طريقة إعادة الإرسال الاختياري أفضل كوننا لا نعيد إلا إرسال الطرد الضائع فقط.
-في التي سي بي نقوم بترقيم الثمانيات بدلاً من الطرود، ولذلك عندما يستقبل أحد الطرفين (المرسل أو المستقبل بما أن عمليات النقل متبادلة بين الطرفين) يقوم بإرسال إشارة تأكيد إيجابية على البايتات التي وصلت وليس على الطرد الذي وصل، لذلك أصبح بالإمكان أن يقوم المرسل بإعادة إرسال طرد واحد يحوي البايتات التي لم تصل جميعها أو التي قد وصلت خاطئة دون التقيد بإرسال الطرود الضائعة كلها، فمثلاً إن كان يوجد في الطرد الأول 100 بايت خطأ وحجم الطرد هو 1000 بايت، يقوم المستقبل بإخبار المرسل بالبايتات التي الخاطئة فقط ليقوم المرسل بإرسال هذه البايتات فقط دون الحاجة لأن يقوم بإرسال الطرد كاملاً.