TCP kapcsolat beállítása
Amikor böngészünk az interneten, küldünk e -mailt vagy online játékot játszunk, gyakran nem gondolunk a mögötte álló összetett hálózati kapcsolatról. Ugyanakkor ezek a látszólag kis lépések biztosítják a stabil kommunikációt köztünk és a szerver között. Az egyik legfontosabb lépés a TCP kapcsolat beállítása, és ennek lényege a háromirányú kézfogás.
Ez a cikk részletesen tárgyalja a háromirányú kézfogás alapelvet, folyamatot és fontosságát. Lépésről lépésre elmagyarázzuk, miért van szükség a háromirányú kézfogásra, hogyan biztosítja a kapcsolat stabilitását és megbízhatóságát, és mennyire fontos az adatátvitel szempontjából. A háromirányú kézfogás mélyebb megértésével jobban megértjük a hálózati kommunikáció alapjául szolgáló mechanizmusokat és a TCP-kapcsolatok megbízhatóságának világosabb képet.
A TCP háromirányú kézfogási folyamat és az állami átmenetek
A TCP egy csatlakozás-orientált szállítási protokoll, amelyhez az adatátvitel előtt a kapcsolat létrehozása szükséges. Ezt a csatlakozási létrehozási folyamatot háromirányú kézfogás végzi.
Vessen egy pillantást az egyes kapcsolatokban elküldött TCP csomagokra.
Kezdetben mind az ügyfél, mind a szerver bezárt. Először, a szerver aktívan hallgat egy porton, és hallgatási állapotban van, ami azt jelenti, hogy a szerver elindulni kell. Ezután az ügyfél készen áll a weboldal elérésére. Az első csatlakozási csomag formátuma a következő:
Amikor az ügyfél kapcsolatot kezdeményez, akkor véletlenszerű kezdeti sorszámot (kliens_ISN) generál, és a TCP fejléc "Szekvenciaszám" mezőjébe helyezi. Ugyanakkor az ügyfél a SYN zászló helyzetét 1 -re állítja, jelezve, hogy a kimenő csomag SYN -csomag. Az ügyfél azt jelzi, hogy kapcsolatot kíván létrehozni a szerverrel az első SYN -csomag elküldésével a szerverre. Ez a csomag nem tartalmazza az alkalmazásréteg adatait (azaz az elküldött adatokat). Ezen a ponton az ügyfél állapotát syn-sentként jelölik.
Amikor egy szerver kap egy SYN -csomagot egy klienstől, véletlenszerűen inicializálja a saját sorozatszámát (Server_ISN), majd ezt a számot a TCP fejléc "sorozatszám" mezőjébe helyezi. Ezután a szerver belép a kliens_ISN + 1-ből a "Nyugtásszám" mezőbe, és mind a SYN, mind az ACK bitet 1-re állítja. Végül a kiszolgáló elküldi a csomagot az ügyfélnek, amely nem tartalmaz alkalmazás-réteg-adatokat (és nincs adat a kiszolgáló elküldéséhez). Ebben az időben a szerver syn-rcvd állapotban van.
Miután az ügyfél megkapja a csomagot a szerverről, a következő optimalizálásokat kell végrehajtania, hogy válaszoljon a végső válaszcsomagra: Először az ügyfél a válaszcsomag TCP fejlécének ACK bitjét 1 -re állítja; Másodszor, az ügyfél beírja a server_isn + 1 értéket a "Válaszszám megerősítése" mezőbe; Végül az ügyfél elküldi a csomagot a szervernek. Ez a csomag adatokat hordozhat az ügyféltől a szerverre. Ezen műveletek befejezése után az ügyfél belép a bevált államba.
Miután a szerver megkapja a válaszcsomagot az ügyféltől, az is átvált a bevált állapotra.
Mint a fenti eljárásból látható, egy háromirányú kézfogás elvégzésekor a harmadik kézfogás adhat adatot, de az első két kézfogás nem. Ezt a kérdést gyakran felteszik az interjúkban. Miután a háromirányú kézfogás befejeződött, mindkét fél belép a megállapított állapotba, jelezve, hogy a kapcsolat sikeresen kialakult, ahol az ügyfél és a szerver elkezdheti az adatok küldését egymásnak.
Miért három kézfogás? Nem kétszer, négyszer?
A leggyakoribb válasz: "Mert a háromirányú kézfogás garantálja a fogadás és a küldés képességét." Ez a válasz helyes, de ez csak a felszíni ok, nem adja meg a fő okot. Az alábbiakban elemezem a hármas kézfogás okait három szempontból, hogy elmélyítsük a kérdés megértését.
A háromirányú kézfogás hatékonyan elkerülheti a történelmileg ismételt kapcsolatok inicializálását (a fő ok)
A háromirányú kézfogás garantálja, hogy mindkét fél megbízható kezdeti sorszámot kapott.
A háromirányú kézfogás elkerüli az erőforrások pazarlását.
1. ok: Kerülje el a történelmi másolatokat
Dióhéjban a háromirányú kézfogás fő oka az, hogy elkerüljük a régi duplikált csatlakozás inicializálásának által okozott zavart. Komplex hálózati környezetben az adatcsomagok továbbítását a megadott időnek megfelelően nem mindig küldik el a rendeltetési helyhez, és a régi adatcsomagok először érkezhetnek a célszervezetre a hálózati torlódás és más okok miatt. Ennek elkerülése érdekében a TCP háromirányú kézfogást használ a kapcsolat kialakításához.
Amikor egy ügyfél többszörös SYN -csatlakozási létesítési csomagokat küld egymás után, olyan helyzetekben, mint például a hálózati torlódások, a következők fordulhatnak elő:
1- A régi SYN-csomagok a legújabb SYN-csomagok előtt érkeznek a szerverre.
2- A szerver egy SYN + ACK csomagot válaszol az ügyfélnek, miután megkapta a régi SYN-csomagot.
3- Amikor az ügyfél megkapja a SYN + ACK csomagot, meghatározza, hogy a kapcsolat egy történelmi kapcsolat (a sorszám lejárt vagy az időtúllépés) a saját kontextusának megfelelően, majd elküldi az RST csomagot a szerverre a kapcsolat megszakításához.
Két kézből való kapcsolattal nem lehet meghatározni, hogy az aktuális kapcsolat történelmi kapcsolat-e. A háromirányú kézfogás lehetővé teszi az ügyfél számára, hogy meghatározza, hogy az aktuális kapcsolat a kontextuson alapuló történelmi kapcsolat, amikor készen áll a harmadik csomag elküldésére:
1- Ha ez egy történelmi kapcsolat (a sorszám lejárt vagy az időtúllépés), akkor a harmadik kézfogás által küldött csomag egy RST csomag a történelmi kapcsolat megszakításához.
2- Ha ez nem történelmi kapcsolat, akkor a harmadik alkalommal elküldött csomag ACK csomag, és a két kommunikáló fél sikeresen létrehozza a kapcsolatot.
Ezért a TCP a háromirányú kézfogást használja, hogy inicializálja a kapcsolatot a történelmi kapcsolatok megelőzése érdekében.
2. ok: A két fél kezdeti sorrendjének szinkronizálása
A TCP protokoll mindkét oldalának meg kell tartania egy sorszámot, amely kulcsfontosságú tényező a megbízható átvitel biztosításához. A sorszámok száma fontos szerepet játszik a TCP -kapcsolatokban. A következők:
A vevő kiküszöböli a másolatokat és biztosíthatja az adatok pontosságát.
A vevő az adatok integritásának biztosítása érdekében a szekvenciaszám sorrendjében csomagokat fogadhat.
● A sorozatszám azonosíthatja a másik fél által kapott adatcsomagot, lehetővé téve a megbízható adatátvitelt.
Ezért a TCP -kapcsolat létrehozásakor az ügyfél SYN -csomagokat küld a kezdeti sorszámmal, és előírja, hogy a szerver válaszoljon egy ACK csomaggal, amely jelzi az ügyfél SYN -csomag sikeres fogadását. Ezután a szerver elküldi a SYN -csomagot a kezdeti sorszámmal az ügyfélnek, és arra vár, hogy az ügyfél egyszer és mindenkorra válaszoljon, hogy a kezdeti sorszámok megbízhatóan szinkronizálódjanak.
Noha négyirányú kézfogás is lehetséges, hogy megbízhatóan szinkronizálhassa mindkét fél kezdeti sorozatszámát, a második és a harmadik lépést egyetlen lépéssel lehet kombinálni, ami háromutas kézfogást eredményez. A két kézfogás azonban csak garantálhatja, hogy az egyik fél kezdeti sorrendjét a másik fél sikeresen fogadja, de nincs garancia arra, hogy mindkét fél kezdeti sorszáma megerősíthető. Ezért a háromirányú kézfogás a legjobb választás a TCP-kapcsolatok stabilitásának és megbízhatóságának biztosítása érdekében.
3. ok: Kerülje az erőforrások pazarlását
Ha csak egy "kétkezes", ha az ügyfél-SYN kérés blokkolva van a hálózatban, akkor az ügyfél nem tudja megkapni a szerver által küldött ACK csomagot, így a SYN bántalmazza. Mivel azonban nincs harmadik kézfogás, a szerver nem tudja meghatározni, hogy az ügyfél kapott -e ACK elismerést a kapcsolat létrehozására. Ezért a szerver csak proaktívan hozhat létre kapcsolatot az egyes SYN -kérések fogadása után. Ez a következőkhöz vezet:
Erőforrások pazarlása: Ha az ügyfél SYN -kérése blokkolva van, ami több SYN -csomag ismételt továbbítását eredményezi, a szerver több redundáns érvénytelen kapcsolatot hoz létre a kérés kézhezvétele után. Ez a szerver erőforrások szükségtelen pazarlásához vezet.
Üzenetmegtartás: A harmadik kézfogás hiánya miatt a szervernek nincs módja tudni, hogy az ügyfél megfelelően megkapta -e az ACK nyugtázást a kapcsolat kialakításához. Ennek eredményeként, ha az üzenetek elakadnak a hálózatba, az ügyfél újra és újra továbbadja a SYN -kéréseket, ami a szerver folyamatosan új kapcsolatok létrehozását eredményezi. Ez növeli a hálózati torlódást és a késleltetést, és negatívan befolyásolja a hálózati teljes teljesítményt.
Ezért a hálózati kapcsolat stabilitásának és megbízhatóságának biztosítása érdekében a TCP a háromirányú kézfogást használja a kapcsolat megállapítására, hogy elkerülje e problémák előfordulását.
Összefoglalás
AHálózati csomag -brókerA TCP csatlakozás létesítését háromirányú kézfogással végzik. A háromirányú kézfogás során az ügyfél először egy csomagot küld a SYN zászlóval a szerverre, jelezve, hogy kapcsolatot akar létrehozni. Miután megkapta a kérést az ügyféltől, a kiszolgáló egy SYN és ACK zászlókkal rendelkező csomagot válaszol az ügyfélnek, jelezve, hogy a kapcsolatkérelem elfogadásra kerül, és elküldi a saját kezdeti sorszámát. Végül, az ügyfél ACK zászlóval válaszol a szerverre, jelezve, hogy a kapcsolat sikeresen kialakult. Így a két fél a bevált államban van, és elkezdhet adatokat küldeni egymásnak.
Általánosságban elmondható, hogy a TCP-kapcsolat létrehozására szolgáló háromirányú kézfogási folyamatot úgy tervezték, hogy biztosítsa a kapcsolat stabilitását és megbízhatóságát, elkerülje az erőforrások és az erőforrások pazarlását a történelmi kapcsolatok felett, és gondoskodjon arról, hogy mindkét fél képes-e adatokat fogadni és küldeni.
A postai idő: január-08-2025