Préface : En tant que développeur, nous écoutons généralement le protocole HTTP, le protocole TCP / IP, le protocole UDP, le socket, la prise de connecteur long, le groupe de connexion à la prise, mais ils ont la relation entre eux, la différence et les principes sont Tout le monde qui peut comprendre. Cet article commence dans le groupe de connexion Socket à partir du protocole Web, étape par étape pour expliquer la relation entre elles.
Modèle de réseau de sept couches
Premièrement, du modèle hiérarchique de la communication réseau: sept modèles de couche, également appelé modèle de béton connectant le système ouvert ouvert . Depuis le bas, la couche physique, selon les classes de liaison, les couches de réseau, les couches de transport, les classes de session, les performances et les couches d'applications. Toutes les informations associées ne peuvent être séparées de celle-ci. Ceci est une image qui introduit certains protocoles et matériel correspondant à chaque classe.
par l'image ci-dessus, je sais que le protocole IP correspond au protocole réseau, TCP et UDP correspondant à la transmission. Classe et livraisonC HTTP correspond à la couche d'application, OSI n'a pas de prise, puis la prise, puis nous introduirons le code combiné au code.
Introduction à la classe de transport TCP, Protocole UDP Pouvons-nous répondre à plus, certains haut-parleurs TCP, c'est sûr, UDP n'est pas en sécurité, La transmission UDP est plus rapide que TCP, pourquoi commence à analyser à partir du processus de connexion TCP, puis expliquez la différence entre UDP et TCP.
Trois captures de main de TCP et quatre adieux
Nous savons que TCP construit les connexions nécessitent trois coupures de main, tout en déconnectant après quatre ruptures, trois maintes à main et Quatre adieu a fait quelque chose et comment faire.
Shake de première main Établissez une connexion. Le client enverra le segment de la demande de connexion et la position SYN est 1, le numéro de commande est X; Après cela, le client entre dans le statut Syn_Send, en attente de la confirmation du serveur;
Deuxième poignée de main secondaire
: Le serveur reçoit la section Syn Message du client, vous devez confirmer ce segment de messages SYN, placer la dette ACKN est X + 1 (numéro de commande + 1); Dans le même temps, vous devez envoyer les informations de demande SYN pour vous-même, définissez la position de Syn pour être 1 et le numéro de commande est Y; Le côté serveur met toutes les informations sur un message de pièce (c.-à-d. Syn) + segment de package ACK, un et l'envoyer au client au moment du serveur dans l'état Syn_Recv;
Handshake mardi
: Le client reçoit le rapport de serveur Syn + ACK. Ensuite, définissez le numéro de confirmation sur Y + 1. Envoyez le rapport ACK au serveur. Une fois que le segment du rapport est envoyé, le côté client et le serveur de l'état sont définis pour compléter TCP trois poignées de main.Après avoir terminé trois poignées de main, le côté client et le serveur peuvent démarrer le transfert de données. Ci-dessus est l'introduction globale des trois poignées de main TCP. Communication Terminez le client et le serveur est déconnecté et doit être confirmé après quatre ruptures.
Temps d'adieuPremier : serveur 1 (peut rendre les clients ou le serveur), définissez le numéro de commande et confirmer dumber, envoyer un à 2 rapports de fin; Ici, le serveur 1 étape dans FIN_WAIT_1; Cela signifie que le serveur 1 n'a pas de données envoyées au serveur 2;
Second Farewell
: L'hôte 2 a reçu le segment de rapport de fini envoyé par Server 1 et ACK Reporting pour Server 1, le nombre de cadavres reçoivent 1; Serveur 1 entré le statut FIN_WAIT_2; Les serveurs 2 ont dit au serveur 1, je suis "d'accord" votre demande de clôture;
Farewell Server 2 transmet des messages d'aileron dans le serveur 1, demandant une connexion fermée et une étape de serveur 2 dans le statut Last_ack;
Wednesday Farewell
: Server 1 a reçu le segment des rapports de fin envoyé par Server 2, envoyant le segment de notification ACK sur le serveur 2, puis le serveur 1 étape dans l'état Time_Wait ; Hôte 2 Après avoir reçu le segment de rapport ACK du serveur 1, éteignant la connexion; haltèreÀ ce stade, le serveur 1 n'a toujours pas reçu après 2 mSL, puis il est prouvé que le terminal de serveur est étroitement fermé, ce serveur 1 peut également s'éteindre.
On peut voir une deuxième exigence TCP et fermé au moins 7 communications, n'a pas été communiquée avec des données et un UDP n'a pas besoin de 3 fois pour démarrer la main et 4 fois.
La différence de TCP et UDP
TCP est une liaison, bien que des caractéristiques instables instables instables du réseau déterminées à avoir le nombre de connexions de la fiabilité de la connexion ne peut être garanti, mais les trois poignées de main de TCP garantissent la fiabilité de la connexion; Et UDP n'est pas connecté à l'autre partie avant que l'UDP ne soit pas connecté. Connexion, les données dockées n'envoient pas de signal de confirmation, l'expéditeur ne sait pas si les données recevront correctement et, bien sûr, elles ne sont pas rééditées, le protocole de transmission de données n'est pas fiable, non fiable. En raison des caractéristiques de 1, le taux de transfert de données plus petit de l'UDPPlus haut, car il n'est pas nécessaire de confirmer les données des données, la nature en temps réel de UDP est meilleure. Je connais la différence entre TCP et UDP, non confondant pourquoi MSN utilise des protocoles de transport TCP plus lentement que l'utilisation de fichiers QQ UDP, mais ne peut pas dire que la communication QQ n'est pas sûre, car la configuration manuelle manuellement pour les émetteurs-récepteurs de données UDP est vérifiée, telle En tant que nombre d'expéditeurs à chaque paquet et vérifié par le destinataire, même si tel est le cas, UDP n'utilise pas «trois la poignée de main» est similaire à TCP sur l'emballage du protocole de base. TCP est incapable d'atteindre l'efficacité de la transmission.
Question
À propos de la classe d'expédition, nous écoutons souvent des problèmes 1. Le nombre maximal de connexions dans le serveur TCP est?
Sur le nombre maximal de connexions simultanément Server TCP est "car le numéro de port est 65535, le nombre maximal de connexions dans TCP Server est également de 65535". Tout d'abord, besoin de comprendre leComposition de la connexion TCP: client IP, porte client, IP du serveur, port de serveur. Par conséquent, pour le processus serveur TCP, il peut connecter le nombre de clients en même temps et ne se limite pas au numéro de port disponible. Le nombre de connexions peut être défini le même dans le premier serveur en tant que numéro IPS dans le monde * Le numéro de port de chaque machine .. La connexion réelle est limitée à Linux pour ouvrir le numéro de fichier, peut être structuré à la structure, peut être énorme. , donc vraiment limité à la performance du système. Voir le nombre maximum de services du service via #UULIMIT -N, modifier XXX via ULIMIT -N XXX est le numéro que vous souhaitez ouvrir. Vous pouvez également modifier les paramètres système:
2. Pourquoi le temps_wait doit-il attendre 2 msl pour revenir à la fermeture de la condition?
En effet, même si les deux parties acceptent de désactiver la connexion et que quatre notifications de la poignée de main sont également coordonnées et envoyées, en fonction de la raison pour laquelle vous pouvez revenir à l'état fermé (comme un statut Thai Syn_Send à l'établissement de l'État); Mais à cause de nousJe faux le réseau n'est pas fiable, vous ne pouvez pas garantir que le package ACK que vous avez envoyé sera reçu par un autre côté. L'autre partie est donc dans la socket d'état Last_ack peut ne pas recevoir le package ACK pour l'attente d'attente ne reçoit pas les packages ACK. Envoyez le package des ailerons, donc cet état TIME_WAIT est utilisé pour relâcher les paquets ACK manquants.
3. Lorsque l'état TIME_WAIT doit revenir à l'état fermé après 2 msl peut être renvoyé à l'état fermé.
Après avoir communiqué entre la communication, la mise hors tension de l'opération, la connexion entrera le statut time_wait et le statut time_wait de l'heure de maintenance est de deux longueurs de temps de MSL. C'est-à-dire en 1-4 minutes, le système d'exploitation Windows est de 4 minutes. Dans des circonstances normales, entrez le statut Time_Wait comme client, la connexion Statut Time_Wait occupe un port local. La limite supérieure du nombre de numéros de port sur la machine est de 65 536. Si le test de pression simule des dizaines de milliers d'exigences des clients sur la même machine et le même cycleC Connexion d'une courte du serveur, cette machine créera 4 000 fois_waits. Socket, la prochaine connexion courte a créé l'adresse d'utilisation: Connectez des exceptions, si vous utilisez NGinx en tant qu'agent orienté, vous devez prendre en compte le statut de Time_Wait et le système a un grand nombre de l'état TIME_WAIT et résolvez les paramètres du noyau.
Modifier le fichier, ajoutez les éléments suivants:
Après cela, l'exécution / SBIN / SYSCTL -P permet aux paramètres de prendre effet.
NET.IPV4.TCP_SYNCOOKIES = 1 supprimer Cookie Syn. Lorsque Syn Wee Wee Wee Weedflows, permettant aux cookies de manipuler, empêchant une petite quantité de consolidation syn-synl, la valeur par défaut est 0, indiquant l'arrêt;
NET.IPV4.TCP_TW_REUSE = 1 indique que l'utilisation ouverte est allumée. Permettez à la prise d'attendre le temps d'être utilisé pour les nouvelles connexions TCP, la valeur par défaut est considérée comme 0, indiquant la fermeture;
NET.IPV4.CP_TW_RECYCLE = 1 indique le recyclage rapide des prises d'attente de cendresNG Connexion TCP, la valeur par défaut est 0, indiquant qu'il est désactivé.
NET.IPV4.CP_FIN_TIMEOUT Modifie le temps de veille par défaut du système.
Aller à la relation des protocoles TCP / IP et HTTP, le réseau a une compréhension relativement facile: "Nous changeons des données. Quand seulement ( Cependant, la classe de transport) TCP / IP est utilisée, toutefois, sans la couche d'application, la teneur en données ne peut pas être déterminée. Si vous souhaitez créer des données du transfert, vous devez utiliser le protocole de la couche d'application. Le protocole de la couche d'application a un lot, tel que http, ftp, telnet, etc., vous pouvez également identifier le protocole de la couche d'application.
Protocole de transmission de Super-Text, est un réseau Web de la plate-forme qui est également l'un des Les protocoles les plus couramment utilisés utilisés par les réseaux mobiles. Web utilise le protocole HTTP vers le message texte http, puis utilisez TCP / IP pour créer le protocole de classe d'expédition pour l'envoyer au réseau.
Connexion de déverrouillage positive HTTP Après chaque demande, la connexion HTTP est "Connexion courte". Pour conserver le statut en ligne du programme client, vous devez commencer constamment à connecter au serveur. L'approche habituelle est qu'il n'est pas nécessaire de disposer de données et que le client conserve également la demande de «Connexion Stop» du serveur tous les autres. Réponse du serveur aux clients après avoir reçu la demande, indiquant que le client est connu. "En ligne. Si le serveur ne peut pas recevoir de demandes de clients pendant une longue période, il est considéré comme un client" hors ligne ". Si le client n'accepte pas la réponse du serveur pendant une longue période, les personnes que je considère que le réseau a été déconnecté.
Ce qui suit est une simple configuration de données http post-application / JSON:
À propos de la prise
Maintenant, nous comprenons que TCP / IP est juste une pile de protocoles, comme le mécanisme d'opération du système fonctionnant, mais il doit également être développé.Déclaration, mais fournit également une interface opérationnelle. Comme le système d'exploitation fournissant une interface de programmation standard, telle que l'interface de programmation Win32, TCP / IP doit également fournir des interfaces de programmation externes, c'est la prise. Nous savons maintenant que la prise ne sera pas nécessairement associée à TCP / IP. L'interface de programmation de la prise est conçue pour s'adapter à d'autres protocoles réseau. Par conséquent, l'apparence de la prise est seulement plus pratique d'utiliser des piles de protocole TCP / IP, extraitées à TCP / IP, formant certaines des interfaces fonctionnelles les plus élémentaires. Par exemple, créer, écouter, accepter, connecter, lire et écrire, v.v.
Différentes langues ont un serveur de serveur et de bibliothèque client correspondant. L'exemple suivant Nodejs Comment créer un serveur et un client:
Server:
Lecteur de service 9000 ports
] Ensuite, utilisez la ligne de commande pour envoyer http et telnet
[
Notez que la seule raisonun message.
La connexion dite à long terme fait référence à de nombreux packages de packages peuvent être transmis dans une connexion TCP. Au cours de la connexion TCP, s'il n'y a pas de transmission de paquets, il est nécessaire d'envoyer le package pour conserver cette connexion (emballage cardiaque), nécessite souvent une maintenance en ligne. Connexion courte des moyens lors de la communication entre la communication, configurez une connexion TCP, une fois que les données sont envoyées, déconnectez ce TCP. Par exemple: http, il suffit de connecter, de la demande, de la fermeture, du temps de traitement est court, le serveur est fermé si la demande n'est pas reçue pendant un moment. En fait, de longues connexions sont liées à des connexions courtes régulières, ce qui signifie que l'état de la connexion client et le serveur conserveront longtemps.
L'étape de fonctionnement de la connexion courte normale est la suivante:
Connect → Transmission de données → Éteignez la connexion;
et des connexions longues régulières:
Connexion → Données de transport → Connexion de la maintien (saut cardiaque) → Transport de données → Séjour de la connexion(fréquence cardiaque) → ... → Connexion rapprochée;
Temps de connexion, Connexion courte Chang Xiang tout le monde utilisait régulièrement, communiquant des points de point et le nombre de connexions ne peut pas être trop. Chaque connexion TCP nécessite trois étapes, cela prend du temps, si chaque manière est connectée en premier, la vitesse de traitement diminuera, elle est donc ouverte en continu après chaque opération et par paquets. Vient d'accord, vous n'avez pas à configurer la connexion TCP. Par exemple, la base de données est connectée à une longue connexion. Si la communication régulière est utilisée régulièrement, la création d'une prise régulière est également un gaspillage de ressources.
Quel est le paquet de fréquence cardiaque?
:
L'emballage de coeur est d'informer l'État des autres personnes dans le processus de clients et de services. Une commande de mots que vous identifiez, envoyez-la à une certaine période, semblable à votre battement de coeur, appelé le paquet de fréquence cardiaque. Données collectées et transmises dans le réseauDéployé par socket. Mais si cette manche a été déconnectée (par exemple, la partie), il y aura un problème lors de l'envoi de données et de recevoir des données. Mais comment cette prise peut-elle toujours utiliser? Cela doit créer un mécanisme de battement de coeur dans le système. En fait, TCP a fait un mécanisme appelé battement de cœur. Si vous définissez votre battement de coeur, TCP vous enverra une certaine fréquence cardiaque (par exemple, 2 fois) et cette information n'affecte pas votre propre convention de définition. Vous pouvez également localiser ma propre position, le soi-disant «coeur» est un La structure personnalisée (fréquence cardiaque ou fréquence cardiaque), à l'autre partie connaît son propre "en ligne" pour assurer la validité du lien.
Services
Code du client
Les sorties du client:
Détermination du protocole de RIVous
Si vous souhaitez créer des données à partir de données de transmission, vous devez utiliser le protocole de classe d'application comme HTTP, MQTT, DUBBO, V.V. Certaines problèmes doivent être résolus sur la base des protocoles de leurs couches d'application sur le protocole TCP:
La définition du titre est que vous devez envoyer des données, vous devez envoyer Une tête de presse et vous pouvez résoudre la longueur des données que vous souhaitez envoyer que vous soumettez le format du package, est JSON ou une autre méthode série
Identifier votre propre protocole et écrire le service clientèle. et appelle:
Déterminez le format WENHE: Longueur: 000000000XXXX; XXXX représente la longueur des données, la longueur totale de 20, et l'exemple n'est pas strict.
Méthode de sérialisation des données: JSON.
.
Ici, vous pouvez voir un client en même temps. Une demande peut bien fonctionner, mais imaginez une telle scène, si le même client appelle la demande de serveur plusieurs fois en même temps, envoyant plusieurs données de données et données de données, données reçues car le serveur est difficile à distinguer les données requises, Tels que deux titres permettent d'accéder au serveur, le serveur ignore l'un d'entre eux et les données de contenu suivantes ne correspondent pas nécessairement à ce haut. Par conséquent, vous devez vous connecter avec le groupe de cette façon.
GROUPE DE Connexion de socket
Groupe de connexion à la prise, le concept de groupes peut être lié à un ensemble de ressources, de sorte que les sockets de connexion de groupe sont de maintenir une Ensemble de connexions de socket long. Il détecte automatiquement l'efficacité des connexions de sortie longue, l'élimination de la connexion non valide et les connexions supplémentaires à long terme au groupe de connexion. Du niveau du code, c'est vraiment une classe d'implémentation artificielle. En général, un groupe de connexion contient les attributs suivants:
Connecteur de file d'inutilise longue
exécute une file d'attente de raccordement longue
En attente d'une file d'attente d'une requête de connexion longue inactive
Configuration du groupe de piscine à long terme
Nouvelle fonctionnalité de ressources à long terme
Scènes: Demande, Allez d'abord au groupe de ressources pour obtenir une ressource à long terme, s'il existe une longue connexion dans La file d'attente inactive, retirez cette prise longue connectée et déplacez cette prise sur une longue file d'attente de connexion. Si non dans la file d'attente inactive et que la longueur de la file d'attente fonctionne plus petite que le nombre de ressources connectées sont configurées, créez une nouvelle connexion longue à la file d'attente de course, si elle est en cours d'exécution, la longueur du groupe est en cours d'exécution, les ressources de longueur de groupe sont nécessaires pour Être en cours d'exécution, cela nécessite d'entrer dans l'équipe. Lorsqu'une fiche est terminée, passez à partir de la ligne exécutée à la file d'attente inactive et activez la file d'attente d'attente pour obtenir une ressource gratuite, s'il existe une situation d'attente.
Le module de groupe de connexion universel de nœud.js sera décrit ci-dessous: Général-Pool.
Initialiser le groupe de connexion
Utilisation du groupe de connexion Utilisation de la connexion du groupe ci-dessous, le protocole utilisé est notre précédent protocole personnalisé. LOG D'IMPRESSION: . [ Ici, les deux exigences frontales ont défini une nouvelle connexion Connexion de socket Connection_pool 127.0.0.1 9000 connectée, puis réactivez les deux demandes après la fin des extrémités de la minuterie sans mettre en place Connecter une nouvelle prise. Si vous recevez des ressources, connectez des sockets à partir du groupe de connexion. Analyse de la source Le code principal trouvé dans le constructeur de PAGH.JS dans la lib: ] Vous pouvez voir la file d'attente de ressources contenant auparavant, étant invitée à la file d'attente du talentExigences en attente, etc. Piscine.Acquire Méthode LIB / POONCH.JS . ] Le code ci-dessus étage toujours la ressource qui a finalement une connexion longue et certains autres codes peuvent être compris. Menu Introduction: Changfeng, 6 ans d'expérience de développement de services, responsable de la mise en œuvre de l'évolution et de développement de programmes techniques de 0 par une visite très simultanée, accumulant une certaine plate-forme Pour le développement et la consommation élevée peuvent être utilisés et est actuellement responsable de l'architecture et de développer le niveau de réseau du cadre de micro-service de la société publique.