expérience en réseau informatique

1. Modèle OSI à sept couches ❤️❤️❤️❤️❤️❤️

	OSI 模型(Open System Interconnection Model)是⼀个由 ISO 提出的概念模型,
	试图提供⼀个使各种不同的的计算机和⽹络在世界范围内实现互联的标准框架。
	虽然OSI参考模型在实际中的应⽤意义并不是很⼤,但是它对于理解⽹络协议内部的运作很有帮助,
	为我们学习⽹络协议提供了⼀个很好的参考。它将计算机⽹络体系结构划分为7层,
	每层都为上⼀层提供了良好的接⼝。以下将具体介绍各层结构及功能。

2. Structure hiérarchique

1. Couche physique

En termes simples, la couche physique garantit que les données d'origine peuvent être transmises sur divers supports physiques. Cette couche spécifie l'activation, la maintenance et l'arrêt des caractéristiques mécaniques, électriques et fonctionnelles entre les points d'extrémité de communication et fournit un support physique pour la transmission de données pour le protocole de couche supérieure. Cette couche transmet des flux binaires.

2. Couche de liaison de données ❤️❤️❤️

La couche liaison de données (Data Link Layer) assure une transmission fiable sur des supports physiques non fiables. Les fonctions de cette couche comprennent : l'adressage des adresses physiques, le cadrage des données, le contrôle de flux, la détection des erreurs de données, la retransmission, etc. Dans cette couche, le flux binaire est encapsulé dans une trame de trame.

3. Couche réseau ❤️❤️❤️

La couche réseau est responsable du routage des paquets de données entre les sous-réseaux. En outre, la couche réseau peut également mettre en œuvre des fonctions telles que le contrôle de la congestion et l'interconnexion Internet. Au niveau de cette couche, l'unité de données est appelée un paquet.

4. Couche transport

La couche de transport est une couche de bout en bout, c'est-à-dire d'hôte à hôte. La couche de transport est chargée de segmenter les données de la couche supérieure et de fournir une transmission de bout en bout, fiable ou non fiable. En outre, la couche transport traite également les problèmes de contrôle d'erreur et de contrôle de flux de bout en bout. Au niveau de cette couche, l'unité de données est appelée un segment.

5. Couche de session ❤️❤️❤️

Cette couche gère les processus de session entre les hôtes, c'est-à-dire qu'elle est responsable de l'établissement, de la gestion et de la terminaison des sessions entre les processus. La couche de session implémente également la synchronisation des données en insérant des points de contrôle dans les données, et établit et maintient des mécanismes de communication entre les applications, y compris la vérification d'accès et la gestion de session. Par exemple, l'authentification du serveur pour la connexion de l'utilisateur est effectuée par la couche de session. Permet à une session de communication de reprendre la communication à partir d'un point de contrôle lorsque la communication échoue. Par exemple, établissez une session, comme l'authentification de session et le téléchargement avec reprise.

6. Couche de présentation

Cette couche résout principalement le problème de la représentation grammaticale des informations utilisateur. Il convertit les données à échanger d'une syntaxe abstraite adaptée à un certain utilisateur en une syntaxe de transfert adaptée à l'utilisation interne du système OSI. C'est-à-dire qu'il fournit des services de représentation formatée et de transformation de données. La compression et la décompression des données, le chiffrement et le déchiffrement sont tous effectués par la couche de présentation. Par exemple, solution d'encodage d'images et de vidéos, cryptage de données.

7. Couche d'application ❤️❤️❤️

Cette couche fournit une interface permettant au système d'exploitation ou aux applications réseau d'accéder aux services réseau.

3. Comparaison des protocoles de transmission, des unités de transmission et des principaux équipements fonctionnels de chaque couche

nom Protocole de transfert unité de transmission Appareil/interface de fonction principale
couche physique IEEE 802.1A, IEEE 802.2 flux de bits flux de bits Fibre optique, paire torsadée, répéteur, concentrateur, interface de câble réseau
couche de liaison de données ARP, MAC, FDDI, Ethernet, Arpanet, PPP, PDN cadre cadre Pont, commutateur de couche 2
Couche réseau IP, ICMP, ARP, RARP paquet routeurs, commutateurs de couche 3
couche de transport TCP、UDP Segment/Datagramme Commutateur de couche 4
couche de session SMTP、DNS message QoS
couche de présentation Telnet、SNMP message -
couche d'application FTP, TFTP, Telnet, HTTP, DNS message -

