Maison >Java >JavaQuestions d'entretien >Intervieweur : Comment Socket TCP se déconnecte-t-il ?

Intervieweur : Comment Socket TCP se déconnecte-t-il ?

Java后端技术全栈
Java后端技术全栈avant
2023-08-17 16:10:101876parcourir
  • Avant-propos

  • Qu'est-ce que Socket ?

  • Processus en cours d'exécution de Socket

    • Basé sur TCP

    • Basé sur UDP

  • S Comment le socket TCP établit-il une connexion

    • trois fois Dans quelles fonctions du socket la poignée de main se produit-elle ?

  • Comment le socket TCP se déconnecte-t-il

    Lorsqu'il s'agit d'Internet, tout le monde pensera certainement à TCP, UDP, HTTP, trois-poignées-quatre ? -wave, etc. Mais quand il s'agit de Socket, tout le monde peut être un peu confus. Ils savent seulement qu'il sera utilisé dans le réseau, mais qu'est-ce qu'un Socket exactement, qu'est-ce que c'est déjà ? Pourquoi le réseau est-il indissociable de Socket ?
    • Qu'est-ce que Socket ?

    • Socket est en fait un socket. La plupart des gens comprennent qu'il peut implémenter une communication réseau simple, mais quels problèmes résout-il spécifiquement ? apparaît ? "


Socket est en fait un produit entre la couche application et la couche transport. Il encapsule de nombreuses opérations complexes de la couche transport dans des interfaces simples. La couche application appelle cela pour réaliser la communication des processus dans le réseau. Socket est un outil pour développer la communication portuaire, et il est de niveau inférieur.

