Révision Glossaire EN

Taille

Yeux

Termine une partie dans un dojo pour débloquer les yeux suivants.

Glossaire

`proxy_read_timeout`
La limite de nginx entre deux lectures depuis le backend, 60 s par défaut. Dans un tunnel WebSocket, elle ferme une connexion où le backend n’envoie rien pendant ce temps.
Les WebSockets derrière un proxy
`tcp_retries2`
Le sysctl Linux qui décide quand une connexion avec des données non acquittées abandonne. Par défaut 15, soit au moins 924,6 secondes.
Paquets perdus et retransmission
`tcp_tw_reuse`
Le sysctl qui permet à une nouvelle connexion sortante de reprendre un 4-tuple encore en TIME_WAIT. La valeur par défaut, 2, ne l’autorise que pour le trafic loopback.
Ports, sockets et TIME_WAIT
`TCP_USER_TIMEOUT`
Une option de socket, en millisecondes : la durée maximale pendant laquelle des données envoyées peuvent rester sans ACK avant que le noyau ferme la connexion avec ETIMEDOUT.
Paquets perdus et retransmission
0-RTT
Des données que le client envoie dès son tout premier envoi, avant toute réponse du serveur, avec des clés tirées d’une connexion précédente au même serveur. RFC 9000 : "0-RTT provides no protection against replay attacks".
HTTP/3 et QUIC
4-tuple
IP source, port source, IP de destination, port de destination. Chaque connexion TCP d’une machine a besoin d’un 4-tuple qu’aucune autre connexion n’utilise.
Ports, sockets et TIME_WAIT
Adresse IPv6
128 bits, écrits en huit groupes de quatre chiffres hexadécimaux séparés par des deux-points. :: remplace une suite de groupes à zéro, et ne peut apparaître qu’une fois.
IPv6 quand on connaît IPv4
Adresse link-local
Une adresse dans fe80::/10, valable sur un seul lien. La RFC 4291 impose à chaque interface IPv6 d’en avoir une, et la RFC 4861 impose à un routeur d’envoyer ses annonces depuis son adresse link-local.
IPv6 quand on connaît IPv4
Adresse MAC
L’adresse matérielle de 6 octets d’une interface réseau, comme 56:2a:92:53:89:1c. L’en-tête Ethernet porte une MAC de destination et une MAC source.
ARP et adresses MAC
Adresse privée
Une adresse dans l’un des trois blocs de la RFC 1918. Les routeurs d’internet sont censés rejeter les routes vers ces blocs, ce qui permet à chaque entreprise de réutiliser les mêmes.
Adresses IP et CIDR
Adresse réseau
La première adresse d’un préfixe, avec tous les bits d’hôte à 0. 100.68.0.18/18 et 100.68.0.0/18 désignent le même réseau.
Adresses IP et CIDR
ALPN
Une extension TLS où le client liste les protocoles qu’il parle et le serveur en choisit un. curl propose h2,http/1.1, et le serveur répond h2 pour choisir HTTP/2.
HTTP/2
ALPN
Une extension TLS, RFC 7301, qui choisit le protocole applicatif pendant la poignée de main. curl a proposé h2,http/1.1 et le serveur a choisi h2.
Une requête de bout en bout
Alt-Svc
Un en-tête de réponse qui annonce un autre moyen de joindre la même origine. h3=":443" veut dire HTTP/3 sur le port UDP 443, et ma donne le nombre de secondes pendant lequel l’offre reste fraîche.
HTTP/3 et QUIC
Announcement
Un message BGP UPDATE qui dit à un pair qu’il peut joindre un préfixe en passant par l’émetteur, avec un AS_PATH qui liste les AS traversés par la route.
BGP et anycast
Anycast
RFC 4786 : "making a particular Service Address available in multiple, discrete, autonomous locations". Chaque routeur envoie les paquets pour cette adresse vers le site que ses routes BGP choisissent.
BGP et anycast
Apex de zone
Le nom le plus haut d’une zone, noté @ dans un fichier de zone. Il porte toujours le SOA de la zone et ses enregistrements NS.
Les enregistrements DNS
ARP
Address Resolution Protocol (RFC 826) : une requête en broadcast "qui a cette IP" et une réponse "cette IP est à cette MAC", 28 octets chacune sur Ethernet.
ARP et adresses MAC
Autonomous system
Un réseau avec une seule politique de routage et un numéro, l’ASN. Facebook est l’AS32934, Cloudflare l’AS13335.
BGP et anycast
Backoff exponentiel
À chaque expiration du timer de retransmission, l’émetteur double le RTO avant de réarmer le timer.
Paquets perdus et retransmission
Bit TC
Le bit de troncature d’une réponse DNS. Il indique que la réponse ne tenait pas dans le datagramme UDP et que le client doit reposer la question en TCP.
UDP
Bits d’hôte
Les bits qui suivent la longueur du préfixe. Avec n bits d’hôte, le préfixe contient 2^n adresses.
Adresses IP et CIDR
Bridge
Un switch virtuel dans le noyau, comme docker0. Les interfaces qu’on y rattache avec master échangent des trames Ethernet comme si elles étaient branchées sur un même switch.
Les namespaces réseau
Broadcast
Une trame envoyée à ff:ff:ff:ff:ff:ff, que reçoit chaque machine du réseau local.
ARP et adresses MAC
Cache négatif
La mise en cache d’une réponse qui dit qu’un nom n’existe pas (NXDOMAIN) ou n’a aucun enregistrement du type demandé (NODATA). La question identique suivante reçoit la réponse depuis le cache.
TTL et cache DNS
Cache partagé
Un cache qui sert beaucoup d’utilisateurs : un nœud de CDN, ou nginx avec proxy_cache. Une page qu’il stocke peut partir chez quiconque demande la même clé de cache.
Le cache HTTP
Cache privé
Un cache utilisé par un seul utilisateur, comme le cache disque du navigateur. Cache-Control: private autorise ce cache et interdit les caches partagés.
Le cache HTTP
Capture filter
L’expression placée après les options, dans le langage de pcap-filter(7), par exemple tcp and host 192.168.128.2. tcpdump n’affiche que les paquets pour lesquels elle est vraie.
Lire tcpdump
Certificat feuille
Le certificat du serveur lui-même, en tête de la liste qu’il envoie. Il porte les noms d’hôte et la clé publique du serveur.
Les chaînes de certificats
Certificat intermédiaire
Un certificat d’AC qui signe des feuilles et qui est lui-même signé par une racine ou un autre intermédiaire. C’est au serveur de l’envoyer.
Les chaînes de certificats
cf-cache-status
Un en-tête de réponse de Cloudflare. HIT veut dire "The resource was found in Cloudflare's cache."
Une requête de bout en bout
Chaîne de base
Une chaîne nftables accrochée à un hook avec un type et une priorité, par exemple type filter hook forward priority filter. Sur un même hook, les priorités les plus basses passent en premier.
Le filtrage de paquets avec iptables et nftables
Chunked transfer coding
Un corps envoyé en morceaux, chacun précédé de sa taille en hexadécimal et d’un CRLF. Un morceau de taille 0 marque la fin. Le serveur s’en sert quand il ne connaît pas la longueur à l’avance.
HTTP/1.1 sur le fil
Clé de cache
Ce qu’un cache utilise pour retrouver une réponse stockée. RFC 9111 fixe le minimum à la méthode et l’URI. Dans nginx, la valeur par défaut est $scheme$proxy_host$request_uri.
Le cache HTTP
Clé de cache
La valeur que le cache utilise pour retrouver une réponse stockée. Par défaut, Fastly et Varnish prennent l’URL (chemin et query) plus l’en-tête Host.
Les CDN
ClientHello
Le premier message TLS, envoyé en clair par le client. Il liste les versions de TLS, les suites de chiffrement et les groupes d’échange de clés que le client gère, avec des extensions comme SNI et ALPN.
La poignée de main TLS 1.3
ClusterIP
L’adresse IP virtuelle que Kubernetes donne à un Service, par exemple 10.96.0.20. Les règles kube-proxy de chaque nœud capturent le trafic vers cette adresse et ce port et le réécrivent vers un Pod.
Les Services Kubernetes et kube-proxy
CNAME
Un enregistrement qui fait de son nom un alias d’un autre nom, le nom canonique. Un nom qui a un CNAME ne peut porter aucun autre enregistrement, hors enregistrements DNSSEC.
Les enregistrements DNS
Connect timeout
Le temps qu’un client attend la fin de la poignée de main TCP. Le DefaultTransport de Go se connecte avec Timeout: 30 * time.Second et laisse 10 secondes de plus à la poignée de main TLS.
Les timeouts
Connection ID
Un identifiant dans l’en-tête de chaque paquet QUIC, choisi par celui qui reçoit le paquet. Le destinataire retrouve la connexion grâce à lui, quelles que soient l’adresse IP et le port d’origine.
HTTP/3 et QUIC
Connexion inactive
Une connexion du pool sans requête en cours. Go la ferme après IdleConnTimeout, 90 s dans DefaultTransport.
Les pools de connexions
conntrack
La table de suivi des connexions de Linux. Elle garde une entrée par flux, avec les adresses et ports d’origine et ceux attendus dans les réponses, pour que le NAT s’applique à chaque paquet du flux.
NAT et conntrack
Content-Length
Un en-tête qui donne la taille du corps en octets, en décimal. Le destinataire lit exactement ce nombre d’octets après la ligne vide qui termine les en-têtes.
HTTP/1.1 sur le fil
Datagramme
Un message UDP. Il arrive entier ou pas du tout : le destinataire reçoit le message complet en un seul recv, ou rien.
UDP
Deadline
L’instant après lequel le client n’attend plus la réponse. gRPC l’envoie au serveur dans l’en-tête grpc-timeout, sous forme de durée restante.
gRPC sur HTTP/2
Découverte côté client
L’appelant lit la liste des instances dans le registre et choisit lui-même celle à laquelle il se connecte.
La découverte de services
Découverte côté serveur
L’appelant se connecte à une adresse fixe, et un load balancer ou un proxy derrière elle lit le registre et choisit l’instance.
La découverte de services
Drop
Un verdict qui jette le paquet sans rien renvoyer. Dans nftables, il arrête aussitôt l’évaluation de tout le ruleset.
Le filtrage de paquets avec iptables et nftables
En-tête hop-by-hop
Un en-tête valable pour une seule connexion, comme Upgrade et Connection. Un proxy ne le transmet pas au serveur suivant, sauf si on le configure.
Les WebSockets derrière un proxy
Endpoint
Un backend d’un Service, en général une adresse et un port de Pod comme 10.244.2.7:8080, listé dans une EndpointSlice.
Les Services Kubernetes et kube-proxy
Enregistrement de ressource
Une ligne de données DNS : un nom propriétaire, un TTL, une classe (IN), un type et les données. www.kubernetes.io. 3600 IN CNAME kubernetes.io. en est un.
Les enregistrements DNS
Enregistrement SRV
Un enregistrement DNS de type 33 (RFC 2782), nommé _service._proto.name, dont la réponse porte une priorité, un poids, un port et un nom d’hôte cible.
La découverte de services
ETag
Un validateur : une chaîne opaque que l’origine envoie avec la réponse, comme "6acfc371-36ae". Le cache la renvoie dans If-None-Match pour demander si sa copie est encore à jour.
Le cache HTTP
Fenêtre de congestion (cwnd)
La limite propre à l’émetteur sur les données non acquittées, en segments sous Linux. Elle part de 10 (TCP_INIT_CWND) et bouge à chaque ACK et à chaque perte.
Contrôle de flux et de congestion
Fenêtre de réception (rwnd)
Le nombre d’octets que le récepteur dit pouvoir accepter, envoyé dans le champ Window de 16 bits de chaque segment et multiplié par le facteur de window scaling.
Contrôle de flux et de congestion
Flags
Les bits de contrôle TCP, affichés entre crochets sous forme de lettres : S SYN, F FIN, P PSH, R RST et . pour ACK. [S.] est un SYN avec un ACK.
Lire tcpdump
Flapping
Un serveur qui passe sans cesse de UP à DOWN et inversement, si bien que le balancer l’ajoute au pool puis l’en retire en boucle.
Les health checks
Forwarded
L’en-tête standard de la RFC 7239, qui porte les mêmes informations dans un seul champ : Forwarded: for=192.0.2.43;proto=https;by=203.0.113.60.
Reverse proxies et en-têtes de transfert
FQDN
Fully qualified domain name : un nom qui finit par un point, comme api.github.com.. Le stub resolver l’envoie tel quel, sans liste de recherche.
resolv.conf, search et ndots
Frame
L’unité qu’envoie HTTP/2 : un en-tête de 9 octets (longueur, type, flags, stream ID) puis une charge. HEADERS porte les en-têtes de la requête, DATA le corps, RST_STREAM annule un stream.
HTTP/2
Handshake d’upgrade
Un GET HTTP/1.1 avec Upgrade: websocket et Connection: Upgrade. Une réponse 101 Switching Protocols transforme la connexion TCP en WebSocket.
Les WebSockets derrière un proxy
Happy Eyeballs
Un algorithme client (RFC 8305) pour les hôtes double pile : essayer IPv6 d’abord, et lancer une tentative IPv4 si IPv6 n’est pas connecté après un court délai, environ 250 ms.
IPv6 quand on connaît IPv4
Happy Eyeballs
Selon la doc de curl, un algorithme qui essaie IPv6 et IPv4 "giving IPv6 a head-start". Si IPv6 n’est pas connecté après le délai, une tentative IPv4 démarre en parallèle, et la première connectée gagne.
Une requête de bout en bout
Head-of-line blocking
Sur une connexion HTTP/1.1, une réponse doit partir en entier avant que la suivante commence : une réponse lente ou grosse retarde toutes les requêtes en file derrière elle.
HTTP/1.1 sur le fil
Health check actif
Une sonde que le balancer envoie selon son propre rythme, sans requête d’utilisateur : une connexion TCP, ou une requête HTTP comme option httpchk dans HAProxy.
Les health checks
Health check passif
Un verdict tiré du vrai trafic. Envoy l’appelle outlier detection : un hôte qui renvoie 5 réponses 5xx d’affilée est éjecté 30 s par défaut.
Les health checks
Hook netfilter
Un point fixe du trajet des paquets dans le noyau où des règles s’exécutent, comme prerouting, input, forward, output et postrouting. iptables et nftables accrochent tous deux leurs règles à ces hooks.
Le filtrage de paquets avec iptables et nftables
Hop
Un routeur sur le chemin. mtr trouve chaque hop en envoyant des sondes avec un TTL de 1, 2, 3 et ainsi de suite, et affiche la perte et le RTT de chacun.
Où passe le temps
HPACK
La compression d’en-têtes de HTTP/2 (RFC 7541). Un en-tête courant tient en un octet, un index dans une table statique de 61 entrées. Les en-têtes déjà envoyés sur la connexion vont dans une table dynamique de 4 096 octets par défaut.
HTTP/2
ICMP black hole
Un chemin où un routeur jette un paquet trop gros sans que son message ICMP « fragmentation needed » arrive jusqu’à l’émetteur, souvent parce qu’un pare-feu jette l’ICMP.
MTU et fragmentation
ICMP port unreachable
La réponse d’un hôte quand un datagramme UDP arrive sur un port où aucun socket n’écoute. Linux la remonte au socket émetteur sous la forme ECONNREFUSED.
UDP
Idle timeout
Le temps qu’une connexion keep-alive peut rester sans requête avant que son propriétaire la ferme. Le http.Server de Go l’appelle IdleTimeout, Node.js l’appelle keepAliveTimeout.
Les timeouts
Isolated pod
Un pod sélectionné par au moins une NetworkPolicy pour une direction (ingress ou egress). Dans cette direction, il n’accepte que les connexions qu’une policy autorise.
La NetworkPolicy de Kubernetes
Key share
L’extension key_share : la valeur publique du client pour un ou plusieurs groupes d’échange de clés, comme X25519. Avec celle du serveur, les deux côtés calculent le même secret sans jamais l’envoyer.
La poignée de main TLS 1.3
kube-proxy
L’agent présent sur chaque nœud qui surveille les Services et les EndpointSlices et écrit les règles iptables, nftables ou IPVS correspondantes.
Les Services Kubernetes et kube-proxy
Liste de recherche
La ligne search de /etc/resolv.conf : des domaines que le stub resolver ajoute au nom, un par un, jusqu’à ce que l’un d’eux existe.
resolv.conf, search et ndots
Longest prefix match
La règle qui départage les routes contenant la destination : celle qui a la plus grande longueur de préfixe l’emporte.
Les tables de routage
Magasin de confiance
Les certificats racines déjà présents sur le disque du client, par exemple les 122 certificats de /etc/ssl/certs/ca-certificates.crt sur la machine qui a servi à ce chapitre.
Les chaînes de certificats
MASQUERADE
Une cible SNAT d’iptables qui remplace la source par l’adresse de l’interface de sortie du paquet : la règle n’a besoin d’aucune IP fixe.
NAT et conntrack
Méthode CORS-safelisted
La liste du standard Fetch : GET, HEAD ou POST. Les autres méthodes demandent un preflight.
CORS
MSS
Maximum segment size : la plus grosse charge utile TCP qu’un hôte accepte, annoncée dans son SYN. En IPv4, c’est le MTU moins 40 octets (20 d’en-tête IP, 20 d’en-tête TCP), donc 1460 sur Ethernet.
MTU et fragmentation
MTU
Maximum transmission unit : la taille du plus gros paquet IP qu’un lien transporte d’un seul bloc, en-têtes compris. Ethernet utilise 1500 octets.
MTU et fragmentation
MX
Mail exchange : un nombre de préférence et le nom d’un hôte qui accepte le courrier pour ce nom. Les expéditeurs essaient d’abord la plus petite valeur.
Les enregistrements DNS
Namespace réseau
Une copie séparée de la pile réseau du noyau, avec ses propres interfaces, routes, règles de pare-feu et ports. Un processus appartient à un seul namespace et en hérite de son parent.
Les namespaces réseau
NAT
Network address translation : la réécriture de l’adresse source (SNAT) ou de l’adresse destination (DNAT) des paquets qui traversent une machine.
NAT et conntrack
ndots
Une option de /etc/resolv.conf. Un nom qui a moins de points que ndots passe par la liste de recherche avant d’être essayé tel quel. La glibc vaut 1 par défaut, Kubernetes met 5.
resolv.conf, search et ndots
Network plugin
Le plugin CNI qui câble le réseau des pods, comme Calico ou Cilium. Il surveille les objets NetworkPolicy et les applique sur chaque nœud.
La NetworkPolicy de Kubernetes
nf_conntrack_max
Le sysctl qui plafonne le nombre d’entrées de la table conntrack. nf_conntrack_count donne le nombre d’entrées utilisées.
NAT et conntrack
NodePort
Un port entre 30000 et 32767 par défaut, ouvert sur chaque nœud, qui mène au même Service.
Les Services Kubernetes et kube-proxy
Origin shield
Un POP désigné vers lequel tous les autres envoient leurs miss. Fastly : "visitor requests from across the global network funnel through a single, designated shield POP".
Les CDN
Origine
Le schéma, l’hôte et le port d’une page, comme https://example.org. Le navigateur l’envoie dans l’en-tête Origin d’une requête vers une autre origine.
CORS
Paire veth
Deux interfaces Ethernet virtuelles reliées dos à dos : un paquet émis sur l’une est reçu aussitôt sur l’autre. Les deux extrémités peuvent être dans des namespaces différents.
Les namespaces réseau
Paquet
Ce qu’IP route : un en-tête d’au moins 20 octets avec les adresses IP source et destination, un TTL et un numéro de protocole, puis le segment.
De quoi est faite une requête
Path MTU
Le plus petit MTU parmi tous les liens entre deux hôtes. La RFC 1191 le définit comme "the minimum of the MTUs of each hop in the path".
MTU et fragmentation
Persistance
Envoyer un même client vers le même serveur à chaque fois, aussi appelé sticky sessions. Dans HAProxy, par un cookie en mode http ou par balance source en mode tcp.
Répartition de charge en couche 4 et en couche 7
Persistent connection
Une connexion TCP qui porte plusieurs requêtes et réponses l’une après l’autre. HTTP/1.1 garde la connexion ouverte par défaut, sauf si un message porte Connection: close.
HTTP/1.1 sur le fil
podSelector
Un sélecteur de labels. Dans spec, il choisit les pods visés par la policy, et {} les prend tous dans le namespace. Dans une entrée from ou to, il choisit les pairs autorisés.
La NetworkPolicy de Kubernetes
Poignée de main
Les trois paquets qui ouvrent une connexion TCP : SYN du client, SYN-ACK du serveur, ACK du client. Chaque côté choisit un premier numéro de séquence, et l’autre l’acquitte.
La poignée de main TCP
policyTypes
La liste Ingress, Egress ou les deux dans une policy. Elle indique quelles directions la policy isole pour les pods qu’elle sélectionne.
La NetworkPolicy de Kubernetes
Pool bloquant
Un pool qui plafonne le nombre de connexions en service à sa taille. Une requête qui ne trouve aucune connexion libre attend au lieu d’en ouvrir une : urllib3 avec block=True, Go avec MaxConnsPerHost.
Les pools de connexions
Pool de connexions
Une liste par hôte de connexions ouvertes qu’une bibliothèque cliente garde entre deux requêtes, pour que la suivante saute les poignées de main TCP et TLS.
Les pools de connexions
POP de bord
Un point de présence : un site du CDN avec des serveurs de cache, proche des utilisateurs. Une requête arrive au plus proche, et seul un miss va plus loin vers l’origine.
Les CDN
Port éphémère
Le port source que le noyau choisit pour une connexion sortante quand le programme n’en fixe pas, dans ip_local_port_range : de 32768 à 60999 par défaut.
Ports, sockets et TIME_WAIT
Préfixe
Une adresse suivie d’une barre oblique et d’un nombre de 0 à 32, comme 10.0.0.0/28. Le nombre dit combien de bits de tête désignent le réseau. On appelle cette notation CIDR.
Adresses IP et CIDR
Preflight
Une requête OPTIONS que le navigateur envoie avant une requête non CORS-safelisted, avec Access-Control-Request-Method et Access-Control-Request-Headers.
CORS
Prochain saut
Le routeur à qui on confie le paquet, affiché via 172.17.0.1. Une route sans via veut dire que la destination est sur ce lien et reçoit le paquet directement.
Les tables de routage
Proxy de confiance
Une adresse que tu déclares comme l’un de tes proxies, par exemple set_real_ip_from 10.0.1.0/24; dans nginx. L’en-tête n’est lu que sur une requête arrivée d’un proxy de confiance.
Reverse proxies et en-têtes de transfert
Purge
Un retrait explicite de contenu du cache avant la fin de son TTL : une URL, tous les objets marqués d’une surrogate key, ou tout le service.
Les CDN
QUIC
Un protocole de transport sur UDP (RFC 9000). Il gère lui-même ses streams, ses retransmissions, son contrôle de congestion et sa poignée de main TLS 1.3. HTTP/3, c’est HTTP posé sur des streams QUIC.
HTTP/3 et QUIC
Read timeout
Le temps qu’un côté attend des données de l’autre. Le proxy_read_timeout 60s de nginx compte entre deux lectures depuis le backend, et le ReadTimeout de Go couvre la lecture de toute la requête.
Les timeouts
Referral
Une réponse sans réponse à la question, avec une liste d’enregistrements NS pour une zone plus proche du nom. La racine renvoie un referral vers les serveurs de org..
Comment un nom est résolu
Registre de services
Une base des instances en marche : nom du service, adresse, port et santé. Consul et l’API server de Kubernetes en tiennent chacun un.
La découverte de services
Reject
Une instruction qui renvoie une erreur (un ICMP port unreachable par défaut, ou un RST TCP avec tcp reset), puis jette le paquet.
Le filtrage de paquets avec iptables et nftables
Relative sequence number
Par défaut, tcpdump soustrait le premier numéro de séquence vu dans une conversation : le premier octet de données de chaque sens porte le numéro 1. L’option -S affiche les numéros bruts.
Lire tcpdump
Répartiteur de couche 4
Un répartiteur qui ne voit que TCP : IP et port source et destination. Il choisit un serveur à l’ouverture de la connexion, puis copie les octets. HAProxy en mode tcp.
Répartition de charge en couche 4 et en couche 7
Répartiteur de couche 7
Un répartiteur qui lit HTTP : méthode, chemin, en-têtes, cookies. Il peut choisir un serveur par requête. HAProxy en mode http.
Répartition de charge en couche 4 et en couche 7
Répartition par connexion
Un load balancer de couche 4 choisit un backend à l’ouverture d’une connexion TCP et lui envoie tous les octets de cette connexion.
gRPC sur HTTP/2
Répartition par requête
Une bibliothèque cliente ou un proxy HTTP/2 choisit un backend pour chaque appel, et les appels d’un même client se répartissent sur plusieurs backends.
gRPC sur HTTP/2
Résolveur récursif
Un serveur qui trouve la réponse pour ses clients en interrogeant d’autres serveurs, puis met en cache ce qu’il apprend. Unbound, BIND et les résolveurs des FAI et des services DNS publics font ce travail.
Comment un nom est résolu
Résolveur récursif
Le serveur auquel ta machine pose ses questions (celui de ton FAI, 1.1.1.1, CoreDNS dans un cluster). Il interroge les serveurs faisant autorité et garde chaque réponse en cache pendant le TTL.
TTL et cache DNS
Retransmission
Un segment renvoyé parce qu’aucun ACK n’est revenu à temps. Dans tcpdump, tu vois le même émetteur et la même plage seq réapparaître.
Lire tcpdump
Reverse proxy
Un serveur placé devant ton appli : il accepte les connexions des clients et ouvre ses propres connexions vers l’appli. Dans nginx, proxy_pass http://127.0.0.1:8000; fait d’une location un reverse proxy.
Reverse proxies et en-têtes de transfert
rise et fall
Les deux seuils de HAProxy : fall 3 échecs d’affilée marquent un serveur DOWN, rise 2 succès d’affilée le marquent UP.
Les health checks
Route par défaut
La route de 0.0.0.0/0, affichée default. Elle contient toutes les adresses avec une longueur de préfixe de 0, donc elle ne sert que si aucune autre route ne correspond.
Les tables de routage
RST
Le flag de reset. Une machine envoie un segment avec RST pour un port où aucune socket n’écoute. Le noyau du client fait alors échouer connect() avec ECONNREFUSED.
La poignée de main TCP
RTO
Retransmission timeout : le temps pendant lequel l’émetteur attend un ACK avant de renvoyer le plus ancien segment non acquitté. Linux le garde entre 200 ms et 120 s.
Paquets perdus et retransmission
RTT
Round trip time : le temps qu’un paquet met à atteindre une machine et sa réponse à revenir. ping a mesuré 256 ms vers ftp.jaist.ac.jp et 339 ms vers mirror.aarnet.edu.au.
Où passe le temps
Same-origin policy
La règle du navigateur : un script ne lit que les réponses de sa propre origine, sauf si l’autre serveur l’autorise avec des en-têtes CORS.
CORS
SAN
Subject Alternative Name : la liste des noms DNS et des adresses IP pour lesquels un certificat est valide. Le client compare le nom d’hôte à cette liste.
Les chaînes de certificats
Segment
Ce que TCP envoie : un en-tête d’au moins 20 octets avec les deux ports, les numéros de séquence et les flags, puis les octets de l’application.
De quoi est faite une requête
Serveur faisant autorité
Un serveur qui détient une zone, comme ns0.wikimedia.org pour wikipedia.org, et répond pour elle à partir de ses propres données.
Comment un nom est résolu
SLAAC
L’autoconfiguration d’adresse sans état (RFC 4862) : le routeur annonce un préfixe, et l’hôte y ajoute son propre identifiant d’interface de 64 bits pour former une adresse globale, sans serveur DHCP.
IPv6 quand on connaît IPv4
Slow start
La phase où cwnd gagne un segment par segment acquitté, ce qui la double à chaque aller-retour.
Contrôle de flux et de congestion
SNI
Server Name Indication, l’extension server_name du ClientHello. Elle nomme l’hôte voulu par le client : une seule adresse IP peut ainsi servir plusieurs sites, chacun avec son certificat.
La poignée de main TLS 1.3
SOA MINIMUM
Le dernier nombre de l’enregistrement SOA d’une zone. Depuis la RFC 2308, il plafonne la durée de cache d’une réponse négative venant de cette zone.
TTL et cache DNS
ssthresh
Seuil de slow start : en dessous, l’émetteur est en slow start, au-dessus, cwnd gagne environ un segment par aller-retour. Une perte le fixe à environ la moitié de cwnd.
Contrôle de flux et de congestion
Stream
Une requête et sa réponse à l’intérieur d’une connexion HTTP/2, numérotées par un stream ID de 31 bits. Les streams ouverts par le client ont des ID impairs : 1, 3, 5.
HTTP/2
Stream
Une requête et sa réponse dans une connexion HTTP/2, avec son propre identifiant. Chaque appel gRPC utilise un stream, et de nombreux streams partagent en même temps une connexion TCP.
gRPC sur HTTP/2
Stub resolver
Le résolveur dans l’application ou juste à côté. Il envoie chaque question, avec le bit RD (recursion desired) levé, aux serveurs de /etc/resolv.conf et attend une réponse complète.
Comment un nom est résolu
Stub resolver
Le client DNS intégré à ton programme, celui de la glibc sur la plupart des Linux. Il lit /etc/resolv.conf et envoie ses requêtes au nameserver indiqué.
resolv.conf, search et ndots
Stub resolver
Le résolveur qu’un programme interroge en premier. Sur ce portable, /etc/resolv.conf indique nameserver 127.0.0.53, le stub de systemd-resolved, qui transmet les requêtes absentes de son cache et garde les réponses.
Une requête de bout en bout
SYN-SENT
L’état du client entre l’envoi du SYN et la réception du SYN-ACK. RFC 9293 : "waiting for a matching connection request after having sent a connection request".
La poignée de main TCP
Table de routage
La liste des routes que le noyau lit pour décider où part un paquet sortant. ip route l’affiche. Chaque route associe un préfixe à l’endroit où envoyer ses paquets.
Les tables de routage
Table des voisins
Le cache du noyau qui associe IP et MAC d’après ARP, affiché par ip neigh, avec un état comme REACHABLE ou STALE sur chaque entrée.
ARP et adresses MAC
Taille du pool
Le nombre de connexions inactives que le pool garde par hôte : MaxIdleConnsPerHost en Go (2 par défaut), maxsize dans urllib3 (1 par défaut), pool_maxsize dans requests (10 par défaut).
Les pools de connexions
tcp_syn_retries
Le sysctl Linux qui fixe combien de fois un SYN sans réponse est renvoyé. Valeur par défaut : 6. La doc du noyau dit que la tentative expire alors "after 131seconds", et l’essai de ce chapitre a pris 135 secondes.
La poignée de main TCP
Terminaison TLS
Le répartiteur déchiffre TLS lui-même. Un répartiteur de couche 7 doit le faire pour lire des requêtes HTTPS ; un répartiteur de couche 4 peut faire passer les octets chiffrés tels quels.
Répartition de charge en couche 4 et en couche 7
Time to first byte
%{time_starttransfer} : le temps jusqu’à la réception du premier octet de la réponse. Il contient toutes les étapes d’avant et le travail du serveur.
Où passe le temps
TIME_WAIT
L’état d’un socket du côté qui a fermé en premier, après le dernier ACK. Linux le garde 60 secondes (TCP_TIMEWAIT_LEN), et ss l’affiche TIME-WAIT.
Ports, sockets et TIME_WAIT
Timeout total
Une limite sur l’appel entier : connexion, redirections, en-têtes et corps. Le http.Client{Timeout: 5 * time.Second} de Go en est un.
Les timeouts
Trame
Ce qu’Ethernet envoie : un en-tête de 14 octets avec la MAC de destination, la MAC source et un type, puis le paquet.
De quoi est faite une requête
Trame ping
Une trame de contrôle WebSocket d’opcode 0x9. L’autre côté « MUST send a Pong frame in response », opcode 0xA.
Les WebSockets derrière un proxy
TTL
Time to live : un octet de l’en-tête IP. Chaque routeur le baisse d’au moins 1 et jette le paquet quand il arrive à 0.
De quoi est faite une requête
TTL
Time to live : un nombre de secondes présent dans chaque enregistrement DNS. La RFC 1035 le définit comme l’intervalle "that the resource record may be cached before it should be discarded" (la durée de mise en cache autorisée).
TTL et cache DNS
UDP
User Datagram Protocol (RFC 768) : un en-tête de 8 octets avec port source, port destination, longueur et checksum, puis les données. Le noyau envoie chaque datagramme une seule fois, sans ouvrir de connexion avant, et ne sait jamais s’il est arrivé.
UDP
Withdrawal
La partie Withdrawn Routes d’un UPDATE. Elle dit aux pairs que le préfixe n’est plus joignable via l’émetteur, et ils relaient l’information.
BGP et anycast
Write-out timer
Une variable de curl -w comme %{time_connect}. Chacune donne le temps en secondes entre le début du transfert et la fin de cette étape.
Où passe le temps
X-Forwarded-For
Un en-tête de requête qui contient une liste d’adresses séparées par des virgules. Chaque proxy y ajoute l’adresse du pair qui lui a envoyé la requête : la dernière entrée vient donc du proxy le plus proche.
Reverse proxies et en-têtes de transfert