4. Décrivez l'en-tête TCP ? ❤️❤️❤️❤️❤️❤️❤️❤️

  • Numéro de séquence 32 (bit) : numéro d'octet du flux d'octets dans le sens de la transmission. Le numéro de séquence initial sera défini avec une valeur initiale aléatoire (ISN), puis chaque fois que des données sont envoyées, la valeur du numéro de séquence = ISN + le décalage des données dans l'ensemble du flux d'octets. En supposant que A -> B et ISN = 1024, le premier segment de données de 512 octets est arrivé à B, alors le numéro de séquence du deuxième segment de données est 1024 + 512. Il est utilisé pour résoudre le problème des paquets réseau en panne.
  • Numéro de confirmation (32 bits) : La réponse du destinataire au segment TCP de l'expéditeur, et sa valeur est le numéro de séquence reçu + 1. ❤️
  • Longueur d'en-tête (4 bits) : Indique combien de 4 octets * longueur d'en-tête il y a, le maximum est de 15, c'est-à-dire 60 octets.
  • Bit d'indicateur (6 bits) :
    • URG : indique si le pointeur urgent est valide.
    • ACK : indique si le numéro de confirmation est valide (segment de confirmation). Utilisé pour résoudre le problème de perte de paquets.
    • PSH : demande au récepteur de lire immédiatement les données du tampon.
    • RST : indique que l'autre partie doit rétablir la connexion (segment de réinitialisation).
    • SYN : Indique une demande d'établissement de connexion (segment de connexion).
    • FIN : signifie fermer la connexion (déconnecter le segment).
  • Fenêtre (16 bits) : fenêtre de réception. Il est utilisé pour informer l'autre partie (expéditeur) du nombre d'octets de données pouvant être reçus dans le tampon de cette partie. Utilisé pour résoudre le contrôle de flux.
  • Somme de contrôle (16 bits) : L'extrémité réceptrice utilise le CRC pour vérifier si le segment de message entier est endommagé.

5. Poignée de main TCP à trois voies et vague

1. Processus de poignée de main à trois

  • La première fois : le client envoie un paquet contenant le bit SYN, SEQ_NUM = S au serveur. (invité -> SYN_SEND)
  • La deuxième fois : le serveur envoie un paquet contenant ACK, bit SYN et ACK_NUM = S + 1, SEQ_NUM = P au client. (servir -> SYN_RECV)
  • La troisième fois : le client envoie un paquet contenant le bit ACK, ACK_NUM = P + 1 au serveur. (Client -> ETABLIR, Service -> ETABLIR)

2. Le processus d'agiter quatre fois

  • La première fois : le client envoie un paquet contenant le bit FIN, SEQ = Q au serveur. (Invité -> FIN_WAIT_1)
  • La deuxième fois : le serveur envoie un paquet contenant ACK et ACK_NUM = Q + 1 au serveur. (Serveur -> CLOSE_WAIT, Invité -> FIN_WAIT_2), il y a de l'attente ici !
  • Troisième fois : Le serveur envoie un paquet contenant FIN et SEQ_NUM = R au client. (Serveur -> LAST_ACK, Invité -> TIME_WAIT) Il y a de l'attente ici !
  • Quatrième fois : le client envoie le dernier paquet avec le bit ACK et ACK_NUM = R + 1 au client. (Servant -> FERMÉ)

3. Pourquoi y a-t-il trois poignées de main et quatre vagues ? ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

  • Pour la poignée de main : la poignée de main n'a qu'à confirmer le numéro de séquence d'initialisation lorsque les deux parties communiquent, afin de s'assurer que la communication ne sera pas désordonnée. (Nécessité de la troisième poignée de main : en supposant que la confirmation du serveur est perdue et que la connexion n'est pas déconnectée, le client renvoie la demande de connexion après un délai d'attente, de sorte que le serveur maintiendra plusieurs connexions au même client, entraînant une perte de ressources.)
  • Pour l'ondulation : TCP est en duplex, donc l'expéditeur et le destinataire ont besoin de FIN et ACK. C'est juste qu'un côté est passif, donc ça ressemble à 4 mains agitées.

