Nätverksingenjörer möter ofta situationer där TCP-fönster eller applikationsprestanda skylls på nätverksinfrastruktur. Efter att ha utfört omfattande paketfångster, tcpdumps och nätverksanalys, är den sanna flaskhalsen ofta upptäckt: utmattad NIC (Network Interface Card) eller OS-nivå buffertar på klienten eller serversystemen.
Denna artikel ger både arv (cirka 2009) och nuvarande (2025-2026) buffertkonfigurationer för Linux, Windows och macOS, tillsammans med diagnostiska tekniker för att identifiera buffertutmattning innan det blir en kritisk fråga.
TCP använder en flödeskontrollmekanism där mottagaren annonserar en "fönsterstorlek" som anger hur mycket data den kan acceptera. När systembuffertar fyller upp, krymper detta fönster till noll, vilket tvingar avsändaren att vänta. Detta verkar som ett nätverksproblem men är faktiskt en värdresursfråga.
# 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
| Parameter | Legacy Value (2009) | Beskrivning |
|---|---|---|
| net.core.rmem default | 124928 (122KB) | Standard får socket buffert storlek |
| net.core.rmem max | 131071 (128KB) | Maximalt får socket buffert storlek |
| net.core.wmem default | 124928 (122KB) | Standard skickar socket buffert storlek |
| net.core.wmem max | 131071 (128KB) | Maximum skicka socket buffert storlek |
| net.ipv4.tcp rmem | 4096 87380 174760 | TCP får buffert: min, standard, max (i byte) |
| net.ipv4.tcp wmem | 4096 16384 131072 | TCP skickar buffert: min, standard, max (i byte) |
| net.ipv4.tcp mem | 196608 262144 393216 | TCP minnessidor: lågt, tryck, högt |
| net.core.netdev max backlog | 1000 1000 1000 | Maximala paket i ingångskö |
| net.core.optmem max | 10240 (10KB) | Maximal ancillär buffertstorlek per socket |
| Parameter | Nuvarande rekommenderat värde | Description |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Default receive socket buffer size |
| net.core.rmem_max | 134217728 (128 MB) | 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 får buffert: min, standard, max (128 MB max) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | TCP skickar buffert: min, standard, max (128 MB max) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | TCP-minnessidor: lågt, tryck, högt (64 GB-system) |
| net.core.netdev_max_backlog | 2500 | Maximala paket i ingångskö (10GbE +) |
| net.core.optmem_max | 65536 (64KB) | Maximum ancillary buffer size per socket |
| net.ipv4.tcp congestion control | bbr | Använd BBR trängsel kontroll (Google algoritm) |
| net.ipv4.tcp window scaling | 1 1 | Aktivera TCP fönsterskala (RFC 1323) |
| net.ipv4.tcp timestamps | 1 | Aktivera TCP-tidsstämplar för bättre RTT-uppskattning |
| net.ipv4.tcp sack | 1 | Aktivera selektiv erkännande |
| net.ipv4.tcp no metrics save | 1 | Inaktivera cachning av TCP mätvärden |
Lägg till dessa inställningar för att /etc/sysctl.conf eller skapa en ny fil /etc/sysctl.d/99-network-tuning.confFrån:
# 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) | Plats |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registrering: HKLM\System\CurrentControlSet\Services\Tcpip\Parametrar |
| Tcp1323Opts | 0 (inaktiverad) | Fönsterskalning inaktiverad som standard |
| DefaultReceiveWindow | 8192 (8KB) | Standard får fönster |
| DefaultSendWindow | 8192 (8KB) | Standard skicka fönster |
| GlobalMaxTcpWindowSize | 65535 (64KB) | Maximal TCP fönsterstorlek |
| TcpNumConnections | 16777214 | Maximala TCP-anslutningar |
Modern Windows använder Få fönster Auto-Tuning funktion, som dynamiskt justerar får buffertar baserat på nätverksförhållanden.
| Funktion | Nuvarande rekommenderad inställning | Description |
|---|---|---|
| Auto-Tuning nivå | normalt (eller mycket experimentellt för 10GbE +) | Dynamisk får fönsterjustering |
| Receive-Side Scaling (RSS) | aktiverad | Distribuera nätverksbehandling över CPU: er |
| Chimney Offload | automatisk (eller inaktiverad på moderna NIC) | TCP offload till NIC hårdvara |
| NetDMA | Inaktiverad | Direct Memory Access (förhindrad) |
| TCP globala parametrar | Se kommandon nedan | Systemomfattande TCP-inställningar |
| Överbelastningsleverantör | CUBIC (eller NewReno fallback) | TCP trängsel kontroll algoritm |
# 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.maxsockbuf | 262144 (256KB) | Maximal socket buffertstorlek |
| net.inet.tcp.sendspace | 32768 (32KB) | Standard TCP skickar buffert |
| net.inet.tcp.recvspace | 32768 (32KB) | Standard TCP får buffert |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Maximal auto-tuned får buffert |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Maximal auto-tuned skicka buffert |
| net.inet.tcp.rfc1323 | 0 (disabled) | TCP fönster skalning |
| Parameter | Current Recommended Value | Description |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 MB) | 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 (aktiverad) | Aktivera TCP fönster skalning |
| net.inet.tcp.sack | 1 (enabled) | Enable Selective Acknowledgment |
| net.inet.tcp.mssdflt | 1440 | Standard TCP Maximal Segment Size |
| net.inet.tcp.delayed ack | 3 3 3 3 3 | Försenat ACK beteende |
# 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 <Skapa en LaunchDaemon för ihållande inställningar
# 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 Varning: macOS Ventura (13) och senare har System Integrity Protection (SIP) restriktioner. Vissa kärnparametrar kanske inte kan ändras även med sudo. Testinställningar i din specifika miljö.
# 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'
Leta efter dessa indikatorer på buffertproblem:
# 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
För att bestämma optimala buffertstorlekar för ditt nätverk, beräkna Bandwidth-Delay Product:
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.
| Workload Type | Rekommenderad buffertstorlek | Nyckelparametrar |
|---|---|---|
| Web Server (Låg latens) | 4-16 MB | Lägre buffertar, fler anslutningar, snabb respons |
| Databas Server | 16-32 MB | Måttliga buffertar, konsekvent genomströmning |
| Filöverföring / Backup | 64-128 MB | Maximal buffert, hög genomströmsprioritet |
| Video Streaming | 32-64 MB | Stora buffertar, konsekvent leveranshastighet |
| HPC / Data Center | 128-256 MB | Maximal buffert, specialiserad trängselkontroll |
| Trådlös / Mobil | 2-8 MB | Konservativa buffertar, variabel latenshantering |
Buffertutmattning är en vanlig orsak till prestandaproblem som verkar vara nätverksrelaterade. Genom att förstå utvecklingen av buffertstorlekar från 2009s 128KB-gränser till dagens 128 MB-kapacitet kan nätverksingenjörer snabbt identifiera och lösa dessa problem.
Key takeaways:
Kom ihåg: Ett "nätverksproblem" som avslöjas genom paketanalys för att visa TCP-nollfönster är faktiskt ett värdsystemresursproblem. Med korrekt buffertjustering kan du eliminera dessa falska diagnoser och uppnå optimal prestanda.
Senast uppdaterad: 2 februari 2026
Författare: Baud9600 Tekniskt Team