האלגוריתם של נייגל

מתוך ויקיפדיה, האנציקלופדיה החופשית
ערך מחפש מקורות
רובו של ערך זה אינו כולל מקורות או הערות שוליים, וככל הנראה, הקיימים אינם מספקים.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.
ערך מחפש מקורות
רובו של ערך זה אינו כולל מקורות או הערות שוליים, וככל הנראה, הקיימים אינם מספקים.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.

האלגוריתם של נייגלאנגלית: Nagle Algorithm) הוא אמצעי לשיפור יעילות ברשתות TCP/IP על ידי הפחתת מספר חבילות המידע הנשלחות ברשתות תקשורת. האלגוריתם הוצג במסמך Congestion Control in IP/TCP Internetworks (נגיש ב-RFC 896) ונקרא על שם ממציאו ג'ון נייגל (John Nagle). הוא מאפשר את ייעול השימוש במשאבי רשת על ידי הימנעות מבעיה אותה הוא מכנה "בעיית החבילות הקטנות".

האלגוריתם נמצא בשימוש נרחב באימפלמנטציות TCP, אך יש מקרים שעדיף שלא יעבוד, לדוגמה באפליקציות WINDOWS שבהן יש תנועה של עכבר, המצריכה זמן תגובה קצר.

בעיית החבילות הקטנות[עריכת קוד מקור | עריכה]

הבעיה מתרחשת ביישומים השולחים מידע על גבי TCP בחבילות קטנות במיוחד, לעיתים קרובות בגודל של בייט בודד. היות שגודל הפתיח של חבילת TCP הוא 40 בתים (20 עבור פתיח ה-TCP ו-20 נוספים עבור פתיח ה-IP), החבילה הנשלחת היא בגודל של 41 בתים עבור בייט בודד של מידע יעיל - תקורה עצומה שמעמיסה מאוד על הרשת. בין הפרוטוקולים הנפוצים שבהם התופעה מתרחשת ניתן למנות את פרוטוקול Telnet, שבו כמעט כל הקלדה מיצרת בית אחד של מידע הנשלח מיידית.

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

האלגוריתם של נייגל מייעל את התקשורת על ידי מיזוג מספר חבילות מידע קטנות המיועדות לשליחה לחבילה יחידה. וליתר דיוק, המידע היוצא נאגר כל עוד יש חבילה שנשלחה ועליה עדיין לא התקבל אישור (ACK) מהמקבל או עד אשר הצטברה כמות המידע המקסימלית שניתן לשלוח בחבילת מידע יחידה.

האלגוריתם[עריכת קוד מקור | עריכה]

if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

כאשר MSS הוא גודל חבילת המידע המקסימלית שניתן לשלוח על גבי TCP.

האלגוריתם הוא חלק מ Transmission Control Protocol.

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