4. État de la connexion TCP ?

  • FERME : état initial.
  • LISTEN : le serveur est à l'état d'écoute.
  • SYN_SEND : le socket client effectue une connexion CONNECT, envoie un paquet SYN et entre dans cet état.
  • SYN_RECV : le serveur entre dans cet état après avoir reçu le paquet SYN et envoyé le paquet SYN du serveur.
  • ESTABLISH : indique que la connexion est établie. Le client entre dans cet état après avoir envoyé le dernier paquet ACK, et le serveur entre dans cet état après avoir reçu le paquet ACK.
  • FIN_WAIT_1 : Entrez après que la partie qui a mis fin à la connexion (généralement le client) envoie un message FIN. Attendez le FIN de l'autre partie.
  • CLOSE_WAIT : (en supposant que le serveur) attend l'étape de fermeture après avoir reçu le paquet FIN du client. Après avoir reçu le paquet FIN de l'autre partie, il est naturel de répondre immédiatement à un paquet ACK, indiquant que la demande de déconnexion est connue. Cependant, si le correspondant local se déconnecte immédiatement (envoie un paquet FIN) dépend s'il y a des données à envoyer au client, si c'est le cas, il reste dans cet état avant d'envoyer le paquet FIN.
  • FIN_WAIT_2 : à ce moment, il est dans un état semi-connecté, c'est-à-dire qu'une partie demande à fermer la connexion et attend que l'autre partie se ferme. Le client reçoit le paquet ACK du serveur, mais ne reçoit pas immédiatement le paquet FIN du serveur et passe à l'état FIN_WAIT_2.
  • LAST_ACK : le serveur envoie le dernier paquet FIN, attend la dernière réponse ACK du client et entre dans cet état.
  • TIME_WAIT : le client reçoit le paquet FIN du serveur et envoie immédiatement un paquet ACK pour confirmation finale. Le temps 2MSL qui suit est appelé l'état TIME_WAIT.

5. Expliquer les états FIN_WAIT_2, CLOSE_WAIT et TIME_WAIT ?

  • FIN_ATTENTE_2:
    • état semi-fermé.
    • La partie qui envoie des données a toujours la capacité de recevoir des données, mais n'a plus la capacité d'envoyer des données.
  • État CLOSE_WAIT :
    • La partie qui ferme passivement la connexion répondra immédiatement avec un paquet ACK après avoir reçu le paquet FIN, indiquant que la demande de déconnexion a été reçue.
    • Si la partie qui ferme passivement la connexion a encore des données à envoyer, elle entrera dans l'état CLOSED_WAIT.
  • État TIME_WAIT
    • Également appelé état d'attente 2MSL.
    • Si le client entre directement dans l'état FERMÉ, si le serveur ne reçoit pas le dernier paquet ACK, il renverra le paquet FIN après le délai d'attente. A ce moment, parce que le client est déjà FERMÉ, le serveur ne recevra pas l'ACK mais recevoir le ACK.RST. Par conséquent, le but de l'état TIME_WAIT est d'empêcher les dernières données de prise de contact d'atteindre l'autre partie et de déclencher la retransmission des préparations FIN.
    • Pendant le temps 2MSL, la même prise ne peut plus être utilisée, sinon elle risque d'être mélangée avec les anciennes données de connexion (si la prise de la nouvelle connexion et l'ancienne connexion sont identiques).

