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 רעאקציעס ווערן באקומען. אויב דריי רענדאנט ACKs ווערן נאך באקומען נאך האלבירן דעם ווערט פון cwnd, ווערט דער ווערט פון ssthresh רעקארדירט אלס האלב דעם ווערט פון cwnd און דער שנעלער רעקאָווערי צושטאנד ווערט אריינגעגאנגען.
שנעלע אָפּזוך
אין דעם שנעלן רעקאָווערי צושטאַנד, ווערט דער ווערט פון דעם קאָנגעסטשאַן פֿענצטער cwnd געוואקסן מיט איין MSS פֿאַר יעדן באַקומענעם רענדאַנט ACK, דאָס הייסט, ACK וואָס קומט נישט אָן אין סיקוואַנס. דאָס איז צו נוצן די פּאַקעט סעגמענטן וואָס זענען געראָטן טראַנסמיטטעד געוואָרן אין נעץ צו פֿאַרבעסערן די טראַנסמיסיע עפעקטיווקייט ווי פיל ווי מעגלעך.
ווען אַן ACK פֿון דעם פֿאַרלוירענעם פּאַקעט סעגמענט קומט אָן, פֿאַרקלענערט TCP דעם ווערט פֿון cwnd און גייט דאַן אַרײַן אין דעם צושטאַנד פֿון פֿאַרמיידונג פֿון קאָנגעסטיע. דאָס איז כּדי צו קאָנטראָלירן די גרייס פֿון דעם קאָנגעסטיע פֿענצטער און פֿאַרמײַדן ווײַטער צו פֿאַרגרעסערן די נעץ קאָנגעסטיע.
אויב עס פאסירט א טיימאוט נאך דעם קאנדזשעסטשאן קאנטראל צושטאנד, ווערט דער נעץ צושטאנד ערנסטער און TCP מיגרירט פון דעם קאנדזשעסטשאן פארמיידונג צו דעם לאנגזאם-אנהייב צושטאנד. אין דעם פאל, ווערט דער ווערט פון דעם קאנדזשעסטשאן פענצטער cwnd געשטעלט צו 1 MSS, די מאקסימום פאקעט סעגמענט לענג, און דער ווערט פון דעם לאנגזאם-אנהייב טרעשאָולד ssthresh ווערט געשטעלט צו האלב פון cwnd. דער ציל פון דעם איז צו ווידער-שטאפלעזליך פארגרעסערן די גרייס פון דעם קאנדזשעסטשאן פענצטער נאכדעם וואס דער נעץ ערהוילט זיך צו באלאנסירן די טראנסמיסיע ראטע און דעם גראד פון נעץ קאנדזשעסטשאן.
קיצור
אלס א פארלעסלעכער טראנספארט פראטאקאל, אימפלעמענטירט TCP פארלעסלעכן טראנספארט דורך סיקווענס נומער, אנערקענונג, איבערטראנסמיסיע קאנטראל, קאנעקשאן מענעדזשמענט און פענצטער קאנטראל. צווישן זיי, קאנטראלירט דער פלוס קאנטראל מעקאניזם די צאל דאטן געשיקט דורך דעם שיקער לויט דער אמת'ער אויפנעמונג קאפאציטעט פון דעם אויפנעמער, וואס פארמיידט די פראבלעמען פון נעץ קאנדזשעסטשאן און פערפארמענס דעגראדאציע. דער קאנדזשעסטשאן קאנטראל מעקאניזם פארמיידט דאס אויפטרעטן פון נעץ קאנדזשעסטשאן דורך צופאסן די צאל דאטן געשיקט דורך דעם שיקער. די קאנצעפטן פון קאנדזשעסטשאן פענצטער און שיקן פענצטער זענען פארבונדן איינער מיטן אנדערן, און די צאל דאטן ביים שיקער ווערט קאנטראלירט דורך דינאמיש צופאסן די גרייס פון דעם קאנדזשעסטשאן פענצטער. לאנגזאמע אנהייב, קאנדזשעסטשאן פארמיידונג און שנעלע אויפהיילונג זענען די דריי הויפט טיילן פון TCP קאנדזשעסטשאן קאנטראל אלגאריטם, וואס צופאסן די גרייס פון דעם קאנדזשעסטשאן פענצטער דורך פארשידענע סטראטעגיעס צו זיך צופאסן צו דער קאפאציטעט און קאנדזשעסטשאן גראד פון דעם נעץ.
אין דער קומענדיקער סעקציע וועלן מיר אויספארשן TCP'ס ווידער-טראַנסמישאַן מעקאַניזם אין דעטאַל. דער ווידער-טראַנסמישאַן מעקאַניזם איז אַ וויכטיקער טייל פון TCP צו דערגרייכן אַ פאַרלעסלעכע טראַנסמיסיע. עס זאָרגט פֿאַר אַ פאַרלעסלעכע טראַנסמיסיע פון דאַטן דורך ווידער-טראַנסמיטירן פאַרלוירענע, קאָרומפּירטע אָדער פאַרהאַלטן דאַטן. דער אימפּלעמענטאַציע פּרינציפּ און סטראַטעגיע פון דעם ווידער-טראַנסמישאַן מעקאַניזם וועט ווערן באַקענט און אַנאַליזירט אין דעטאַל אין דער קומענדיקער סעקציע. בלייבט אויף דעם קאַנאַל!
פּאָסט צייט: 24סטן פעברואַר 2025