שליסל מיסטעריעס פון נעטוואָרק פּאַקעט בראָקער TCP קאַנעקשאַנז: דעמיסטאַפייד די נויט פֿאַר טריפּלע האַנדשייק

TCP קאַנעקשאַן סעטאַפּ
ווען מיר בלעטערן אויפן וועב, שיקן אן אימעיל, אדער שפילן אן אנליין שפיל, טראכטן מיר אפט נישט וועגן דער קאמפליצירטער נעץ פארבינדונג דערינטער. אבער, עס זענען די לכאורה קליינע טריט וואס פארזיכערן סטאבילן קאמוניקאציע צווישן אונז און דעם סערווער. איינער פון די וויכטיגסטע טריט איז די TCP פארבינדונג אויפשטעלן, און דער קערן דערפון איז דער דריי-וועגיגער הענד-שאקל.

דיזער אַרטיקל וועט דיסקוטירן דעם פּרינציפּ, פּראָצעס און וויכטיקייט פֿון דעם דריי-וועגיקן האַנטשאָקל אין דעטאַל. שריט ביי שריט וועלן מיר דערקלערן פאַרוואָס דער דריי-וועגיקער האַנטשאָקל איז נויטיק, ווי עס זיכערט פֿאַרבינדונג סטאַביליטעט און פֿאַרלעסלעכקייט, און ווי וויכטיק עס איז פֿאַר דאַטן טראַנספֿער. מיט אַ טיפֿערן פֿאַרשטאַנד פֿון דעם דריי-וועגיקן האַנטשאָקל וועלן מיר באַקומען אַ בעסער פֿאַרשטאַנד פֿון די אונטערלייגנדיקע מעכאַניזמען פֿון נעץ קאָמוניקאַציע און אַ קלאָרערע בליק אויף די פֿאַרלעסלעכקייט פֿון TCP פֿאַרבינדונגען.

TCP דריי-וועג האַנדשעיק פּראָצעס און שטאַט טראַנזישאַנז
TCP איז אַ פֿאַרבינדונג-אָריענטירטער טראַנספּאָרט פּראָטאָקאָל, וואָס פֿאָדערט אַ פֿאַרבינדונג-אויפֿשטעלונג איידער דאַטן טראַנסמיסיע. דער פֿאַרבינדונג-אויפֿשטעלונג פּראָצעס ווערט געטאָן דורך אַ דריי-וועגיקע האַנט-שאָקל.

 TCP דריי-וועג האַנדשאַק

לאָמיר נעמען אַ נענטערן קוק אויף די TCP פּאַקעטן וואָס ווערן געשיקט אין יעדער פֿאַרבינדונג.

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

 SYN פּאַקעט

ווען אַ קליענט הייבט אָן אַ פֿאַרבינדונג, דזשענערירט עס אַ צופֿעליקע ערשטע סיקוואַנס נומער (client_isn) און שטעלט עס אין דעם "סיקוואַנס נומער" פֿעלד פֿון דעם TCP כעדער. אין דער זעלבער צייט שטעלט דער קליענט די SYN פֿאָן פּאָזיציע צו 1 צו ווײַזן אַז דער אַרויסגייענדיקער פּאַקעט איז אַ SYN פּאַקעט. דער קליענט ווײַזט אָן אַז ער וויל אויפֿשטעלן אַ פֿאַרבינדונג מיטן סערווער דורך שיקן דעם ערשטן SYN פּאַקעט צום סערווער. דער פּאַקעט כּולל נישט קיין אַפּליקאַציע שיכט דאַטן (דאָס הייסט, געשיקטע דאַטן). אין דעם פּונקט ווערט דער סטאַטוס פֿונעם קליענט באַצייכנט ווי SYN-SENT.

SYN+ACK פּאַקעט

ווען אַ סערווער באַקומט אַ SYN פּאַקעט פֿון אַ קליענט, איניציאַליזירט ער צופֿעליק זײַן אייגענעם סעריעל נומער (server_isn) און לייגט דאַן דעם נומער אַרײַן אין דעם "סעריאַל נומער" פֿעלד פֿון דעם TCP כעדער. דערנאָך, גיט דער סערווער אַרײַן client_isn + 1 אין דעם "באַשטעטיקונג נומער" פֿעלד און שטעלט ביידע SYN און ACK ביטס צו 1. צום סוף, שיקט דער סערווער דעם פּאַקעט צום קליענט, וואָס כּולל נישט קיין אַפּליקאַציע-שיכט דאַטן (און קיין דאַטן פֿאַר דעם סערווער צו שיקן). אין דעם מאָמענט איז דער סערווער אין SYN-RCVD צושטאַנד.

ACK פּאַקעט

