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/18et100.68.0.0/18dé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épondh2pour 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.1et le serveur a choisih2. - 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, etmadonne 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 avecmasteré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: privateautorise 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.
HITveut 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
0marque 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
DefaultTransportde Go se connecte avecTimeout: 30 * time.Secondet 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 dansDefaultTransport. - 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
UpgradeetConnection. 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 dansIf-None-Matchpour 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 :
SSYN,FFIN,PPSH,RRST 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.
HEADERSporte les en-têtes de la requête,DATAle corps,RST_STREAMannule un stream. - HTTP/2
- Handshake d’upgrade
- Un
GETHTTP/1.1 avecUpgrade: websocketetConnection: Upgrade. Une réponse101 Switching Protocolstransforme 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 httpchkdans 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.Serverde Go l’appelleIdleTimeout, Node.js l’appellekeepAliveTimeout. - 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
searchde/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.crtsur 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,HEADouPOST. 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 quendotspasse 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_countdonne 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êteOrigind’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 httpou parbalance sourceenmode 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éefromouto, 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,Egressou 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 avecMaxConnsPerHost. - 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
OPTIONSque le navigateur envoie avant une requête non CORS-safelisted, avecAccess-Control-Request-MethodetAccess-Control-Request-Headers. - CORS
- Prochain saut
- Le routeur à qui on confie le paquet, affiché
via 172.17.0.1. Une route sansviaveut 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 60sde nginx compte entre deux lectures depuis le backend, et leReadTimeoutde 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-Saffiche 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
seqré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 2succès d’affilée le marquent UP. - Les health checks
- Route par défaut
- La route de
0.0.0.0/0, affichéedefault. 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()avecECONNREFUSED. - 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.
pinga 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.orgpourwikipedia.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_namedu 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.confet 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.confet envoie ses requêtes aunameserverindiqué. - resolv.conf, search et ndots
- Stub resolver
- Le résolveur qu’un programme interroge en premier. Sur ce portable,
/etc/resolv.confindiquenameserver 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 routel’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 commeREACHABLEouSTALEsur chaque entrée. - ARP et adresses MAC
- Taille du pool
- Le nombre de connexions inactives que le pool garde par hôte :
MaxIdleConnsPerHosten Go (2 par défaut),maxsizedans urllib3 (1 par défaut),pool_maxsizedans 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), etssl’afficheTIME-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 », opcode0xA. - 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 -wcomme%{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