A hálózati mérnökök gyakran szembesülnek olyan helyzetekkel, amikor a TCP-t a hálózati infrastruktúrával vagy az alkalmazás teljesítményével vádolják. Kiterjedt csomagrögzítések, tcpdumps és hálózati elemzés elvégzése után gyakran felfedezik az igazi szűk keresztmetszetet: kimerült NIC (Network Interface Card) vagy OS- szintű pufferek az ügyfél- vagy szerverrendszereken.
Ez a cikk a Linux, a Windows és a MacOS meglévő (kb. 2009) és jelenlegi (2025- 2026) pufferkonfigurációit, valamint a puffer kimerülésének azonosítására szolgáló diagnosztikai technikákat biztosítja, mielőtt kritikus kérdéssé válna.
A TCP áramlásszabályozó mechanizmust használ, ahol a vevő "ablakméretet" hirdet, jelezve, hogy mennyi adatot tud elfogadni. Amikor a rendszerpufferek megtelnek, ez az ablak nullára zsugorodik, és arra kényszeríti a feladót, hogy várjon. Ez hálózati problémának tűnik, de valójában egy befogadó erőforrás-problémának.
# 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
| Paraméter | Legacy Value (2009) | Leírás |
|---|---|---|
| net.core.rmem _ default | 124928 (122KB) | Alapértelmezés a foglalatméret fogadása |
| net.core.rmem _ max | 131071 (128KB) | Maximális fogadóaljzatpufferméret |
| net.core.wmem _ default | 124928 (122KB) | Alapértelmezett küldés socket puffer mérete |
| net.core.wmem _ max | 131071 (128KB) | Maximális küldés socket pufferméret |
| net.ipv4.tcp _ rmem | 4096 87380 174760 | TCP kap puffer: perc, alapértelmezett, max (bájtokban) |
| net.ipv4.tcp _ wmem | 4096 16384 131072 | TCP küldés puffere: min, alapértelmezett, max (bájtokban) |
| net.ipv4.tcp _ mem | 196608 262144 393216 | TCP memória oldalak: alacsony, nyomás, magas |
| net.core.netdev _ max _ backlog | 1000 | Maximális csomagok beviteli sorban |
| net.core.optmem _ max | 10240 (10KB) | Maximális kiegészítő pufferméret foglalatonként |
| Parameter | Jelenlegi ajánlott érték | Description |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Default receive socket buffer size |
| net.core.rmem_max | 134217728 (18MB) | 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 kap puffer: perc, alapértelmezett, max (128MB max) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | TCP küldés puffere: perc, alapértelmezés, max (128MB max) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | TCP memória oldalak: alacsony, nyomás, magas (64GB rendszer) |
| net.core.netdev_max_backlog | 250000 | Maximális csomagok a bemeneti sorban (10GbE +) |
| net.core.optmem_max | 65536 (64KB) | Maximum ancillary buffer size per socket |
| net.ipv4.tcp _ correction _ control | bit | BBR szűk keresztmetszet-szabályozás (Google algoritmus) |
| net.ipv4.tcp _ window _ scaling | 1 | TCP ablak méretezése (RFC 1323) |
| net.ipv4.tcp _ timebrats | 1 | TCP időbélyegzők engedélyezése a jobb RTT becsléshez |
| net.ipv4.tcp _ sag | 1 | Szelektív elfogadás engedélyezése |
| net.ipv4.tcp _ no _ metrics _ save | 1 | A TCP-mérések zárolása |
A beállítások hozzáadása /etc/sysctl.conf vagy hozzon létre egy új fájlt /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) | Hely |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Regisztráló: HKLM\ System\ CurrentControlSet\ Services\ Tcpip\ Parameters |
| Tcp1323Opts | 0 (mozgásképtelen) | Az ablak méretezése alapértelmezett |
| DefaultReceiveAblak | 8192 (8KB) | Alapértelmezett átvételi ablak |
| DefaultSendAblak | 8192 (8KB) | Alapértelmezett küldés ablak |
| GlobalMaxTcpWindowSize | 65535 (64KB) | Maximális TCP ablak mérete |
| TcpNum- kapcsolatok | 16777214 | Maximális TCP-kapcsolatok |
Modern Windows használja a Ablak fogadása automatikus hangolás funkció, amely dinamikusan beállítja kap ütközők alapján hálózati feltételek.
| Jellemzők | Aktuális ajánlott beállítás | Description |
|---|---|---|
| Auto-hangolási szint | normál (vagy erősen kísérleti 10GbE +) | Dinamikus átvételi ablakbeállítás |
| Receive- Side Scaling (RSS) | engedélyezve | A hálózati feldolgozás elosztása a CPU-k között |
| Chimney Offload | automatikus (vagy a modern NIC-n kikapcsolt) | TCP offload NIC hardver |
| NetDMA | letiltva | Közvetlen memória hozzáférés (deprected) |
| TCP globális paraméterek | Lásd lent a parancsokat | Rendszer- széles TCP beállítások |
| Congestion Provider | CUBIC (vagy NewReno visszaesés) | TCP szűk keresztmetszet-ellenőrzési algoritmus |
# 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) | Maximális foglalatméret |
| net.inet.tcp.sendspace | 32768 (32KB) | Alapértelmezett TCP küldés puffere |
| net.inet.tcp.recvspace | 32768 (32KB) | Alapértelmezett TCP-puffer |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Maximális automatikus áthangoló puffer |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Maximális automatikus hangoló küldés puffere |
| net.inet.tcp.rfc1323 | 0 (disabled) | TCP ablak méretezése |
| Parameter | Current Recommended Value | Description |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (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 (engedélyezve) | TCP ablak méretezése |
| net.inet.tcp.zsák | 1 (enabled) | Enable Selective Acknowledgment |
| net.inet.tcp.mssdflt | 1440 | Alapértelmezett TCP maximális szegmens méret |
| net.inet.tcp.késleltetett _ ack | 3 | Késleltetett ACK viselkedés |
# 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 <LaunchDaemon létrehozása állandó beállításokhoz
# 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 Figyelem: MacOS Ventura (13) és később rendszerintegritás-védelmi (SIP) korlátozások. Néhány kernel paraméter lehet, hogy nem módosítható még sudo. Vizsgálati beállítások az adott környezetben.
# 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'
Keresse meg a pufferproblémák e mutatóit:
# 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
A hálózat optimális pufferméreteinek meghatározásához számítsa ki a Bandwidth- Delay terméket:
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.
| Munkaerőtípus | Ajánlott pufferméret | Kulcsparaméterek |
|---|---|---|
| Web Server (alacsony latencia) | 4- 16 MB | Alsó ütközők, több kapcsolat, gyors válasz |
| Adatbázis kiszolgáló | 16- 32 MB | Mérsékelt pufferek, következetes áttétel |
| Fájl átvitel / mentés | 64 - 128 MB | Maximális pufferek, nagy áteresztő prioritás |
| Video streaming | 32- 64 MB | Nagy pufferek, következetes szállítási arány |
| HPC / adatközpont | 128- 256 MB | Maximális ütközők, speciális torlódás-szabályozás |
| Vezeték nélküli / mobil | 2- 8 MB | Konzervatív pufferek, változó látens kezelés |
A buffer kimerültség egy közös oka a teljesítmény problémák, amelyek úgy tűnik, hogy a hálózathoz kapcsolódó. A 2009-es 128KB-tól a mai 128MB-kapacitásig terjedő pufferméretezés alakulásának megértésével a hálózati mérnökök gyorsan azonosítani és megoldani tudják ezeket a kérdéseket.
Kulcsfogók:
Ne feledje: A csomag elemzésével felfedett "hálózati probléma" a TCP zéró ablakok megjelenítéséhez valójában egy gazdasejt erőforrás probléma. Megfelelő pufferhangolással megszüntetheti ezeket a hamis diagnózisokat, és optimális teljesítményt érhet el.
Módosítás dátuma: 2026. február 2.
Szerző: Baud9600 Technical Team