אזוי שנעל ווי דער קליענט באקומט דעם פאקעט פונעם סערווער, דארף ער דורכפירן די פאלגנדע אפטימיזאציעס צו רעאגירן צום לעצטן ענטפער פאקעט: ערשטנס, שטעלט דער קליענט דעם ACK ביט פונעם TCP כעדער פונעם ענטפער פאקעט צו 1; צווייטנס, גיט דער קליענט אריין דעם ווערט server_isn + 1 אין דעם "באשטעטיגן ענטפער נומער" פעלד; צום סוף, שיקט דער קליענט דעם פאקעט צום סערווער. דער פאקעט קען טראגן דאטן פונעם קליענט צום סערווער. נאכן ענדיגן די אפעראציעס, וועט דער קליענט אריינגיין אין דעם "ESTABLISHED" צושטאנד.

אזוי שנעל ווי דער סערווער באקומט דעם ענטפער פאקעט פונעם קליענט, גייט ער אויך אריבער צום "ESTABLISHED" צושטאנד.

ווי איר קענט זען פון דעם אויבנדערמאנטן פראצעס, ווען מען פירט אויס א דריי-וועגיקע הענד-שעיק, איז דער דריטער הענד-שעיק ערלויבט צו טראגן דאטן, אבער די ערשטע צוויי הענד-שעיקעס נישט. דאס איז א פראגע וואס מען פרעגט אפט אין אינטערוויוס. אזוי שנעל ווי דער דריי-וועגיקער הענד-שעיק איז פארטיג, גייען ביידע צדדים אריין אין דעם "ESTABLISHED" צושטאנד, וואס ווייזט אז די פארבינדונג איז ערפאלגרייך געגרינדעט געווארן, און אין דעם פונקט קענען דער קליענט און סערווער אנהייבן שיקן דאטן איינער צום צווייטן.

פארוואס דריי האַנט-דריקן? נישט צוויי מאָל, פיר מאָל?
די געוויינטלעכע ענטפער איז, "ווייל דער דריי-וועגיגער האנט-דרוק גאראנטירט די מעגלעכקייט צו באקומען און שיקן." די ענטפער איז ריכטיג, אבער עס איז נאר די אויבערפלעכלעכע סיבה, עס ברענגט נישט ארויס די הויפט סיבה. אין די פאלגנדע וועל איך אנאליזירן די סיבות פארן דרייפאכן האנט-דרוק פון דריי אספעקטן צו פארטיפן אונזער פארשטאנד פון דעם ענין.

דער דריי-וועגיקער האַנטשאָקל קען עפעקטיוו אויסמיידן די איניציאַליזאַציע פון ​​היסטאָריש ריפּיטיד קאַנעקשאַנז (די הויפּט סיבה)
דער דריי-וועגיקער האנט-שאקל גאַראַנטירט אַז ביידע פּאַרטייען האָבן באַקומען אַ פאַרלעסלעכע ערשטע סיקוואַנס נומער.
דער דריי-וועגיקער האנט-שאקל פארמיידן פארשווענדן רעסורסן.

סיבה 1: פֿאַרמייַדן היסטאָרישע דופּליקאַט דזשוינס
אין קורצן, די הויפּט סיבה פֿאַר דעם דריי-וועגיקן האַנטשעיק איז צו פֿאַרמייַדן צעמישעניש פֿאַראורזאַכט דורך דער איניציאַליזאַציע פֿון אַלטער דופּליקאַט פֿאַרבינדונג. אין אַ קאָמפּלעקסער נעץ סביבה, ווערט די טראַנסמיסיע פֿון דאַטן פּאַקעטן נישט שטענדיק געשיקט צום ציל האָסט לויט דער באַשטימטער צייט, און אַלטע דאַטן פּאַקעטן קענען ערשט אָנקומען צום ציל האָסט צוליב נעץ פֿאַרשטאָפּונג און אַנדערע סיבות. כּדי דאָס צו פֿאַרמייַדן, ניצט TCP אַ דריי-וועגיקן האַנטשעיק צו שאַפֿן די פֿאַרבינדונג.

דריי-וועג האַנטשאָקל פֿאַרמייַדט היסטאָרישע דופּליקאַט פֿאַרבינדונגען

ווען אַ קליענט שיקט קייפל SYN קאַנעקשאַן עסטאַבלישמענט פּאַקעטן אין דער זעלבער צייט, אין סיטואַציעס ווי נעץ קאַנדזשעסטשאַן, קען דאָס פאלגענדע פּאַסירן:

