Els enginyers de xarxa sovint troben situacions en les quals el procés de finestres TCP o l' aplicació es culpa a la infraestructura de xarxa. Després de realitzar captures de paquet extensos, tcpdumps, i anàlisis de xarxa, sovint es descobreix el autèntic coll embotellat: s'ha acabat la memòria cau de la interfície NIC (Network Card) o de l' SO en sistemes client o servidor.
Aquest article proporciona les configuracions de la memòria intermèdia (circa 2009) i l' actual (2025- 2626) per al Linux, Windows, i MarcOS, juntament amb tècniques diagnòstics per identificar el creixement de la memòria intermèdia abans que sigui un problema crític.
TCP usa un mecanisme de control de flux on el receptor anuncia una mida de "mida de finestra" que indica quantes dades poden acceptar. Quan s' omple la memòria intermèdia del sistema, aquesta finestra s'encongeix a zero, obliga al remitent a esperar. Això apareixerà com un problema de xarxa, però en realitat és un problema de recurs amfitrió.
# Check current TCP buffer settings sysctl net.ipv4.tcp_rmem sysctl net.ipv4.tcp_wmem sysctl net.core.rmem_max sysctl net.core.wmem_max # Check NIC ring buffer sizes ethtool -g eth0 # Monitor socket buffer usage ss -tm # Check for TCP zero window events tcpdump -i any 'tcp[tcpflags] & tcp-push != 0' -vv # Check network statistics for buffer issues netstat -s | grep -i "buffer\|queue\|drop"
# Check TCP parameters
netsh interface tcp show global
# View network adapter buffer settings
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.DisplayName -like "*buffer*"}
# Monitor TCP statistics
netstat -s -p tcp
# Check receive window auto-tuning
netsh interface tcp show global | findstr "Receive Window"
# Check current buffer settings sysctl kern.ipc.maxsockbuf sysctl net.inet.tcp.sendspace sysctl net.inet.tcp.recvspace # View network statistics netstat -s -p tcp # Monitor socket buffers netstat -an -p tcp
| Paràmetre | Valor heretat (2009) | Descripció |
|---|---|---|
| net. corre. rem default | 124928 (122KB) | Per omissió rebeu la mida de la memòria intermèdia del sòcol |
| net.core.rm max | 131071 (128KB) | S' ha obtingut la mida màxima de la memòria intermèdia del sòcol |
| net. core. wem default | 124928 (122KB) | Mida per omissió de la memòria intermèdia del sòcol |
| net. core. wem max | 131071 (128KB) | Mida màxima d' enviament de la memòria intermèdia del sòcol |
| net.ipv4. tcp rmem | 4096 87380 174760 | TCP rep memòria intermèdia: min, predeterminat, max (en bytes) |
| net.ipv4. tcp wmem | 4096 1384 131072 | Memòria intermèdia TCP d' enviament: min, predeterminat, max (en bytes) |
| net.ipv4. tcp mem | 196608 262144 393216 | Pàgines de memòria TCP: baixa, pressió, alta |
| net. corre.netdev max log | 1000 | Nombre màxim de paquets a la cua d' entrada |
| net.core.opmem max | 10240 (10KB) | Mida màxima de la memòria intermèdia auxiliar per sòcol |
| Parameter | Valor recomanat actual | Description |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Default receive socket buffer size |
| net.core.rmem_max | 134217728 (128MB) | Maximum receive socket buffer size |
| net.core.wmem_default | 16777216 (16MB) | Default send socket buffer size |
| net.core.wmem_max | 134217728 (128MB) | Maximum send socket buffer size |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | TCP rep memòria intermèdia: min, per omissió, max (128MB max) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | Memòria intermèdia TCP d' enviament: min, per defecte, max (128MB màx) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Pàgines de memòria TCP: baixa, pressió, sistema alt (64GB) |
| net.core.netdev_max_backlog | 250000 | Paquets màxims a la cua d' entrada (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Maximum ancillary buffer size per socket |
| net.ipv4. tcp congestió control | bbrunit description in lists | Usa el control BBR congestió (algoritme del Google) |
| net.ipv4. tcp window scaling | 1 | Habilita l' escalat de la finestra TCP (RFC 1323) |
| net.ipv4. tcp timestamps | 1 | Habilita les marques de temps TCP per a una millor estimació del RTT |
| net.ipv4. tcp ack | 1 | Habilita l' achodització racional |
| net. ipv4. tcp no mimes save | 1 | Deshabilita la cau de mètriques TCP |
Afegeix aquests paràmetres a /etc/sysctl.conf o crea un nou fitxer /etc/sysctl.d/99-network-tuning.conf:
# Network Buffer Tuning for High-Performance Applications # Optimized for 10GbE+ networks with RTT up to 300ms # Core socket buffer settings net.core.rmem_default = 16777216 net.core.rmem_max = 134217728 net.core.wmem_default = 16777216 net.core.wmem_max = 134217728 # TCP buffer settings net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728 net.ipv4.tcp_mem = 8388608 12582912 16777216 # Device buffer settings net.core.netdev_max_backlog = 250000 net.core.netdev_budget = 50000 net.core.netdev_budget_usecs = 5000 net.core.optmem_max = 65536 # TCP optimizations net.ipv4.tcp_congestion_control = bbr net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1 # Apply with: sysctl -p /etc/sysctl.d/99-network-tuning.conf
# Check current ring buffer sizes ethtool -g eth0 # Set maximum ring buffer sizes (adjust based on NIC capabilities) ethtool -G eth0 rx 4096 tx 4096 # Make persistent by adding to /etc/network/interfaces or systemd service
| Parameter | Legacy Value (2009) | Localització |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registory: HKLM\ Sistema\ ControlActual\ Servei\ Tcpip\ Paràmetres |
| Tcp1323Opts | 0 (deshabilitat) | Escalat de finestra deshabilitat per omissió |
| FinestraRecessiva per defecte | 8192 (8KB) | La finestra per omissió rep |
| Finestra per defecte | 8192 (8KB) | Finestra d' enviament per omissió |
| Mida globalMaxTcpWindow | 65535 (64KB) | Mida màxima de la finestra TCP |
| Connexiós TcpNum | 16777214 | Màxim de connexions TCP |
Les finestres modernes usen les Rebeu automàticament la finestra característica, que ajusta dinàmicament reben memòries cau basades en condicions de xarxa.
| Característica | Configuració recomanada actual | Description |
|---|---|---|
| Nivell d' autoengegament | normal (o molt experimental per 10GbE+) | Ajust de la finestra dinàmic |
| Escalat de recepció (RSSS) | habilitat | Distribueix el processament de xarxa a través de CPU |
| Carregat Chimney | Automàtic (o deshabilitat en els NIC moderns) | Càrrega TCP al maquinari NIC |
| NetDMA | deshabilitat | Accés de memòria directa (desaconsellat) |
| Paràmetres globals TCP | Mireu les ordres de sota | Paràmetres TCP de tot el sistema |
| Proveïdor CongestióName | CUBIC (o una nova alternativa) | Algorisme de control de la congestió TCP |
# Check current auto-tuning level netsh interface tcp show global # Enable auto-tuning (normal mode - default for most scenarios) netsh interface tcp set global autotuninglevel=normal # For high-bandwidth, high-latency networks (10GbE+, data center environments) netsh interface tcp set global autotuninglevel=experimental # For conservative tuning (if experimental causes issues) netsh interface tcp set global autotuninglevel=restricted # For very conservative tuning (not recommended for high-performance networks) netsh interface tcp set global autotuninglevel=highlyrestricted # Enable CUBIC congestion provider (Windows Server 2022/Windows 11+ only) netsh interface tcp set supplemental template=Internet congestionprovider=cubic # Note: Windows 10 and Server 2019 use Compound TCP or NewReno by default # CUBIC is not available on these older versions # Enable Receive-Side Scaling (RSS) netsh interface tcp set global rss=enabled # Set chimney offload (automatic is recommended) netsh interface tcp set global chimney=automatic # Disable NetDMA (recommended for modern systems) netsh interface tcp set global netdma=disabled # Enable Direct Cache Access (if supported) netsh interface tcp set global dca=enabled # Enable ECN (Explicit Congestion Notification) netsh interface tcp set global ecncapability=enabled # Set initial congestion window to 10 (RFC 6928) netsh interface tcp set global initialRto=3000
# View current adapter settings Get-NetAdapterAdvancedProperty -Name "Ethernet" # Increase receive buffers (adjust based on NIC) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Receive Buffers" -DisplayValue 2048 # Increase transmit buffers Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Transmit Buffers" -DisplayValue 2048 # Enable Jumbo Frames (if network supports it) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Jumbo Packet" -DisplayValue 9014 # Enable Large Send Offload (LSO) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv4)" -DisplayValue Enabled Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv6)" -DisplayValue Enabled
# These settings are typically NOT needed on Windows 10/11 due to auto-tuning # Only modify if auto-tuning is disabled or problematic # Registry path: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters # Maximum TCP window size (if auto-tuning disabled) # TcpWindowSize = 16777216 (16MB) - REG_DWORD # Enable window scaling (enabled by default on modern Windows) # Tcp1323Opts = 3 - REG_DWORD # Number of TCP Timed Wait Delay # TcpTimedWaitDelay = 30 - REG_DWORD (default 240)
| Parameter | Legacy Value (2009) | Description |
|---|---|---|
| kern.ipc.maxsocuf | 262144 (256KB) | Mida màxima de la memòria intermèdia del sòcol |
| net.inet. tcp. sendspace | 32768 (32KB) | Memòria intermèdia d' enviament TCP per omissió |
| net.inet. tcp.recvspace | 32768 (32KB) | El TCP per omissió rep la memòria intermèdia |
| net.int. tcp. autorcvbumax | 131072 (128KB) | Obtén la memòria intermèdia màxima automàtica |
| net.int. tcp. autosndbumax | 131072 (128KB) | Memòria intermèdia màxima d' enviament automàtica |
| net.inet. tcp. rfc1323 | 0 (disabled) | Escalat de la finestra TCP |
| Parameter | Current Recommended Value | Description |
|---|---|---|
| kern.ipc.maxsockbuf | 838608 (8MB) | Maximum socket buffer size |
| net.inet.tcp.sendspace | 131072 (128KB) | Default TCP send buffer |
| net.inet.tcp.recvspace | 131072 (128KB) | Default TCP receive buffer |
| net.inet.tcp.autorcvbufmax | 16777216 (16MB) | Maximum auto-tuned receive buffer |
| net.inet.tcp.autosndbufmax | 16777216 (16MB) | Maximum auto-tuned send buffer |
| net.inet.tcp.rfc1323 | 1 (activat) | Habilita l' escalat de la finestra TCP |
| net.inet. tcp. seck | 1 (enabled) | Enable Selective Acknowledgment |
| net.inet. tcp.msdflt | 1440 | Mida màxima del segment TCP per omissió |
| net.inet. tcp. delayed ack | 3 | Comportament retardat del ACK |
# Check current settings sysctl kern.ipc.maxsockbuf sysctl net.inet.tcp.sendspace sysctl net.inet.tcp.recvspace sysctl net.inet.tcp.autorcvbufmax sysctl net.inet.tcp.autosndbufmax # Apply settings temporarily (until reboot) sudo sysctl -w kern.ipc.maxsockbuf=8388608 sudo sysctl -w net.inet.tcp.sendspace=131072 sudo sysctl -w net.inet.tcp.recvspace=131072 sudo sysctl -w net.inet.tcp.autorcvbufmax=16777216 sudo sysctl -w net.inet.tcp.autosndbufmax=16777216 sudo sysctl -w net.inet.tcp.rfc1323=1 sudo sysctl -w net.inet.tcp.sack=1 # Make settings persistent (create /etc/sysctl.conf) sudo tee /etc/sysctl.conf <Crear un llançament per a arranjaments persistents
# Create /Library/LaunchDaemons/com.local.sysctl.plist sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <EOF sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist Label com.local.sysctl ProgramArguments /usr/sbin/sysctl -w kern.ipc.maxsockbuf=8388608 RunAtLoad Avís: Les restriccions de protecció de macOS Ventura (13) i posterior tenen Sistema Integralitat (SIP). Alguns paràmetres del nucli no poden ser modificables fins i tot amb sudo. Arranjament de la prova en el vostre entorn específic.
# Server side iperf3 -s # Client side - test TCP throughput iperf3 -c server_ip -t 60 -i 5 -w 16M # Test with multiple parallel streams iperf3 -c server_ip -P 10 -t 60 # Test UDP performance iperf3 -c server_ip -u -b 1000M -t 60
# Capture and display TCP window sizes tcpdump -i any -n 'tcp' -vv | grep -i window # Save capture for Wireshark analysis tcpdump -i any -w /tmp/capture.pcap 'tcp port 443'
Mireu aquests indicadors de temes de memòria intermèdia:
# Linux - Monitor network buffer statistics watch -n 1 'cat /proc/net/sockstat' watch -n 1 'ss -tm | grep -i mem' # Check for drops netstat -s | grep -i drop # Windows - Monitor TCP statistics netstat -e 1 # macOS - Monitor network statistics netstat -s -p tcp
Per a determinar la mida òptima de la memòria intermèdia per a la vostra xarxa, calculeu el producte Band width- Delay Whell:
BDP = Bandwidth (bits/sec) × RTT (seconds) Example for 10 Gigabit Ethernet with 50ms RTT: BDP = 10,000,000,000 × 0.050 = 500,000,000 bits = 62.5 MB Buffer Size = BDP × 2 (for bidirectional traffic and headroom) Buffer Size = 62.5 MB × 2 = 125 MB This is why modern settings recommend 128MB maximum buffers.
| Tipus de càrrega de feina | Mida recomanada de la memòria intermèdia | Paràmetres de clau |
|---|---|---|
| Servidor web (B baixa retardenc) | 4- 16 MB | Memòria intermèdia inferior, més connexions, resposta ràpida |
| Servidor de bases de dades | 1632 MB | Memòria intermèdia moderada, consistent amb el rendiment |
| Transferència de fitxers / còpia de seguretat | 64- 128 MB | Memòria intermèdia màxima, alta prioritat d' alt rendiment |
| Corrent de vídeo | 3264 MB | Memòria intermèdia gran, taxa de lliurament consistent |
| Centre de dades HPC / | 128- 256 MB | Control màxim de memòria intermèdia, congestió especialitzada |
| Sense fils / Mòbil | 2-8 MB | Memòria intermèdia conservadora, gestió de la llicència variable |
El creixement de la memòria intermèdia és una causa comuna de temes relacionats amb la xarxa. En entendre l'evolució de la mida de la memòria intermèdia dels límits 128 KB a les capacitats de 128MB, els enginyers de xarxa poden identificar ràpidament i resoldre aquests problemes.
Punts de clau:
Recordeu: Un problema "network" revelat per l'anàlisi de paquets per mostrar les finestres TCP zero és realment un problema del recurs amfitrió. Amb un ajustament de la memòria intermèdia apropiat, podeu eliminar aquests diagnòstics falsos i aconseguir rendiment òptima.
Darrera actualització: febrer 2, 2026
Autor: equip tècnic Baud9600