6. Expliquer le RTO, le RTT et la retransmission du délai d'attente ?

  • Délai de retransmission : si l'expéditeur ne reçoit pas de message de confirmation pendant une longue période après l'envoi du message, il doit renvoyer le message. Il peut y avoir plusieurs situations :
    • Les données envoyées n'ont pas atteint l'extrémité de réception, de sorte que l'autre partie n'a pas répondu.
    • L'extrémité réceptrice reçoit les données, mais le paquet ACK est perdu pendant le processus de retour.
    • Le récepteur rejette ou ignore les données.
  • RTO : L'intervalle de retransmission est le temps entre le dernier envoi de données et le temps entre la prochaine retransmission car aucune réponse ACK n'a été reçue depuis longtemps.
    • Habituellement, le RTO de chaque retransmission est le double de l'intervalle de retransmission précédent, et l'unité de mesure est généralement le RTT. Exemple : 1RTT, 2RTT, 4RTT, 8RTT...
    • Arrêtez la retransmission lorsque le nombre de retransmissions atteint la limite.
  • RTT : L'intervalle de temps entre l'envoi de données et la réception de la réponse de l'autre partie, c'est-à-dire lorsque le datagramme est utilisé dans un aller-retour dans le réseau, la taille est instable.
  • Le but est que le récepteur informe l'expéditeur de la quantité maximale de données qu'il peut recevoir via le champ de la fenêtre d'en-tête TCP, afin de résoudre le problème que le récepteur ne peut pas recevoir car le débit d'envoi est trop rapide. Le contrôle de flux est donc un contrôle point à point.
  • TCP est un protocole duplex, et les deux parties peuvent communiquer en même temps, de sorte que l'expéditeur et le destinataire maintiennent chacun une fenêtre d'envoi et une fenêtre de réception.
    • Fenêtre d'envoi : utilisée pour limiter la taille des données que l'expéditeur peut envoyer, où la taille de la fenêtre d'envoi est contrôlée par le champ de fenêtre dans le segment TCP renvoyé par le destinataire, et le destinataire informe l'expéditeur de son propre tampon via ce champ (limité par le système, le matériel, etc.) Taille.
    • Fenêtre de réception : utilisée pour marquer la taille des données pouvant être reçues.
  • TCP est un flux de données, et le flux de données envoyé peut être divisé en quatre parties : partie envoyée et confirmée | partie non acquittée envoyée | partie non envoyée mais pouvant être envoyée | partie non pouvant être envoyée, où fenêtre d'envoi = partie de confirmation envoyée mais pas partie de confirmation + non envoyée mais pouvant être envoyée partie. Le flux de données reçu peut être divisé en : reçu | non reçu mais prêt à recevoir | non reçu mais non prêt à recevoir. Fenêtre de réception = non reçu mais prêt à recevoir la pièce.
  • Pour les données dans la fenêtre d'envoi, la fenêtre d'envoi n'est déplacée que lorsque la réponse ACK d'un certain segment de données envoyé par l'extrémité réceptrice est reçue, et le bord gauche est proche des données qui viennent d'être confirmées. La fenêtre de réception ne se déplace que lorsque les données sont reçues et le côté le plus à gauche est continu.

7. Principe de contrôle de la congestion

  • Le but du contrôle de congestion est d'éviter la surcharge des ressources du réseau (routeurs, commutateurs, etc.) due à une injection excessive de données dans le réseau. Étant donné que le contrôle de la congestion implique le lien global du réseau, il appartient au contrôle global. La congestion est contrôlée à l'aide de fenêtres de congestion.
  • Algorithme de contrôle de congestion TCP :
    • Démarrage lent et évitement de la congestion : testez d'abord le niveau de congestion du réseau, puis augmentez progressivement la fenêtre de congestion. La fenêtre de congestion double chaque fois qu'un accusé de réception est reçu jusqu'à ce qu'elle atteigne le seuil ssthresh, qui fait partie du processus de démarrage lent. Une fois le seuil atteint, la taille de la fenêtre de congestion est augmentée d'un MSS à chaque fois. Lorsque la congestion se produit (la confirmation n'est pas reçue après un délai d'attente), le seuil est réduit à la moitié de la valeur d'origine et l'augmentation linéaire se poursuit. Ce processus est l'évitement de la congestion.
    • Finalement, la fenêtre de congestion convergera vers une valeur stable.

6. Comment faire la distinction entre contrôle de flux et contrôle de congestion ?

  • Le contrôle de flux appartient à la négociation entre les parties à la communication ; le contrôle de la congestion implique la qualité de la liaison de communication.
  • Le contrôle de flux nécessite que les deux parties de la communication maintiennent une fenêtre d'envoi et une fenêtre de réception. Pour toute partie, la taille de la fenêtre de réception est déterminée par elle-même, et la taille de la fenêtre d'envoi est déterminée par la valeur de la fenêtre dans le segment TCP du Le changement de taille de la fenêtre d'encombrement du contrôle d'encombrement est ajusté de manière adaptative en envoyant provisoirement une certaine quantité de données pour détecter les conditions du réseau.
  • Fenêtre d'envoi finale réelle = min {fenêtre d'envoi du contrôle de flux, fenêtre de congestion}.