1- די אלטע SYN פּאַקעטן קומען אָן צום סערווער איידער די לעצטע SYN פּאַקעטן.
2- דער סערווער וועט ענטפֿערן אַ SYN + ACK פּאַקעט צום קליענט נאָכדעם וואָס ער באַקומט דעם אַלטן SYN פּאַקעט.
3- ווען דער קליענט באקומט דעם SYN + ACK פּאַקעט, באַשטימט ער אַז די פֿאַרבינדונג איז אַ היסטאָרישע פֿאַרבינדונג (סיקוואַנס נומער אויסגעלאָפן אָדער טיימאַוט) לויט זיין אייגענעם קאָנטעקסט, און שיקט דאַן דעם RST פּאַקעט צום סערווער צו אָפּשטעלן די פֿאַרבינדונג.

מיט אַ צוויי-הענדשעיק פֿאַרבינדונג, איז נישטאָ קיין וועג צו באַשטימען צי די איצטיקע פֿאַרבינדונג איז אַ היסטאָרישע פֿאַרבינדונג. דער דריי-וועגיקער הענדשעיק דערלויבט דעם קליענט צו באַשטימען צי די איצטיקע פֿאַרבינדונג איז אַ היסטאָרישע פֿאַרבינדונג באַזירט אויף דעם קאָנטעקסט ווען ער איז גרייט צו שיקן דעם דריטן פּאַקעט:

1- אויב עס איז אַ היסטארישע פֿאַרבינדונג (סיקווענס נומער אויסגעלאָפן אָדער טיימאַוט), איז דער פּאַקעט געשיקט דורך די דריטע האַנדשאַק אַ RST פּאַקעט צו אַבאָרטירן די היסטארישע פֿאַרבינדונג.
2- אויב עס איז נישט קיין היסטארישע פארבינדונג, איז דער פּאַקעט וואָס ווערט געשיקט צום דריטן מאָל אַן ACK פּאַקעט, און די צוויי קאָמוניקירנדיקע פּאַרטייען האָבן מצליח געווען צו שאַפֿן די פארבינדונג.

דעריבער, די הויפּט סיבה וואָס TCP ניצט דעם דריי-וועגיקן האַנדשעיק איז אַז עס איניציאַליזירט די פֿאַרבינדונג צו פֿאַרמייַדן היסטאָרישע פֿאַרבינדונגען.

סיבה 2: צו סינקראָניזירן די ערשטע סיקוואַנס נומערן פון ביידע פּאַרטיעס
ביידע זייטן פון דעם TCP פּראָטאָקאָל מוזן האַלטן אַ סיקוואַנס נומער, וואָס איז אַ שליסל פאַקטאָר צו ענשור פאַרלאָזלעך טראַנסמיסיע. סיקוואַנס נומערן שפּילן אַ וויכטיק ראָלע אין TCP קאַנעקשאַנז. זיי טאָן די פאלגענדע:

דער ופנעמער קען עלימינירן דופּליקאַט דאַטן און ענשור די אַקיעראַסי פון די דאַטן.

דער ופנעמער קען באַקומען פּאַקעטן אין דער סדר פון די סיקוואַנס נומער צו ענשור די אָרנטלעכקייט פון די דאַטן.

● די סיקווענס נומער קען אידענטיפיצירן דעם דאטן פאקעט וואס איז באקומען געווארן דורך דער אנדערער פארטיי, און דאס ערמעגליכט א פארלעסליכע דאטן טראנסמיסיע.

דעריבער, ווען מען שטעלט אויף א TCP פארבינדונג, שיקט דער קליענט SYN פּאַקעטן מיטן ערשטן סיקווענס נומער און פארלאנגט פונעם סערווער צו ענטפערן מיט אן ACK פּאַקעט וואָס ווייזט אויף דער געלונגענער אויפנעמונג פונעם קליענט'ס SYN פּאַקעט. דערנאָך שיקט דער סערווער דעם SYN פּאַקעט מיטן ערשטן סיקווענס נומער צום קליענט און וואַרט ביז דער קליענט ענטפערט, איין מאָל אויף אייביק, כדי צו זיכער מאַכן אַז די ערשטן סיקווענס נומערן זענען פאַרלעסלעך סינקראָניזירט.

סינקראָניזירן די ערשטע סעריע נומערן פון ביידע פּאַרטיעס

כאָטש אַ פיר-וועג האַנטשעיק איז אויך מעגלעך צו פאַרלעסלעך סינקראָניזירן די ערשט סיקוואַנס נומערן פון ביידע פּאַרטיעס, קענען די צווייטע און דריטע טריט ווערן קאַמביינד אין איין שריט, וואָס רעזולטירט אין אַ דריי-וועג האַנטשעיק. אָבער, די צוויי האַנטשעיקס קענען בלויז גאַראַנטירן אַז די ערשט סיקוואַנס נומער פון איין פּאַרטיי איז הצלחה באקומען דורך די אנדערע פּאַרטיי, אָבער עס איז קיין גאַראַנטירן אַז די ערשט סיקוואַנס נומער פון ביידע פּאַרטיעס קען זיין באשטעטיקט. דעריבער, די דריי-וועג האַנטשעיק איז די בעסטע ברירה צו נעמען צו ענשור די פעסטקייט און פאַרלעסלעכקייט פון TCP קאַנעקשאַנז.

