Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
לדלג לתוכן

Fast retransmit

מתוך ויקיפדיה, האנציקלופדיה החופשית

Fast retransmitתרגום חופשי: שידור מהיר מחדש) הוא הרחבה לפרוטוקול TCP העוסקת בניהול עומסים ברשת על ידי הפחתת זמן ההמתנה של השולח לפני שליחה מחדש של חבילה שאבדה ברשת. האלגוריתם הוצג לראשונה במערכת ההפעלה 4.3BSD וזכה לסקירה בוועידת RFC 2001 בשנת 1997[1].

בפרוטוקול TCP המקורי, הצד השולח נעזר בטיימר כדי לקבוע שחבילה אבדה ברשת. אם תוך פרק זמן מסוים (שנקרא timeout ומהווה פונקציה של ה-Round-trip delay time,‏ RTT, המוערך), הצד השולח לא קיבל ACK על החבילה, הוא יניח שהחבילה אבדה ברשת, והפרוטוקול המקורי ישלח את החבילה שוב.

הבסיס למנגנון ה-Fast retransmit הוא הרעיון של הודעות ACK נשנות (Duplicate acknowledgement). הודעות ACK נשנות יכולות להופיע בגלל 2 סיבות עיקריות, סידור מחדש של ההודעות (Reordering) או אובדן הודעה. האלגוריתם מניח כי 3 הודעות נשנות מהוות הנחה סבירה לאובדן הודעה ועם זאת מבחין כי ההודעות הנשנות מעידות כי עדיין יש חיבור בין 2 משתמשי הקצה ולכן אין טעם להמתין עד להכרזת Timeout ויש לבצע שליחה נוספת של ההודעה המקורית החשודה כאבודה ולעבור למצב של Fast Recovery.

מנגנון הודעות ה-ACK המרובות פועל כך: לאחר קבלת חבילה (Packet; למשל עם אינדקס - Sequence number -‏ 1), המקבל (Receiver) ישלח הודעת ACK שבה יעלה ב-1 את האינדקס (בדוגמה, 2), כלומר המקבל קיבל את חבילה מספר 1 והוא מצפה כעת לקבל מהשולח את חבילה מספר 2. נניח כעת שחבילה מספר 2 אבדה ברשת. בינתיים קיבל המקבל את חבילות 3, 4 ו-5. לאחר שקיבל את חבילה 3, המקבל ישלח הודעת ACK נוספת, שבה עדיין יודיע שהוא מצפה לחבילה מספר 2. כשהמקבל יקבל את חבילה 4, הוא ישלח הודעת ACK נוספת עם אינדקס 2. כך גם המקרה עבור קבלת חבילה מספר 5. למעשה, השולח קיבל 4 הודעות ACK עם ערך אינדקס המתאים לחבילה מספר 2, מתוכן 3 הודעות ACK נשנות. האלגוריתם בשלב זה יזהה כי מדובר ב-3 חבילות נשנות וישלח את חבילה מספר 2 שוב מבלי להמתין ל-Timeout.

קישורים חיצוניים

[עריכת קוד מקור | עריכה]

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ W. Richard Stevens <rstevens@noao.edu>, TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms, tools.ietf.org (באנגלית)