7. Comment TCP assure-t-il une transmission de données fiable ?

  • Etablir la connexion (bit drapeau) : Confirmer l'existence de l'entité de communication avant la communication.
  • Mécanisme de numéro de séquence (numéro de série, numéro de confirmation) : garantit que les données arrivent dans l'ordre et dans leur intégralité.
  • Vérification des données (somme de contrôle) : le CRC vérifie toutes les données.
  • Timeout retransmission (timer) : assurez-vous que les données qui n'arrivent pas en raison d'une défaillance de la liaison peuvent être retransmises plusieurs fois.
  • Mécanisme de fenêtre (fenêtre) : Fournit un contrôle de flux pour éviter un envoi excessif.
  • Contrôle de la congestion : comme ci-dessus.

8. Processus d'interaction du socket TCP ?

  • serveur:
    • 创建socket->int socket(int domain,int type,int protocol);
      • domaine : domaine de protocole, qui détermine le type d'adresse du socket, IPv4 est AF_INET.
      • type : spécifie le type de socket, SOCKET_STREAM est une connexion TCP.
      • protocole spécifie le protocole. IPPROTO_TCP indique le protocole TCP, et lorsqu'il vaut 0, le type de protocole par défaut est automatiquement sélectionné.
    • Lier le socket et le numéro de port -> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      • sockfd : le descripteur de socket renvoyé par socket, similaire au descripteur de fichier fd.
      • addr : il existe un pointeur vers les données de type sockaddr, pointant vers la variable de structure liée.
//IPv4的sockaddr地址结构
struct sockaddr_in{
    
    
	sa_family_t sin_family;//协议类型,AF_INET
	in_port_t sin_port;//端口号
	struct in_addr sin_addr; //IP地址
};
struct in_addr{
    
    
	uint32_t s_addr;
}
  • addrlen : longueur de l'adresse.
    • Numéro de port d'écoute -> int listen(int sockfd, int backlog);
      • sockfd ; le mot de description de la chaussette à surveiller.
      • backlog : Le nombre maximum de connexions que le socket peut mettre en file d'attente.
    • Recevoir la demande de l'utilisateur -> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
      • socket : mot de description de la socket du serveur.
      • addr : pointeur vers la structure de l'adresse.
      • addrlen : longueur de l'adresse du protocole.
      • Remarque : Une fois qu'une demande client est acceptée avec succès, un nouveau descripteur sera renvoyé pour identifier la connexion TCP du client spécifique.
    • Lit les caractères du socket -> ssize_t read(int fd, void *buf, size_t count);
      • fd : descripteur de connexion.
      • buf : tampon buf.
      • count : longueur de la mémoire tampon.
      • Remarque : supérieur à 0 indique le nombre d'octets lus, renvoyer 0 indique la fin de la lecture du fichier et inférieur à 0 indique qu'une erreur s'est produite.
    • fermer socket -> int fermer(int fd);
      • fd : le descripteur de connexion renvoyé par accept, un pour chaque connexion, et le cycle de vie est le cycle de connexion.
      • Remarque : socket est un mot de description de surveillance, et il n'y a qu'un seul serveur, qui est utilisé pour surveiller s'il y a une connexion ; fd est un mot de description de connexion, qui est utilisé pour le fonctionnement de chaque connexion.
  • Ordinateur client :
    • 创建socket -> int socket(domaine int,type int,protocole int);
    • Connectez-vous à l'ordinateur spécifié -> int connect(int sockfd, struct sockaddr* addr, socklen_t addrlen);
      • Le descripteur de chaussette du client sockfd.
      • addr : L'adresse du serveur.
      • addrlen : longueur de l'adresse du socket.
    • Écrire des informations sur le socket -> ssize_t write(int fd, const void *buf, size_t count);
      • fd, buf, count : même sens que dans read.
      • Une valeur supérieure à 0 indique que certaines ou toutes les données ont été écrites, et une valeur inférieure à 0 indique une erreur.
    • Fermer oscket -> int close(int fd);
      -fd : identique à fd côté serveur

Guess you like

Origin blog.csdn.net/qq_43679351/article/details/125271414