סיבה 3: פֿאַרמייַדן פֿאַרשווענדונג פֿון רעסורסן
אויב עס איז נאָר אַ "צוויי-הענדשאַק", ווען דער קליענט'ס SYN בקשה איז בלאָקירט אין נעץ, קען דער קליענט נישט באַקומען דעם ACK פּאַקעט געשיקט דורך דעם סערווער, אַזוי וועט דער SYN ווידער געשיקט ווערן. אָבער, ווייל עס איז נישטאָ קיין דריטער הענדשאַק, קען דער סערווער נישט באַשטימען צי דער קליענט האט באַקומען אַן ACK באַשטעטיקונג צו שאַפֿן די פֿאַרבינדונג. דעריבער, קען דער סערווער נאָר פּראָאַקטיוו שאַפֿן אַ פֿאַרבינדונג נאָך באַקומען יעדן SYN בקשה. דאָס פֿירט צו די פֿאָלגנדיקע:

פארשווענדונג פון רעסורסן: אויב דער קליענט'ס SYN פארלאנג ווערט בלאקירט, וואס רעזולטירט אין איבערגעחזרטע טראנסמיסיע פון ​​קייפל SYN פאקעטן, וועט דער סערווער אויפשטעלן קייפל איבעריגע אומגילטיגע פארבינדונגען נאכדעם וואס ער באקומט די פארלאנג. דאס פירט צו אן אומנייטיקע פארשווענדונג פון סערווער רעסורסן.

מעסעדזש אויפהאלטונג: צוליב דעם מאנגל פון א דריטן הענד-שאקל, האט דער סערווער נישט קיין וועג צו וויסן צי דער קליענט האט ריכטיג באקומען די ACK באשטעטיקונג צו אויפשטעלן די פארבינדונג. אלס רעזולטאט, אויב מעסעדזשעס בלייבן שטעקן אין נעץ, וועט דער קליענט ווייטער שיקן SYN פארלאנגען איבער און איבער, וואס וועט פירן דעם סערווער צו כסדר אויפשטעלן נייע פארבינדונגען. דאס וועט פארגרעסערן נעץ פארשטאפונג און פארשפעטיגונג און נעגאטיוו אפעקטירן די אלגעמיינע נעץ פערפארמאנס.

פֿאַרמײַדן פֿאַרשווענדן רעסורסן

דעריבער, כּדי צו זיכער מאַכן די פעסטקייט און פאַרלעסלעכקייט פון דער נעץ פֿאַרבינדונג, ניצט TCP דעם דריי-וועגיקן הענדשייק צו שאַפֿן די פֿאַרבינדונג און פֿאַרמייַדן דאָס אויפֿטרעטן פֿון די פּראָבלעמען.

קיצור
דינעץ פּאַקעט בראָקערTCP קאנעקשאן אויפשטעלן ווערט געטאן מיט א דריי-וועגיגן הענדשעיק. בעת דעם דריי-וועגיגן הענדשעיק, שיקט דער קליענט ערשט א פאקעט מיטן SYN פאן צום סערווער, וואס ווייזט אז ער וויל אויפשטעלן א קאנעקשאן. נאכדעם וואס ער באקומט די פארלאנג פונעם קליענט, ענטפערט דער סערווער א פאקעט מיט SYN און ACK פאנען צום קליענט, וואס ווייזט אז די קאנעקשאן פארלאנג איז אנגענומען, און שיקט זיין אייגענעם ערשטן סיקווענס נומער. צום סוף, ענטפערט דער קליענט מיט אן ACK פאן צום סערווער צו ווייזן אז די קאנעקשאן איז ערפאלגרייך אויפגעשטעלט געווארן. אזוי, זענען די צוויי פארטייען אין דעם אויפגעשטעלטן צושטאנד און קענען אנהייבן שיקן דאטא איינער צום צווייטן.

בכלל, דער דריי-וועג הענדשייק פראצעס פאר TCP קאנעקשאן אויפשטעלן איז דיזיינט צו פארזיכערן קאנעקשאן סטאביליטעט און פארלעסלעכקייט, פארמיידן צומישעניש און פארלוסט פון רעסורסן איבער היסטארישע קאנעקשאנס, און פארזיכערן אז ביידע פארטייען זענען ביכולת צו באקומען און שיקן דאטן.


פּאָסט צייט: יאַנואַר-08-2025