Socket est en fait similaire à un lave-vaisselle. Sa fonction est de laver la vaisselle (communication réseau). Sans cela, vous devrez peut-être laver la vaisselle manuellement (appeler manuellement diverses API entre la couche de transport et la couche d'application), mais avec. il vous suffit de cliquer sur le commutateur et d'ajuster la durée (l'API est encapsulée). Vous n'en avez pas besoin, mais sans cela, le lavage de la vaisselle (l'interaction entre la couche application et la couche transport) deviendra très fastidieux.

Une communication réseau complète doit passer par le câble réseau et la carte réseau de la couche de transport physique. Le protocole IP de la couche de transport réseau peut savoir à quelle machine transmettre les données, mais il fonctionnera différemment dans le Processus du système informatique, comment identifier à quel processus sont destinées les données réseau de la carte réseau ? C'est en fait ce que Socket est conçu pour résoudre.

Socket est "une encapsulation du protocole TCP/IP ou UDP/IP" Socket lui-même est en fait une interface d'appel. Grâce à cette interface, lorsque nous développons des applications réseau, nous n'avons pas à nous soucier de la manière dont la couche sous-jacente est implémentée, ce qui réduit la difficulté de développement.

Socket Running Process

basé sur tcp

Intervieweur : Comment Socket TCP se déconnecte-t-il ?

server

  • socket (): signifie créer une prise, et la couche inférieure générera un descripteur de fichier pour représenter le socket
  • bind() : Le port et l'adresse utilisés pour lier le service sont généralement fixés ici car ils doivent être spécifiés lorsque le client se connecte
  • listen() : Une fois la liaison terminée, Listen surveillera le paquets de données de ce port
  • accept() : équivalent à un switch, indiquant que je suis prêt à accepter la demande, mais elle sera bloquée jusqu'à ce que la connexion client soit réussie
  • read () : Lire le contenu envoyé par le client
  • write() : Le client écrit les données à renvoyer
  • close() : Déconnecter, "agiter quatre fois"

Client

  • socket() : signifie créer un socket, et la couche inférieure générera un descripteur de fichier pour représenter le socket
  • connet() : signifie se connecter à l'adresse spécifiée. Avant cela, créera aléatoirement son propre port, celui de TCP. "La poignée de main à trois commence ici" 's
  • write() : le client écrit les données à envoyer
  • read() : le client lit le serveur Données renvoyées
  • close() : déconnecter,
    "Agitez quatre fois", envoyez les informations de déconnexion au client

Basé sur UDP

Intervieweur : Comment Socket TCP se déconnecte-t-il ?

Je n'entrerai pas dans les détails ici. En fait, ils sont similaires, vous pouvez le voir sur l'organigramme

Parce qu'UDP est sans état, il n'y a pas de connexion pour le. serveur. Et il recevra la demande du client après avoir appelé la méthode Recvfrom(), et bloquera jusqu'à ce que les informations soient reçues.

Comment Socket TCP établit-il une connexion ? la connexion est en fait la fameuse poignée de main à trois

Intervieweur : Comment Socket TCP se déconnecte-t-il ?
  • Première poignée de main : le processus TCP de A crée un bloc de contrôle de transmission TCB, puis envoie un segment de demande de connexion à B. Ensuite, définissez le bit de synchronisation SYN sur 1 et sélectionnez un numéro de séquence initial seq=x. À ce moment, le client A entre dans l'état SYN-SENT (synchronisation envoyée).
  • Deuxième poignée de main : B reçoit le segment de demande de connexion. S'il accepte d'établir la connexion, il envoie une confirmation à A. Dans le segment de message de confirmation, le bit de synchronisation SYN=1, le bit de confirmation ACK=1, le numéro de confirmation ack=x+1 et un numéro de séquence initial seq=y sont également sélectionnés pour lui-même. A ce moment, le serveur B entre. l'état SYN-RCVID.
  • La troisième poignée de main : après que A ait reçu la confirmation de B, il envoie ensuite une confirmation à B. Message de confirmation ACK=1, numéro de confirmation ack=y+1. A ce moment, A entre dans l'état ESTAB-LISHED. Lorsque B reçoit la confirmation de A, il entre également dans l'état ESTAB-LISHED. La connexion est établie

Dans quelles fonctions du socket se produit la poignée de main à trois voies

Intervieweur : Comment Socket TCP se déconnecte-t-il ?
  • Lorsque le client appelle connect, une demande de connexion est déclenchée et un signal SYN est envoyé au Le serveur à ce moment-là, connect entre dans l'état de blocage ;
  • Le serveur surveille la demande de connexion, c'est-à-dire qu'il reçoit SYN, appelle la fonction d'acceptation pour la recevoir et entre dans l'état de blocage. Avant cela, il fera de son mieux. pour utiliser les fonctions socket, bind et listening ; puis renvoie les signaux syn et ack pertinents
  • Le client reçoit les informations du serveur à ce moment, la connexion est terminée, l'état de blocage est libéré et le. Le signal d'accusé de réception est envoyé au serveur.
  • Le serveur reçoit l'accusé de réception, accepte le blocage et termine la connexion.

établit la connexion. Après cela, connect() a été exécuté et le serveur peut. envoyer des données au client.

Comment Socket TCP se déconnecte-t-il ?

Intervieweur : Comment Socket TCP se déconnecte-t-il ?
  • La première vague : A envoie d'abord le segment de message de libération de connexion, le bit de contrôle de terminaison FIN=1 dans l'en-tête du segment et le numéro de séquence seq=u (égal au début de A Le dernier numéro de séquence des données envoyées est augmenté de 1); puis A entre dans l'état FIN-WAIT-1 (terminer l'attente 1) et attend la confirmation de B.
  • Agitant pour la deuxième fois : après que B ait reçu le segment de message de libération de connexion de A, il envoie immédiatement un segment de message de confirmation, le numéro de confirmation ack=u+1, le numéro de séquence seq=v (égal au dernier numéro de séquence de les données envoyées par B avant Add 1); alors B entre dans l'état CLOSE-WAIT (attente de fermeture).
  • La troisième vague : A entre dans l'état FIN-WAIT-2 (attente de terminaison 2) après avoir reçu le segment de message de confirmation de B et continue d'attendre que B envoie un segment de message de libération de connexion
    • Si B ; Lorsqu'il n'y a aucune donnée à envoyer, B enverra un segment de message de libération de connexion à A. Le bit de contrôle de terminaison FIN=1 dans l'en-tête du segment, le numéro de séquence seq=w (certaines données peuvent être envoyées à l'état semi-fermé) , et le numéro de confirmation ack=u+ 1. À ce moment, B entre dans l'état LAST-ACK (dernière confirmation) et attend la confirmation de A.
  • La quatrième vague : A reçoit le segment du message de libération de connexion de B et envoie une confirmation. Le bit de confirmation dans le segment de confirmation est ACK=1, le numéro de confirmation ack=w+1 et le numéro de séquence seq=u+. 1 ; puis A Entrez dans l’état TIME-WAIT (temps d’attente). Lorsque B reçoit à nouveau le segment de confirmation, B entre dans l'état FERMÉ.

Pourquoi attendre 2MSL après la quatrième vague

Tout d'abord, le temps de 2MSL commence à partir du moment où le client (A) reçoit le FIN et envoie l'ACK. Si dans le temps TIME-WAIT, parce que l'ACK du client (A) n'est pas transmis au serveur (B), le client (A) reçoit le message FIN renvoyé par le serveur (B), alors le temps 2MSL sera Réinitialiser. Les raisons d'attendre 2MSL sont les suivantes

  • 1. Le paquet de données de la connexion d'origine disparaît
    • Si B ne reçoit pas son propre ACK, il expirera et retransmettra ensuite FiN. FIN à nouveau et enverra à nouveau ACK
    • Si B reçoit son ACK, il n'enverra plus de messages

Après la dernière vague, A ne sait pas si B a reçu son message. Y compris ACK, A doit attendre les deux situations ci-dessus. Pour prendre la valeur maximale du temps d'attente des deux situations afin de faire face au pire des cas, le pire des cas est : la durée de survie maximale du message ACK de destination. . (MSL) + Durée de survie maximale (MSL) des messages FIN entrants. Il s'agit exactement de 2 MSL, ce qui est suffisant pour faire disparaître du réseau le paquet de données initialement connecté.

  • 2. Assurez-vous que l'ACK peut être reçu par le serveur pour fermer la connexion correctement

Car cet ACK pourrait être perdu, ce qui empêcherait le serveur de recevoir le message de confirmation FIN-ACK. Supposons que le client n'attend pas 2MSL, mais libère la fermeture directement après l'envoi de l'ACK. Une fois l'ACK perdu, le serveur ne peut pas entrer normalement dans l'état de connexion fermée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer