תעבורת אמינות TCP
כולנו מכירים את פרוטוקול TCP כפרוטוקול תעבורה אמין, אך כיצד הוא מבטיח את אמינות התעבורה?
כדי להשיג העברה אמינה, יש לקחת בחשבון גורמים רבים, כגון פגיעה בנתונים, אובדן נתונים, כפילויות ופיצולים לא מסודרים. אם לא ניתן לפתור בעיות אלו, לא ניתן להשיג העברה אמינה.
לכן, TCP משתמש במנגנונים כגון מספר רצף, תשובת אישור, בקרת שליחה חוזרת, ניהול חיבורים ובקרת חלונות כדי להשיג שידור אמין.
במאמר זה, נתמקד בחלון הזזה, בקרת זרימה ובקרת עומס של TCP. מנגנון השידור החוזר מכוסה בנפרד בסעיף הבא.
בקרת זרימת רשת
בקרת זרימת רשת, או בקרת תעבורת רשת, היא למעשה ביטוי של מערכת היחסים העדינה בין יצרנים לצרכנים. סביר להניח שנתקלתם בתרחיש זה רבות בעבודה או בראיונות. אם קיבולת היצרן לייצר עולה בהרבה על קיבולת הצריכה של הצרכן, הדבר יגרום לתור להתארך ללא הגבלת זמן. במקרה חמור יותר, ייתכן שתדעו שכאשר הודעות RabbitMQ מצטברות יותר מדי, הדבר עלול לגרום לפגיעה בביצועים של שרת ה-MQ כולו. הדבר נכון גם לגבי TCP; אם לא יסומנו, יותר מדי הודעות יועברו לרשת, והצרכנים יחרגו מקיבולתם, בעוד שהיצרנים ימשיכו לשלוח הודעות כפולות, דבר שישפיע רבות על ביצועי הרשת.
כדי להתמודד עם תופעה זו, TCP מספק מנגנון לשולח לשלוט בכמות הנתונים הנשלחת בהתבסס על קיבולת הקליטה בפועל של המקלט, המכונה בקרת זרימה. המקלט שומר על חלון קבלה, בעוד שהשולח שומר על חלון שליחה. יש לציין שחלונות אלה מיועדים רק לחיבור TCP יחיד ולא כל החיבורים חולקים חלון.
TCP מספק בקרת זרימה באמצעות משתנה עבור חלון קבלה. חלון הקבלה נותן לשולח אינדיקציה לגבי כמות שטח המטמון שעדיין פנוי. השולח שולט בכמות הנתונים הנשלחת בהתאם לקיבולת הקבלה בפועל של המקבל.
שרת המקלט מודיע לשולח על גודל הנתונים שהוא יכול לקבל, והשולח שולח עד למגבלה זו. מגבלה זו היא גודל החלון, זוכרים את כותרת ה-TCP? יש שדה חלון קבלה, המשמש לציון מספר הבייטים שהמקלט מסוגל או מוכן לקבל.
שרת השולח ישלח מעת לעת חבילת בדיקה של חלון, המשמשת לגילוי האם שרת המקבל עדיין מסוגל לקבל נתונים. כאשר זיכרון המאגר של שרת המקבל נמצא בסכנת הצפה, גודל החלון מוגדר לערך קטן יותר כדי להורות לשולח לשלוט בכמות הנתונים הנשלחת.
הנה דיאגרמת בקרת זרימת רשת:
בקרת עומס ברשת
לפני שנציג בקרת עומס, עלינו להבין שבנוסף לחלון הקבלה ולחלון השליחה, קיים גם חלון עומס, המשמש בעיקר לפתרון בעיית הקצב שבו השולח מתחיל לשלוח נתונים לחלון הקבלה. לכן, חלון העומס מתוחזק גם על ידי שולח ה-TCP. אנו זקוקים לאלגוריתם כדי להחליט כמה נתונים מתאימה לשליחה, מכיוון ששליחת מעט מדי או יותר מדי נתונים אינה אידיאלית, ומכאן מושג חלון העומס.
בבקרת זרימת הרשת הקודמת, מה שנמנענו היה שהשולח מילא את המטמון של המקבל בנתונים, אך לא ידענו מה קורה ברשת. בדרך כלל, רשתות מחשבים נמצאות בסביבה משותפת. כתוצאה מכך, ייתכן עומס ברשת עקב תקשורת בין מחשבים מארחים אחרים.
כאשר הרשת עמוסה, אם מספר גדול של חבילות נמשך להישלח, הדבר עלול לגרום לבעיות כגון עיכוב ואובדן חבילות. בשלב זה, TCP ישדר מחדש את הנתונים, אך השידור החוזר יגביר את העומס על הרשת, וכתוצאה מכך עיכובים גדולים יותר ואובדן חבילות רב יותר. זה יכול להיכנס למעגל קסמים ולהמשיך לגדול.
לכן, TCP לא יכול להתעלם ממה שקורה ברשת. כאשר הרשת עמוסה, TCP מקריב את עצמו על ידי הפחתת כמות הנתונים שהוא שולח.
לכן מוצעת בקרת עומס, שמטרתה למנוע מילוי כל הרשת בנתונים מהשולח. כדי לווסת את כמות הנתונים שהשולח צריך לשלוח, TCP מגדיר מושג הנקרא חלון עומס. אלגוריתם בקרת העומס יתאים את גודל חלון העומס בהתאם למידת העומס ברשת, כדי לשלוט בכמות הנתונים הנשלחת על ידי השולח.
מהו חלון עומס? מה הקשר בין זה לחלון שליחה?
חלון העומס הוא משתנה מצב המתוחזק על ידי השולח וקובע את כמות הנתונים שהשולח יכול לשלוח. חלון העומס משתנה באופן דינמי בהתאם לרמת העומס ברשת.
חלון השליחה הוא גודל חלון מוסכם בין השולח למקבל, המציין את כמות הנתונים שהמקבל יכול לקבל. חלון הגודש וחלון השליחה קשורים זה לזה; חלון השליחה בדרך כלל שווה למינימום של חלונות הגודש וחלון הקבלה, כלומר, swnd = min(cwnd, rwnd).
חלון הגודש cwnd משתנה באופן הבא:
אם אין עומס ברשת, כלומר, לא מתרחש פסק זמן לשידור חוזר, חלון העומס גדל.
אם יש עומס ברשת, חלון העומס מקטין.
השולח קובע האם הרשת עמוסה על ידי צפייה האם חבילת אישור ה-ACK מתקבלת בתוך הזמן שצוין. אם השולח אינו מקבל את חבילת אישור ה-ACK בתוך הזמן שצוין, הדבר נחשב כרשת עמוסה.
בנוסף לחלון הגודש, הגיע הזמן לדון באלגוריתם בקרת הגודש של TCP. אלגוריתם בקרת הגודש של TCP מורכב משלושה חלקים עיקריים:
התחלה איטית:בתחילה, חלון העומס של cwnd קטן יחסית, והשולח מגדיל את חלון העומס באופן אקספוננציאלי כדי להסתגל במהירות לקיבולת הרשת.
מניעת גודש:לאחר שחלון הגודש חורג מסף מסוים, השולח מגדיל את חלון הגודש באופן ליניארי כדי להאט את קצב הגידול של חלון הגודש ולמנוע עומס יתר על הרשת.
התאוששות מהירה:אם מתרחשת עומס, השולח חוצה את חלון העומס ונכנס למצב שחזור מהיר כדי לקבוע את מיקום שחזור הרשת דרך אישורים כפולים שהתקבלו, ולאחר מכן ממשיך להגדיל את חלון העומס.
התחלה איטית
כאשר נוצר חיבור TCP, חלון הגודש cwnd מוגדר בתחילה לערך MSS מינימלי (גודל מקטע מקסימלי). בדרך זו, קצב השליחה ההתחלתי הוא בערך MSS/RTT בתים/שנייה. רוחב הפס הזמין בפועל בדרך כלל גדול בהרבה מ-MSS/RTT, לכן TCP רוצה למצוא את קצב השליחה האופטימלי, שניתן להשיג באמצעות התחלה איטית.
בתהליך ההתחלה האיטית, ערך חלון הגודש cwnd יאותחל ל-1 MSS, ובכל פעם שמקטע החבילה המשודר מאושר, ערך cwnd יוגדל ב-MSS אחד, כלומר, ערך cwnd יהפוך ל-2 MSS. לאחר מכן, ערך cwnd מוכפל עבור כל שידור מוצלח של קטע חבילה, וכן הלאה. תהליך הגידול הספציפי מוצג באיור הבא.
עם זאת, קצב השליחה לא תמיד יכול לגדול; הצמיחה חייבת להסתיים מתישהו. אז מתי העלייה בקצב השליחה מסתיימת? התחלה איטית בדרך כלל מסיימת את העלייה בקצב השליחה באחת מכמה דרכים:
הדרך הראשונה היא מקרה של אובדן חבילות במהלך תהליך השליחה של התחלה איטית. כאשר מתרחש אובדן חבילות, TCP מגדיר את חלון הגודש cwnd של השולח ל-1 ומפעיל מחדש את תהליך ההתחלה האיטית. בנקודה זו, מוצג מושג של סף התחלה איטית ssthresh, שערכה ההתחלתי הוא מחצית מערך cwnd שיוצר אובדן חבילות. כלומר, כאשר מזוהה גודש, ערכו של ssthresh הוא מחצית מערך החלון.
הדרך השנייה היא להתאים ישירות לערך סף ההתחלה האיטית ssthresh. מכיוון שערך ה-ssthresh הוא חצי מערך החלון כאשר מתגלה עומס, אובדן חבילות עלול להתרחש עם כל הכפלה כאשר cwnd גדול מ-ssthresh. לכן, עדיף להגדיר את cwnd ל-ssthresh, מה שיגרום ל-TCP לעבור למצב בקרת עומס ולסיים את ההתחלה האיטית.
הדרך האחרונה שבה התחלה איטית יכולה להסתיים היא אם מתגלות שלוש חבילות ACK מיותרות, TCP מבצע שידור חוזר מהיר ונכנס למצב שחזור. (אם לא ברור מדוע ישנן שלוש חבילות ACK, הדבר יוסבר בנפרד במנגנון השידור החוזר.)
מניעת עומסי תנועה
כאשר TCP נכנס למצב בקרת עומס, cwnd מוגדר למחצית מסף העומס ssthresh. משמעות הדבר היא שלא ניתן להכפיל את הערך של cwnd בכל פעם שמתקבל מקטע חבילה. במקום זאת, מאומצת גישה שמרנית יחסית שבה הערך של cwnd גדל ב-MSS אחד בלבד (אורך מקטע חבילה מקסימלי) לאחר השלמת כל שידור. לדוגמה, גם אם 10 מקטעי חבילה מאושרים, הערך של cwnd יגדל רק ב-MSS אחד. זהו מודל צמיחה ליניארי ויש לו גם גבול עליון לצמיחה. כאשר מתרחש אובדן חבילות, הערך של cwnd משתנה ל-MSS, וערך של ssthresh מוגדר למחצית מ-cwnd. לחלופין, הוא גם יעצור את הצמיחה של MSS כאשר מתקבלות 3 תגובות ACK מיותרות. אם עדיין מתקבלות שלוש תגובות ACK מיותרות לאחר חצית הערך של cwnd, הערך של ssthresh נרשם כמחצית מערך cwnd ונכנס למצב שחזור מהיר.
התאוששות מהירה
במצב שחזור מהיר, ערך חלון הגודש cwnd גדל ב-MSS אחד עבור כל ACK יתיר שמתקבל, כלומר, ACK שאינו מגיע ברצף. זאת כדי לנצל את מקטעי החבילה שהועברו בהצלחה ברשת כדי לשפר את יעילות השידור ככל האפשר.
כאשר מגיעה הודעת ACK של מקטע החבילה האבוד, TCP מפחית את הערך של cwnd ולאחר מכן נכנס למצב של מניעת עומס. זאת כדי לשלוט בגודל חלון העומס ולמנוע הגדלה נוספת של עומס הרשת.
אם מתרחש פסק זמן לאחר מצב בקרת עומס, מצב הרשת מחמיר ו-TCP עובר ממצב מניעת עומס למצב התחלה איטית. במקרה זה, ערך חלון העומס cwnd מוגדר ל-1 MSS, אורך מקטע החבילה המרבי, וערך סף ההתחלה האיטית ssthresh מוגדר למחצית מ-cwnd. מטרת הדבר היא להגדיל בהדרגה את גודל חלון העומס לאחר שהרשת מתאוששת כדי לאזן את קצב השידור ואת מידת עומס הרשת.
תַקצִיר
כפרוטוקול תעבורה אמין, TCP מיישם תעבורה אמינה באמצעות מספר רצף, אישור, בקרת שידור חוזר, ניהול חיבור ובקרת חלון. ביניהם, מנגנון בקרת הזרימה שולט בכמות הנתונים הנשלחת על ידי השולח בהתאם לקיבולת הקליטה בפועל של המקלט, מה שמונע בעיות של עומס ברשת ופגיעה בביצועים. מנגנון בקרת העומס מונע את התרחשות עומס הרשת על ידי התאמת כמות הנתונים הנשלחת על ידי השולח. המושגים "חלון עומס" ו"חלון שליחה" קשורים זה לזה, וכמות הנתונים אצל השולח נשלטת על ידי התאמת גודל חלון העומס באופן דינמי. התחלה איטית, הימנעות מעומס והתאוששות מהירה הם שלושת החלקים העיקריים של אלגוריתם בקרת עומס TCP, אשר מתאימים את גודל חלון העומס באמצעות אסטרטגיות שונות כדי להסתגל לקיבולת ולמידת העומס של הרשת.
בסעיף הבא נבחן בפירוט את מנגנון השידור החוזר של TCP. מנגנון השידור החוזר הוא חלק חשוב ב-TCP להשגת שידור אמין. הוא מבטיח שידור אמין של נתונים על ידי שידור חוזר של נתונים שאבדו, פגומים או התעכבו. עקרון היישום והאסטרטגיה של מנגנון השידור החוזר יוצגו וינותחו בפירוט בסעיף הבא. הישארו מעודכנים!
זמן פרסום: 24 בפברואר 2025