Configuració de la connexió TCP
Quan naveguem per la web, enviem un correu electrònic o juguem a un joc en línia, sovint no pensem en la complexa connexió de xarxa que hi ha al darrere. Tanmateix, són aquests passos aparentment petits els que garanteixen una comunicació estable entre nosaltres i el servidor. Un dels passos més importants és la configuració de la connexió TCP, i el nucli d'això és la connexió a tres bandes.
Aquest article tractarà detalladament el principi, el procés i la importància de la connexió a tres vies. Pas a pas, explicarem per què és necessària la connexió a tres vies, com garanteix l'estabilitat i la fiabilitat de la connexió i la seva importància per a la transferència de dades. Amb una comprensió més profunda de la connexió a tres vies, obtindrem una millor comprensió dels mecanismes subjacents de la comunicació de xarxa i una visió més clara de la fiabilitat de les connexions TCP.
Procés de protocol de connexió a tres vies TCP i transicions d'estat
TCP és un protocol de transport orientat a connexió, que requereix l'establiment d'una connexió abans de la transmissió de dades. Aquest procés d'establiment de connexió es realitza mitjançant una protocol de connexió a tres bandes.
Analitzem més de prop els paquets TCP que s'envien a cada connexió.
Inicialment, tant el client com el servidor estan TANCATS. Primer, el servidor escolta activament en un port i es troba en l'estat LISTEN, cosa que significa que s'ha d'iniciar el servidor. A continuació, el client està llest per començar a accedir a la pàgina web. Ha d'establir una connexió amb el servidor. El format del primer paquet de connexió és el següent:
Quan un client inicia una connexió, genera un número de seqüència inicial aleatori (client_isn) i el col·loca al camp "Número de seqüència" de la capçalera TCP. Al mateix temps, el client estableix la posició del senyalador SYN a 1 per indicar que el paquet sortint és un paquet SYN. El client indica que vol establir una connexió amb el servidor enviant el primer paquet SYN al servidor. Aquest paquet no conté dades de la capa d'aplicació (és a dir, dades enviades). En aquest punt, l'estat del client es marca com a SYN-SENT.
Quan un servidor rep un paquet SYN d'un client, inicialitza aleatòriament el seu propi número de sèrie (server_isn) i després posa aquest número al camp "Número de sèrie" de la capçalera TCP. A continuació, el servidor introdueix client_isn + 1 al camp "Número de confirmació" i estableix els bits SYN i ACK a 1. Finalment, el servidor envia el paquet al client, que no conté dades de la capa d'aplicació (ni dades perquè el servidor les pugui enviar). En aquest moment, el servidor es troba en estat SYN-RCVD.
Un cop el client rep el paquet del servidor, ha de dur a terme les optimitzacions següents per respondre al paquet de resposta final: Primer, el client estableix el bit ACK de la capçalera TCP del paquet de resposta a 1; Segon, el client introdueix el valor server_isn + 1 al camp "Confirma el número de resposta"; Finalment, el client envia el paquet al servidor. Aquest paquet pot transportar dades del client al servidor. Un cop finalitzades aquestes operacions, el client entrarà a l'estat ESTABLISHED.
Un cop el servidor rep el paquet de resposta del client, també canvia a l'estat ESTABLISHED.
Com podeu veure en el procés anterior, quan es realitza una encaixada de mans a tres bandes, la tercera encaixada de mans pot transportar dades, però les dues primeres no. Aquesta és una pregunta que es fa sovint a les entrevistes. Un cop finalitzada l'encaixada de mans a tres bandes, ambdues parts entren a l'estat ESTABLIT, cosa que indica que la connexió s'ha establert correctament, moment en què el client i el servidor poden començar a enviar-se dades entre si.
Per què tres encaixades de mans? No dues, sinó quatre?
La resposta habitual és: "Perquè la triple encaixada de mans garanteix la capacitat de rebre i enviar". Aquesta resposta és correcta, però només és la raó superficial, no exposa la raó principal. A continuació, analitzaré les raons de la triple encaixada de mans des de tres aspectes per aprofundir en la nostra comprensió d'aquest tema.
La handshake a tres bandes pot evitar eficaçment la inicialització de connexions repetides històricament (el motiu principal)
La confirmació de connexió a tres vies garanteix que ambdues parts han rebut un número de seqüència inicial fiable.
La conciliació a tres bandes evita el malbaratament de recursos.
Raó 1: Evitar les unions duplicades històriques
En poques paraules, la raó principal de l'enllaç a tres vies és evitar la confusió causada per la inicialització de la connexió duplicada antiga. En un entorn de xarxa complex, la transmissió de paquets de dades no sempre s'envia a l'amfitrió de destinació d'acord amb el temps especificat, i els paquets de dades antics poden arribar primer a l'amfitrió de destinació a causa de la congestió de la xarxa i altres motius. Per evitar-ho, TCP utilitza un enllaç a tres vies per establir la connexió.
Quan un client envia diversos paquets d'establiment de connexió SYN successivament, en situacions com ara congestió de la xarxa, pot passar el següent:
1- Els paquets SYN antics arriben al servidor abans que els paquets SYN més recents.
2- El servidor respondrà un paquet SYN + ACK al client després de rebre el paquet SYN antic.
3- Quan el client rep el paquet SYN + ACK, determina que la connexió és històrica (número de seqüència caducat o temps d'espera superat) segons el seu propi context i, a continuació, envia el paquet RST al servidor per interrompre la connexió.
Amb una connexió de doble handshake, no hi ha manera de determinar si la connexió actual és una connexió històrica. L'handshake de tres vies permet al client determinar si la connexió actual és una connexió històrica en funció del context quan està a punt per enviar el tercer paquet:
1- Si es tracta d'una connexió històrica (el número de seqüència ha caducat o ha superat el temps d'espera), el paquet enviat pel tercer protocol de connexió és un paquet RST per avortar la connexió històrica.
2- Si no és una connexió històrica, el paquet enviat per tercera vegada és un paquet ACK i les dues parts comunicants estableixen la connexió correctament.
Per tant, la raó principal per la qual TCP utilitza la connexió a tres vies és que inicialitza la connexió per evitar connexions històriques.
Raó 2: Sincronitzar els números de seqüència inicials d'ambdues parts
Ambdós costats del protocol TCP han de mantenir un número de seqüència, que és un factor clau per garantir una transmissió fiable. Els números de seqüència tenen un paper important en les connexions TCP. Fan el següent:
El receptor pot eliminar les dades duplicades i garantir l'exactitud de les dades.
El receptor pot rebre paquets en l'ordre del número de seqüència per garantir la integritat de les dades.
● El número de seqüència pot identificar el paquet de dades que ha rebut l'altra part, permetent una transmissió de dades fiable.
Per tant, en establir una connexió TCP, el client envia paquets SYN amb el número de seqüència inicial i requereix que el servidor respongui amb un paquet ACK que indica la recepció correcta del paquet SYN del client. A continuació, el servidor envia el paquet SYN amb el número de seqüència inicial al client i espera que el client respongui, d'una vegada per totes, per assegurar-se que els números de seqüència inicials estiguin sincronitzats de manera fiable.
Tot i que una encaixada de mans a quatre vies també és possible per sincronitzar de manera fiable els números de seqüència inicials d'ambdues parts, el segon i el tercer passos es poden combinar en un sol pas, donant com a resultat una encaixada de mans a tres vies. Tanmateix, les dues encaixades de mans només poden garantir que el número de seqüència inicial d'una part sigui rebut correctament per l'altra part, però no hi ha cap garantia que el número de seqüència inicial d'ambdues parts es pugui confirmar. Per tant, l'encaixada de mans a tres vies és la millor opció per garantir l'estabilitat i la fiabilitat de les connexions TCP.
Raó 3: Evitar el malbaratament de recursos
Si només hi ha una "doble encaixada de mans", quan la sol·licitud SYN del client està bloquejada a la xarxa, el client no pot rebre el paquet ACK enviat pel servidor, de manera que el SYN es tornarà a enviar. Tanmateix, com que no hi ha una tercera encaixada de mans, el servidor no pot determinar si el client ha rebut un reconeixement ACK per establir la connexió. Per tant, el servidor només pot establir una connexió de manera proactiva després de rebre cada sol·licitud SYN. Això porta al següent:
Malbaratament de recursos: Si la sol·licitud SYN del client es bloqueja, cosa que provoca la transmissió repetida de diversos paquets SYN, el servidor establirà diverses connexions no vàlides redundants després de rebre la sol·licitud. Això comporta un malbaratament innecessari de recursos del servidor.
Retenció de missatges: a causa de la manca d'una tercera confirmació de connexió, el servidor no té manera de saber si el client ha rebut correctament la confirmació ACK per establir la connexió. Com a resultat, si els missatges es queden bloquejats a la xarxa, el client continuarà enviant sol·licituds SYN una vegada i una altra, cosa que farà que el servidor estableixi constantment noves connexions. Això augmentarà la congestió i el retard de la xarxa i afectarà negativament el rendiment general de la xarxa.
Per tant, per tal de garantir l'estabilitat i la fiabilitat de la connexió de xarxa, TCP utilitza la three-way handshake per establir la connexió per evitar que es produeixin aquests problemes.
Resum
ElBroker de paquets de xarxaL'establiment de la connexió TCP es fa amb una handshake a tres vies. Durant la handshake a tres vies, el client primer envia un paquet amb el senyalador SYN al servidor, indicant que vol establir una connexió. Després de rebre la sol·licitud del client, el servidor respon un paquet amb els senyaladors SYN i ACK al client, indicant que la sol·licitud de connexió s'ha acceptat, i envia el seu propi número de seqüència inicial. Finalment, el client respon amb un senyalador ACK al servidor per indicar que la connexió s'ha establert correctament. Així, les dues parts es troben en l'estat ESTABLISHED i poden començar a enviar-se dades l'una a l'altra.
En general, el procés de protocol de connexió a tres vies per a l'establiment de connexions TCP està dissenyat per garantir l'estabilitat i la fiabilitat de la connexió, evitar confusions i malbaratament de recursos en connexions històriques i garantir que ambdues parts puguin rebre i enviar dades.
Data de publicació: 08-01-2025