Collecte d'interviews du réseau

Quelle est la structure de données de la couche transport ?

Juste demander son format de protocole : UDP&TCP

2.1.1 Poignée de main à trois

Avant la communication, une connexion doit être établie pour s'assurer que les deux parties sont en ligne et ont la capacité d'envoyer et de recevoir des données.

 

2.1.2 Agiter quatre fois

Une fois la communication terminée, il y aura un processus de déconnexion pour éviter les accidents.

 

La fonction de la demande FIN : cela peut seulement signifier qu'aucune autre donnée ne sera envoyée à l'autre partie, mais cela ne signifie pas que les données ne seront pas acceptées

CLOSE_WAIT : Attente de fermeture. L'autre partie a envoyé un paquet FIN et ne s'envoie plus de données. Si la couche supérieure continue à recevoir à ce moment, elle ne bloquera pas après avoir lu les données du tampon, mais renverra 0. Dans ce cas Il s'agit d'attendre que la couche supérieure s'occupe de cette situation.

Pourquoi la poignée de main est-elle trois fois ?

Serrer la main trois fois : deux, ce n'est pas sûr, quatre, c'est inutile

1. Avant la communication, une connexion doit être établie pour s'assurer que les deux parties sont en ligne et ont la capacité d'envoyer et de recevoir des données. Donc, vous devez SYN

2. Deux fois dangereux :

Il est possible que le SYN arrive en retard et forme un conflit avec le SYN retransmis (trois exigences avec état)
pour empêcher les attaques malveillantes. Par exemple, le client quittera directement après l'envoi du SYN.
​​3. Quatre temps sont inutiles : ​il n'est pas nécessaire d'envoyer deux messages. Réglez la position du bit correspondant sur 1 dans la réponse

2.1.3.2 Est-ce quatre fois de saluer ?

La requête FIN peut uniquement indiquer que la partie de clôture active n'enverra plus de données, mais cela ne signifie pas qu'elle ne recevra plus de données. Par conséquent, après que la partie de fermeture passive a reçu le paquet FIN et l'a confirmé, elle peut continuer à envoyer des données. Attendez que la couche supérieure n'envoie plus de données et que le socket soit fermé avant d'envoyer le paquet FIN.

Ainsi, l'ondulation n'est pas fusionnée en trois temps.

2.1.3.3 La poignée de main à trois échoue, comment y faire face ?

Si le client ne parvient pas à envoyer la première demande de prise de contact, le client retransmettra la demande SYN.
Si la deuxième poignée de main échoue, l'ACK + SYN répondu par le serveur est perdu et le client retransmettra. Après avoir attendu l'expiration de la réponse ACK de l'autre partie, le serveur envoie un message RST au client, puis libère les ressources.
La troisième prise de contact échoue, le serveur expire, répond avec RST, puis libère la ressource.

2.1.3.4 Un hôte a un grand nombre de connexions à l'état CLOSE_WAIT, quelle en est la raison ?

Seule la connexion qui reçoit la demande FIN et confirme la réponse entrera dans l'état CLOSE_WAIT. Elle a été dans l'état
CLOSE_WAIT sans entrer dans l'état suivant, car la couche supérieure n'a pas fermé l'opération de socket, c'est-à-dire qu'elle n'a pas envoyé FIN , il n'est donc pas entré dans l'étape suivante
, c'est-à-dire que le socket déconnecté n'est pas fermé dans le code

2.1.3.5 A quoi sert l'état TIME_WAIT, pourquoi ne pas fermer le socket directement pour libérer des ressources ?

L'état TIME_WAIT est l'état dans lequel la partie de fermeture active entre après avoir envoyé le dernier ACK.
S'il n'y a pas de TIME_WAIT, la partie de fermeture active libère directement les ressources du socket. Il est possible que le socket nouvellement démarré utilise les mêmes informations d'adresse qu'auparavant
et la dernière communication Le dernier ACK peut être perdu. Une fois perdu, la partie fermée passive retransmettra le FIN, ce qui entraînera la
perte de la dernière communication en raison du dernier ACK, et le problème hérité (retransmission du FIN) affectera le nouveau connexion,
de sorte que la ressource ne peut pas être libérée directement et qu'elle doit attendre deux mois.MSL temps, gérer les éventuelles retransmissions FIN et s'assurer que toutes les données de la dernière communication disparaissent dans le réseau.

MSL : Le cycle de vie maximal d'un message, la durée maximale pendant laquelle un message peut exister dans le réseau. 60s par défaut

2.1.3.6 Il existe un grand nombre de connexions à l'état TIME_WAIT sur un hôte, quelle en est la raison ? Comment y faire face?

TIME_WAIT est l'état dans lequel la partie de fermeture active entre après l'envoi du dernier ACK. Attendre un certain temps permet de gérer les retransmissions FIN qui peuvent être causées par la perte FIN. Par conséquent, un grand nombre de connexions TIME_WAIT apparaissent sur un hôte car il y a existe un grand nombre de connexions TIME_WAIT sur l'hôte
. Fermez activement la connexion, courant dans les serveurs de chenilles.
Le temps d'attente TIME_WAIT est configurable et peut raccourcir le temps.
Il existe une option de socket appelée address reuse: setsockopt();

Mécanisme de maintien en vie dans la gestion des connexions TCP

Il y a un message quand la connexion est déconnectée : recv renverra 0, et send déclenchera une exception SIGPIPE

Dans la communication TCP, si la fréquence de communication entre le client et le serveur n'est pas élevée et que le réseau est soudainement déconnecté au milieu, il n'y a aucune chance d'agiter quatre fois. Si la fréquence de communication entre les deux extrémités est très faible, il peut prendre beaucoup de temps pour le savoir.

Dans la communication, s'il n'y a pas de communication entre le client et le serveur pendant une longue période (par défaut 7200s), le serveur tcp enverra automatiquement un paquet de pulsation de détection keep-alive au client, demandant à l'autre partie de répondre (par défaut tous les 75s), s'il n'y a pas Lorsqu'une réponse est reçue (9 fois par défaut), la connexion est considérée comme déconnectée.

Ces données sont configurables. Il peut même être défini avec des options de socket.

Habituellement, le programme de communication réseau personnalisera le signal SIGPIPE pendant la phase d'initialisation.

Guess you like

Origin blog.csdn.net/weixin_56316833/article/details/132001998