วิศวกรเครือข่ายมักจะพบสถานการณ์ ที่การหน้าต่างแบบ TCP หรือการแสดงของโปรแกรม ถูกตําหนิในโครงสร้างพื้นฐานเครือข่าย หลังจากดําเนินการจับแพ็กเกจอย่างกว้างขวาง, tcpdops, และวิเคราะห์เครือข่ายแล้ว มักจะพบคอขวดที่แท้จริง: NIC อ่อนล้า (Network interform cards) หรือ OS-ระดับบัฟเฟอร์บนระบบไคลเอนต์หรือเซิร์ฟเวอร์
บทความ นี้ ให้ ทั้ง มรดก (ซีร์ กา 2009) และ ปัจจุบัน คือ (2025-2026) การปรับแต่งบัฟเฟอร์สําหรับลินุกซ์, วินโดวส์, และแมโกส พร้อมกับเทคนิคการวินิจฉัยโรค เพื่อระบุความอ่อนแรงของบัฟเฟอร์ก่อนที่จะกลายเป็นประเด็นที่สําคัญ
TCP ใช้กลไกควบคุมการไหล ซึ่งตัวรับโฆษณาขนาด "หน้าต่าง" ระบุว่าสามารถรับข้อมูลได้มากแค่ไหน เมื่อบัฟเฟอร์ของระบบเติมบ่งหน้าต่างนี้ให้เหลือศูนย์ ให้บังคับให้ผู้ส่งรอ นี้ปรากฏเป็นปัญหาเครือข่าย แต่จริง ๆ แล้วเป็นปัญหาทรัพยากรโฮสต์
# 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
| พารามิเตอร์ | (2009) | คําอธิบาย |
|---|---|---|
| net.core.rmem ค่าปริยาย | 124928 (122KB) พ.ศ. | ลบทั้งเธรด |
| net.core.rmem max | 131071 (128KB) | รับค่าบัฟเฟอร์สูงสุด |
| net.core. wmm ค่าปริยาย | 124928 (122KB) | ลบทั้งเธรด |
| net.core. wem max | 131071 (128KB) | ขนาดบัฟเฟอร์ส่งสูงสุด |
| net.ipv4.tcp rmem | 4096 87380 174760 | รับบัฟเฟอร์ของ TCP: นาที, ค่าปริยาย, ค่าสูงสุด (เป็นไบต์) |
| net.ipv4.tcp wmm | 4096 16384 131072 | ตัฟเฟอร์ของ TCP: นาที, ค่าปริยาย, ค่าสูงสุด (ค่าไบต์) |
| net.ipv4.tcp mem | 196608 262144 393216 | หน้าหน่วยความจํา TCP: ต่ํา, กด, สูง |
| net.core.netdv max backlog | 1000 | จํานวนแพกเกจสูงสุดในคิวนําเข้า |
| net.core.optmem max | 10240 (10KB) พ.ศ. | ขนาดบัฟเฟอร์สูงสุดต่อซ็อกเก็ต |
| Parameter | ค่าที่แนะนําในปัจจุบัน | 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: นาที, ค่าปริยาย, ค่าสูงสุด (128MB) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 (พ.ศ. | ตัฟเฟอร์สําหรับส่ง TCP: นาที, ค่าปริยาย, ค่าสูงสุด (128MB) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | หน้าหน่วยความจํา TCP: ต่ํา, กด, สูง (64GB) |
| net.core.netdev_max_backlog | 250000 | จํานวนแพกเกจสูงสุดในคิวป้อนข้อมูล (10GBE+) |
| net.core.optmem_max | 65536 (64KB) พ.ศ. | Maximum ancillary buffer size per socket |
| net.ipv4.tcp concesssion ควบคุม | bbr | ใช้การควบคุมระบบ BBR (อัลกอริทึมของโกเกิล) |
| net. ppv4.tcp wow scalling | 1 | เปิดใช้การปรับขนาดหน้าต่างแบบ TCP (RFC 1323) |
| net. ppv4.tcp timestamps | 1 | เปิดใช้การบันทึกเวลาของ TCP สําหรับค่าที่ดีขึ้นของ RTT |
| net. pipv4. tcp sack | 1 | เปิดการใช้งานตัวเลือก |
| net.ipv4.tcp no mode บันทึก | 1 | ปิดการใช้งานการจับเมตริกของ TCP |
เพิ่มการตั้งค่าเหล่านี้ไปยัง /etc/sysctl.conf หรือสร้างแฟ้มใหม่ /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) | ตําแหน่ง |
|---|---|---|
| ขนาด TcpWindowsize | 65535 (64KB) พ.ศ. | การลงทะเบียน: HKLM / System\ September Control Pet\ Serviews\ Tcpip/Parmeters |
| Tcp1323Opts | 0 (แก้ไขได้) | ปิดการใช้งานการปรับขนาดหน้าต่างโดยปริยาย |
| ค่าปริยายReceive Window | 8192 (8KB) | หน้าต่างปริยายที่ได้รับ |
| ค่าปริยาย | 8192 (8KB) | หน้าต่างจดหมายปริยาย |
| GlobalMaxTcpWindowsize | 65535 (64KB) | ขนาดหน้าต่างสูงสุด TCP |
| การเลือกตั้ง TcpNum | 16777214 | เชื่อมต่อ TCP สูงสุด |
วินโดวส์สมัยใหม่ใช้ รับค่าหน้าต่างอัตโนมัติ คุณสมบัติต่าง ๆ ที่มีการปรับเปลี่ยนอย่างฉับพลัน รับบัฟเฟอร์จากเงื่อนไขเครือข่าย
| คุณสมบัติ | การตั้งค่าที่แนะนําในปัจจุบัน | Description |
|---|---|---|
| ระดับการวนอัตโนมัติ | ปกติ (หรือการทดลองสูงสําหรับ 10GBE+) | ได้รับการปรับปรุงหน้าต่างแบบไม่ตายตัว |
| รับ- Side Scaling (RSS) | เปิด | เซ็กเมนต์: |
| การโหลดของคิมนีย์ | อัตโนมัติ (หรือปิดการใช้งาน NICS ปัจจุบัน) | โหลด TCP ไปยังฮาร์ดแวร์ NICName |
| เน็ตดีมา | ปิดการใช้งาน | การเข้าถึงหน่วยความจําโดยตรง (หมดอายุ) |
| พารามิเตอร์ต่าง ๆ ของ TCP | ดูคําสั่งด้านล่างนี้ | ตั้งค่า TCP ทั่วระบบ |
| ผู้จัดการการร้องเรียน | CUBIC (หรือนิวรีโนแบ็ค) | อัลกอริธึมควบคุมระบบ 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.pc.maxccccobf | 262144 (256KB) พ.ศ. | ขนาดบัฟเฟอร์ของซ็อกเก็ตสูงสุด |
| net.inet.tcp.sendspace | 32768 (32KB) พ.ศ. | บัฟเฟอร์ปริยายของ TCP |
| net.inet.tcp.recv space | 32768 (32KB) | บัฟเฟอร์ปริยายของ TCP |
| net.inet.tcp.aurvbufmax | 131072 (128KB) | บัฟเฟอร์ที่ได้รับอัตโนมัติ |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | บัฟเฟอร์ที่ส่งอัตโนมัติ |
| net.inet.tcp.rfc1323 | 0 (disabled) | ปรับขนาดหน้าต่างแบบ TCP |
| 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 (ใช้ได้) | เปิดใช้การปรับขนาดหน้าต่างแบบ TCP |
| ตาข่าย.inet.tcp.ack | 1 (enabled) | Enable Selective Acknowledgment |
| net.inet.tcp.msflasht | 1440 | ขนาดสัญลักษณ์ปริยายของ TCP |
| net.inet.tcp.delated ack | 3 | พฤติกรรม ที่ หน่วง เหนี่ยว |
# 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 <กําลังสร้างเด็มมอนสําหรับการตั้งค่าความต่อเนื่อง
# 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 คําเตือน: MacOS Trata (13) และต่อมามีการจํากัดการรักษาความ ซื่อ สัตย์ มั่นคงของระบบ (SIP). พารามิเตอร์ของเคอร์เนลบางตัว อาจจะไม่สามารถปรับได้แม้จะต้องใช้sudo การตั้งค่าการทดสอบในสภาพแวดล้อมของคุณ
# 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'
มองหาตัวบ่งชี้การบัฟเฟอร์
# 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
เพื่อวิเคราะห์ขนาดบัฟเฟอร์ที่เหมาะสมที่สุดสําหรับเครือข่ายของคุณ จงคํานวณ พรุตแบนด์วิธ-ดีเลย์:
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.
| ชนิดการดาวน์โหลดงาน | ขนาดบัฟเฟอร์แนะนํา | พารามิเตอร์ของกุญแจ |
|---|---|---|
| เซิร์ฟเวอร์เว็บ ( Low Ladry) | 4-16 MB | บัฟเฟอร์ด้านล่าง, การเชื่อมต่อมากขึ้น, การตอบสนองอย่างรวดเร็ว |
| เซิร์ฟเวอร์ฐานข้อมูล | 16-32 MB | ตลับหมึกปรับเสียง, สอดคล้องกัน |
| ถ่ายโอนแฟ้ม / สํารองข้อมูล | 64-128 MB | บัฟเฟอร์สูงสุด, ลําดับความสําคัญแบบผ่านค่าสูง |
| การถ่ายวิดีโอ | 32-64 MB | บัฟเฟอร์ขนาดใหญ่ อัตราการส่งมอบที่สอดคล้องกัน |
| ศูนย์ข้อมูล HPC | 128-256 MB | บัฟเฟอร์สูงสุด ควบคุมการจราจรเฉพาะ |
| ไร้สาย / โมบาย | 2-8 MB | บัฟเฟอร์แบบอนุรักษ์, การจัดการความล่าช้าตัวแปร |
ความเหนื่อยล้าเป็นรากเหง้าของปัญหาการแสดง ที่ดูเหมือนเกี่ยวข้องกับเครือข่าย ด้วยความเข้าใจถึงวิวัฒนาการของสารบัฟเฟอร์ จาก 128KB จํากัด จนถึงความสามารถในปัจจุบัน 128 MB
การรับกุญแจ:
จําไว้: "ปัญหางานเน็ตเวิร์ค" เปิดเผยโดยการวิเคราะห์แพ็กเกจเพื่อแสดงหน้าต่าง TCP ศูนย์ จริงๆ แล้วเป็นปัญหาเกี่ยวกับทรัพยากรของระบบโฮสต์ คุณ จะ ทํา อย่าง ไร?
ปรับปรุงล่าสุด: 2 กุมภาพันธ์ 2026
ผู้เขียน: Bud9600 ทีมเทคนิค